summaryrefslogtreecommitdiff
path: root/gsl-1.9/doc
diff options
context:
space:
mode:
Diffstat (limited to 'gsl-1.9/doc')
-rw-r--r--gsl-1.9/doc/12-cities.eps15622
-rw-r--r--gsl-1.9/doc/ChangeLog62
-rw-r--r--gsl-1.9/doc/Makefile.am21
-rw-r--r--gsl-1.9/doc/Makefile.in674
-rw-r--r--gsl-1.9/doc/algorithm.sty79
-rw-r--r--gsl-1.9/doc/algorithmic.sty158
-rw-r--r--gsl-1.9/doc/autoconf.texi132
-rw-r--r--gsl-1.9/doc/blas.texi686
-rw-r--r--gsl-1.9/doc/bspline.eps6930
-rw-r--r--gsl-1.9/doc/bspline.texi158
-rw-r--r--gsl-1.9/doc/calc.sty150
-rw-r--r--gsl-1.9/doc/cblas.texi514
-rw-r--r--gsl-1.9/doc/cheb.eps3348
-rw-r--r--gsl-1.9/doc/cheb.texi177
-rw-r--r--gsl-1.9/doc/combination.texi221
-rw-r--r--gsl-1.9/doc/complex.texi493
-rw-r--r--gsl-1.9/doc/const.texi575
-rw-r--r--gsl-1.9/doc/debug.texi389
-rw-r--r--gsl-1.9/doc/dht.texi152
-rw-r--r--gsl-1.9/doc/diff.texi105
-rw-r--r--gsl-1.9/doc/dwt-orig.eps2657
-rw-r--r--gsl-1.9/doc/dwt-samp.eps2657
-rw-r--r--gsl-1.9/doc/dwt.texi449
-rw-r--r--gsl-1.9/doc/eigen.texi462
-rw-r--r--gsl-1.9/doc/err.texi306
-rw-r--r--gsl-1.9/doc/examples/blas.c31
-rw-r--r--gsl-1.9/doc/examples/blas.out2
-rw-r--r--gsl-1.9/doc/examples/block.c14
-rw-r--r--gsl-1.9/doc/examples/block.out2
-rw-r--r--gsl-1.9/doc/examples/bspline.c116
-rw-r--r--gsl-1.9/doc/examples/cblas.c33
-rw-r--r--gsl-1.9/doc/examples/cblas.out2
-rw-r--r--gsl-1.9/doc/examples/cdf.c23
-rw-r--r--gsl-1.9/doc/examples/cdf.out4
-rw-r--r--gsl-1.9/doc/examples/cheb.c40
-rw-r--r--gsl-1.9/doc/examples/combination.c25
-rw-r--r--gsl-1.9/doc/examples/combination.out17
-rw-r--r--gsl-1.9/doc/examples/const.c25
-rw-r--r--gsl-1.9/doc/examples/const.out3
-rw-r--r--gsl-1.9/doc/examples/demo_fn.c40
-rw-r--r--gsl-1.9/doc/examples/demo_fn.h9
-rw-r--r--gsl-1.9/doc/examples/diff.c32
-rw-r--r--gsl-1.9/doc/examples/diff.out8
-rw-r--r--gsl-1.9/doc/examples/dwt.c54
-rw-r--r--gsl-1.9/doc/examples/dwt.dat256
-rw-r--r--gsl-1.9/doc/examples/ecg.dat256
-rw-r--r--gsl-1.9/doc/examples/eigen.c50
-rw-r--r--gsl-1.9/doc/examples/eigen_nonsymm.c54
-rw-r--r--gsl-1.9/doc/examples/expfit.c70
-rw-r--r--gsl-1.9/doc/examples/fft.c43
-rw-r--r--gsl-1.9/doc/examples/fftmr.c60
-rw-r--r--gsl-1.9/doc/examples/fftreal.c59
-rw-r--r--gsl-1.9/doc/examples/fitting.c45
-rw-r--r--gsl-1.9/doc/examples/fitting2.c80
-rw-r--r--gsl-1.9/doc/examples/fitting3.c29
-rw-r--r--gsl-1.9/doc/examples/histogram.c37
-rw-r--r--gsl-1.9/doc/examples/histogram2d.c50
-rw-r--r--gsl-1.9/doc/examples/ieee.c22
-rw-r--r--gsl-1.9/doc/examples/ieeeround.c30
-rw-r--r--gsl-1.9/doc/examples/integration.c37
-rw-r--r--gsl-1.9/doc/examples/integration.out5
-rw-r--r--gsl-1.9/doc/examples/interp.c41
-rw-r--r--gsl-1.9/doc/examples/interpp.c40
-rw-r--r--gsl-1.9/doc/examples/intro.c11
-rw-r--r--gsl-1.9/doc/examples/intro.out1
-rw-r--r--gsl-1.9/doc/examples/linalglu.c36
-rw-r--r--gsl-1.9/doc/examples/linalglu.out4
-rw-r--r--gsl-1.9/doc/examples/matrix.c22
-rw-r--r--gsl-1.9/doc/examples/matrixw.c40
-rw-r--r--gsl-1.9/doc/examples/min.c65
-rw-r--r--gsl-1.9/doc/examples/min.out13
-rw-r--r--gsl-1.9/doc/examples/monte.c106
-rw-r--r--gsl-1.9/doc/examples/nlfit.c115
-rw-r--r--gsl-1.9/doc/examples/ntupler.c72
-rw-r--r--gsl-1.9/doc/examples/ntuplew.c43
-rw-r--r--gsl-1.9/doc/examples/ode-initval.c70
-rw-r--r--gsl-1.9/doc/examples/odefixed.c42
-rw-r--r--gsl-1.9/doc/examples/permseq.c21
-rw-r--r--gsl-1.9/doc/examples/permshuffle.c40
-rw-r--r--gsl-1.9/doc/examples/polyroots.c26
-rw-r--r--gsl-1.9/doc/examples/polyroots.out5
-rw-r--r--gsl-1.9/doc/examples/qrng.c19
-rw-r--r--gsl-1.9/doc/examples/randpoisson.2.out2
-rw-r--r--gsl-1.9/doc/examples/randpoisson.c35
-rw-r--r--gsl-1.9/doc/examples/randpoisson.out1
-rw-r--r--gsl-1.9/doc/examples/randwalk.c29
-rw-r--r--gsl-1.9/doc/examples/rng.c22
-rw-r--r--gsl-1.9/doc/examples/rng.out3
-rw-r--r--gsl-1.9/doc/examples/rngunif.2.out12
-rw-r--r--gsl-1.9/doc/examples/rngunif.c26
-rw-r--r--gsl-1.9/doc/examples/rngunif.out10
-rw-r--r--gsl-1.9/doc/examples/rootnewt.c52
-rw-r--r--gsl-1.9/doc/examples/roots.c58
-rw-r--r--gsl-1.9/doc/examples/siman.c82
-rw-r--r--gsl-1.9/doc/examples/sortsmall.c38
-rw-r--r--gsl-1.9/doc/examples/sortsmall.out6
-rw-r--r--gsl-1.9/doc/examples/specfun.c15
-rw-r--r--gsl-1.9/doc/examples/specfun.out2
-rw-r--r--gsl-1.9/doc/examples/specfun_e.c21
-rw-r--r--gsl-1.9/doc/examples/specfun_e.out4
-rw-r--r--gsl-1.9/doc/examples/stat.c23
-rw-r--r--gsl-1.9/doc/examples/stat.out5
-rw-r--r--gsl-1.9/doc/examples/statsort.c36
-rw-r--r--gsl-1.9/doc/examples/statsort.out5
-rw-r--r--gsl-1.9/doc/examples/sum.c47
-rw-r--r--gsl-1.9/doc/examples/sum.out6
-rw-r--r--gsl-1.9/doc/examples/vector.c22
-rw-r--r--gsl-1.9/doc/examples/vectorr.c23
-rw-r--r--gsl-1.9/doc/examples/vectorview.c30
-rw-r--r--gsl-1.9/doc/examples/vectorview.out10
-rw-r--r--gsl-1.9/doc/examples/vectorw.c23
-rw-r--r--gsl-1.9/doc/fdl.texi455
-rw-r--r--gsl-1.9/doc/fft-complex-radix2-f.eps298
-rw-r--r--gsl-1.9/doc/fft-complex-radix2-t.eps426
-rw-r--r--gsl-1.9/doc/fft-complex-radix2.eps682
-rw-r--r--gsl-1.9/doc/fft-real-mixedradix.eps606
-rw-r--r--gsl-1.9/doc/fft.texi1001
-rw-r--r--gsl-1.9/doc/fftalgorithms.bib240
-rw-r--r--gsl-1.9/doc/fftalgorithms.tex3296
-rw-r--r--gsl-1.9/doc/final-route.eps11635
-rw-r--r--gsl-1.9/doc/fit-exp.eps767
-rw-r--r--gsl-1.9/doc/fit-wlinear.eps6958
-rw-r--r--gsl-1.9/doc/fit-wlinear2.eps5908
-rw-r--r--gsl-1.9/doc/fitting.texi501
-rw-r--r--gsl-1.9/doc/freemanuals.texi99
-rw-r--r--gsl-1.9/doc/gpl.texi407
-rw-r--r--gsl-1.9/doc/gsl-config.142
-rw-r--r--gsl-1.9/doc/gsl-design.texi1610
-rw-r--r--gsl-1.9/doc/gsl-histogram.142
-rw-r--r--gsl-1.9/doc/gsl-randist.138
-rw-r--r--gsl-1.9/doc/gsl-ref.info596
-rw-r--r--gsl-1.9/doc/gsl-ref.info-17392
-rw-r--r--gsl-1.9/doc/gsl-ref.info-27071
-rw-r--r--gsl-1.9/doc/gsl-ref.info-37520
-rw-r--r--gsl-1.9/doc/gsl-ref.info-44426
-rw-r--r--gsl-1.9/doc/gsl-ref.info-5bin0 -> 239614 bytes
-rw-r--r--gsl-1.9/doc/gsl-ref.info-6bin0 -> 98831 bytes
-rw-r--r--gsl-1.9/doc/gsl-ref.texi647
-rw-r--r--gsl-1.9/doc/gsl.358
-rw-r--r--gsl-1.9/doc/histogram.eps3088
-rw-r--r--gsl-1.9/doc/histogram.texi1173
-rw-r--r--gsl-1.9/doc/histogram2d.eps776
-rw-r--r--gsl-1.9/doc/ieee754.texi461
-rw-r--r--gsl-1.9/doc/initial-route.eps11867
-rw-r--r--gsl-1.9/doc/integration.texi854
-rw-r--r--gsl-1.9/doc/interp.texi318
-rw-r--r--gsl-1.9/doc/interp2.eps3252
-rw-r--r--gsl-1.9/doc/interpp2.eps2004
-rw-r--r--gsl-1.9/doc/intro.texi247
-rw-r--r--gsl-1.9/doc/landau.dat201
-rw-r--r--gsl-1.9/doc/linalg.texi1117
-rw-r--r--gsl-1.9/doc/math.texi339
-rwxr-xr-xgsl-1.9/doc/mdate-sh193
-rw-r--r--gsl-1.9/doc/min-interval.eps330
-rw-r--r--gsl-1.9/doc/min.texi400
-rw-r--r--gsl-1.9/doc/montecarlo.texi718
-rw-r--r--gsl-1.9/doc/multifit.texi645
-rw-r--r--gsl-1.9/doc/multimin.eps778
-rw-r--r--gsl-1.9/doc/multimin.texi752
-rw-r--r--gsl-1.9/doc/multiroots.texi1083
-rw-r--r--gsl-1.9/doc/ntuple.eps555
-rw-r--r--gsl-1.9/doc/ntuple.texi194
-rw-r--r--gsl-1.9/doc/ode-initval.texi556
-rw-r--r--gsl-1.9/doc/permutation.texi377
-rw-r--r--gsl-1.9/doc/poly.texi302
-rw-r--r--gsl-1.9/doc/qrng.eps1420
-rw-r--r--gsl-1.9/doc/qrng.texi163
-rw-r--r--gsl-1.9/doc/rand-bernoulli.tex695
-rw-r--r--gsl-1.9/doc/rand-beta.tex1335
-rw-r--r--gsl-1.9/doc/rand-binomial.tex774
-rw-r--r--gsl-1.9/doc/rand-bivariate-gaussian.tex1264
-rw-r--r--gsl-1.9/doc/rand-cauchy.tex1054
-rw-r--r--gsl-1.9/doc/rand-chisq.tex1307
-rw-r--r--gsl-1.9/doc/rand-erlang.tex1330
-rw-r--r--gsl-1.9/doc/rand-exponential.tex1009
-rw-r--r--gsl-1.9/doc/rand-exppow.tex1054
-rw-r--r--gsl-1.9/doc/rand-fdist.tex992
-rw-r--r--gsl-1.9/doc/rand-flat.tex1023
-rw-r--r--gsl-1.9/doc/rand-gamma.tex1330
-rw-r--r--gsl-1.9/doc/rand-gaussian-tail.tex718
-rw-r--r--gsl-1.9/doc/rand-gaussian.tex1059
-rw-r--r--gsl-1.9/doc/rand-geometric.tex753
-rw-r--r--gsl-1.9/doc/rand-gumbel.tex966
-rw-r--r--gsl-1.9/doc/rand-gumbel1.tex733
-rw-r--r--gsl-1.9/doc/rand-gumbel2.tex728
-rw-r--r--gsl-1.9/doc/rand-hypergeometric.tex592
-rw-r--r--gsl-1.9/doc/rand-landau.tex602
-rw-r--r--gsl-1.9/doc/rand-laplace.tex1059
-rw-r--r--gsl-1.9/doc/rand-levy.tex1054
-rw-r--r--gsl-1.9/doc/rand-levyskew.tex728
-rw-r--r--gsl-1.9/doc/rand-logarithmic.tex794
-rw-r--r--gsl-1.9/doc/rand-logistic.tex1049
-rw-r--r--gsl-1.9/doc/rand-lognormal.tex1002
-rw-r--r--gsl-1.9/doc/rand-nbinomial.tex774
-rw-r--r--gsl-1.9/doc/rand-pareto.tex1029
-rw-r--r--gsl-1.9/doc/rand-pascal.tex772
-rw-r--r--gsl-1.9/doc/rand-poisson.tex774
-rw-r--r--gsl-1.9/doc/rand-rayleigh-tail.tex1019
-rw-r--r--gsl-1.9/doc/rand-rayleigh.tex1044
-rw-r--r--gsl-1.9/doc/rand-tdist.tex1049
-rw-r--r--gsl-1.9/doc/rand-weibull.tex1330
-rw-r--r--gsl-1.9/doc/randist.texi2296
-rw-r--r--gsl-1.9/doc/random-walk.tex571
-rw-r--r--gsl-1.9/doc/randplots.gnp374
-rw-r--r--gsl-1.9/doc/rng.texi1456
-rw-r--r--gsl-1.9/doc/roots-bisection.eps1784
-rw-r--r--gsl-1.9/doc/roots-false-position.eps633
-rw-r--r--gsl-1.9/doc/roots-newtons-method.eps567
-rw-r--r--gsl-1.9/doc/roots-secant-method.eps510
-rw-r--r--gsl-1.9/doc/roots.texi928
-rw-r--r--gsl-1.9/doc/siman-energy.eps11782
-rw-r--r--gsl-1.9/doc/siman-test.eps11278
-rw-r--r--gsl-1.9/doc/siman.texi371
-rw-r--r--gsl-1.9/doc/sort.texi315
-rw-r--r--gsl-1.9/doc/specfunc-airy.texi130
-rw-r--r--gsl-1.9/doc/specfunc-bessel.texi585
-rw-r--r--gsl-1.9/doc/specfunc-clausen.texi28
-rw-r--r--gsl-1.9/doc/specfunc-coulomb.texi151
-rw-r--r--gsl-1.9/doc/specfunc-coupling.texi109
-rw-r--r--gsl-1.9/doc/specfunc-dawson.texi12
-rw-r--r--gsl-1.9/doc/specfunc-debye.texi63
-rw-r--r--gsl-1.9/doc/specfunc-dilog.texi33
-rw-r--r--gsl-1.9/doc/specfunc-elementary.texi23
-rw-r--r--gsl-1.9/doc/specfunc-ellint.texi198
-rw-r--r--gsl-1.9/doc/specfunc-elljac.texi13
-rw-r--r--gsl-1.9/doc/specfunc-erf.texi99
-rw-r--r--gsl-1.9/doc/specfunc-exp.texi135
-rw-r--r--gsl-1.9/doc/specfunc-expint.texi155
-rw-r--r--gsl-1.9/doc/specfunc-fermi-dirac.texi122
-rw-r--r--gsl-1.9/doc/specfunc-gamma.texi314
-rw-r--r--gsl-1.9/doc/specfunc-gegenbauer.texi42
-rw-r--r--gsl-1.9/doc/specfunc-hyperg.texi108
-rw-r--r--gsl-1.9/doc/specfunc-laguerre.texi40
-rw-r--r--gsl-1.9/doc/specfunc-lambert.texi28
-rw-r--r--gsl-1.9/doc/specfunc-legendre.texi272
-rw-r--r--gsl-1.9/doc/specfunc-log.texi47
-rw-r--r--gsl-1.9/doc/specfunc-mathieu.texi257
-rw-r--r--gsl-1.9/doc/specfunc-pow-int.texi22
-rw-r--r--gsl-1.9/doc/specfunc-psi.texi90
-rw-r--r--gsl-1.9/doc/specfunc-synchrotron.texi24
-rw-r--r--gsl-1.9/doc/specfunc-transport.texi34
-rw-r--r--gsl-1.9/doc/specfunc-trig.texi160
-rw-r--r--gsl-1.9/doc/specfunc-zeta.texi98
-rw-r--r--gsl-1.9/doc/specfunc.texi352
-rw-r--r--gsl-1.9/doc/stamp-vti4
-rw-r--r--gsl-1.9/doc/statistics.texi741
-rw-r--r--gsl-1.9/doc/sum.texi186
-rw-r--r--gsl-1.9/doc/texinfo.tex7086
-rw-r--r--gsl-1.9/doc/usage.texi489
-rw-r--r--gsl-1.9/doc/vdp.eps1082
-rw-r--r--gsl-1.9/doc/vectors.texi1616
-rw-r--r--gsl-1.9/doc/version-ref.texi4
252 files changed, 217816 insertions, 0 deletions
diff --git a/gsl-1.9/doc/12-cities.eps b/gsl-1.9/doc/12-cities.eps
new file mode 100644
index 0000000..f2b8726
--- /dev/null
+++ b/gsl-1.9/doc/12-cities.eps
@@ -0,0 +1,15622 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Thu Jan 4 06:48:42 2007
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 56 177 500 610
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources:
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+/DrawDict 50 dict def
+DrawDict begin
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources:
+%%PageBoundingBox: 56 177 500 610
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2564 10017
+2564 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2578 10017
+2578 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2476 10017
+2461 9930
+2461 10017
+2681 10017
+2681 9930
+2666 10017
+6 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2520 9710
+2622 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2945 9973
+2960 10017
+2960 9930
+2945 9973
+2916 10003
+2872 10017
+2828 10017
+2784 10003
+2754 9973
+2754 9944
+2769 9915
+2784 9900
+2813 9886
+2901 9856
+2930 9842
+2960 9812
+16 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2754 9944
+2784 9915
+2813 9900
+2901 9871
+2930 9856
+2945 9842
+2960 9812
+2960 9754
+2930 9724
+2886 9710
+2842 9710
+2798 9724
+2769 9754
+2754 9798
+2754 9710
+2769 9754
+16 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3077 10017
+3077 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3092 10017
+3092 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3033 10017
+3209 10017
+3253 10003
+3267 9988
+3282 9959
+3282 9915
+3267 9886
+3253 9871
+3209 9856
+3092 9856
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3209 10017
+3238 10003
+3253 9988
+3267 9959
+3267 9915
+3253 9886
+3238 9871
+3209 9856
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3033 9710
+3136 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3619 9842
+3883 9842
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4264 9959
+4294 9973
+4338 10017
+4338 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4323 10003
+4323 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4264 9710
+4396 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+4528 9959
+4543 9944
+4528 9930
+4514 9944
+4514 9959
+4528 9988
+4543 10003
+4587 10017
+4646 10017
+4690 10003
+4704 9988
+4719 9959
+4719 9930
+4704 9900
+4660 9871
+4587 9842
+4558 9827
+4528 9798
+4514 9754
+4514 9710
+20 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4646 10017
+4675 10003
+4690 9988
+4704 9959
+4704 9930
+4690 9900
+4646 9871
+4587 9842
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+4514 9739
+4528 9754
+4558 9754
+4631 9724
+4675 9724
+4704 9739
+4719 9754
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+4558 9754
+4631 9710
+4690 9710
+4704 9724
+4719 9754
+4719 9783
+6 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+5188 9886
+5203 9915
+5203 9856
+5188 9886
+5174 9900
+5144 9915
+5086 9915
+5056 9900
+5042 9886
+5042 9856
+5056 9842
+5086 9827
+5159 9798
+5188 9783
+5203 9768
+15 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+5042 9871
+5056 9856
+5086 9842
+5159 9812
+5188 9798
+5203 9783
+5203 9739
+5188 9724
+5159 9710
+5100 9710
+5071 9724
+5056 9739
+5042 9768
+5042 9710
+5056 9739
+15 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5408 9915
+5452 9900
+5481 9871
+5496 9827
+5496 9798
+5481 9754
+5452 9724
+5408 9710
+5379 9710
+5335 9724
+5305 9754
+5291 9798
+5291 9827
+5305 9871
+5335 9900
+5379 9915
+16 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5379 9915
+5349 9900
+5320 9871
+5305 9827
+5305 9798
+5320 9754
+5349 9724
+5379 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5408 9710
+5437 9724
+5467 9754
+5481 9798
+5481 9827
+5467 9871
+5437 9900
+5408 9915
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5613 9915
+5613 9754
+5628 9724
+5672 9710
+5701 9710
+5745 9724
+5775 9754
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5628 9915
+5628 9754
+5643 9724
+5672 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5775 9915
+5775 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5789 9915
+5789 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5569 9915
+5628 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5731 9915
+5789 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5775 9710
+5833 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5936 10017
+5936 9768
+5951 9724
+5980 9710
+6009 9710
+6039 9724
+6053 9754
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5951 10017
+5951 9768
+5965 9724
+5980 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5892 9915
+6009 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6156 10017
+6156 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6171 10017
+6171 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6171 9871
+6200 9900
+6244 9915
+6273 9915
+6317 9900
+6332 9871
+6332 9710
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6273 9915
+6302 9900
+6317 9871
+6317 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6112 10017
+6171 10017
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6112 9710
+6215 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6273 9710
+6376 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6464 9915
+6522 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6478 9915
+6522 9754
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6581 9915
+6522 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6581 9915
+6640 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6596 9915
+6640 9754
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6698 9915
+6640 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6420 9915
+6522 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6654 9915
+6742 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+6816 9827
+6992 9827
+6992 9856
+6977 9886
+6962 9900
+6933 9915
+6889 9915
+6845 9900
+6816 9871
+6801 9827
+6801 9798
+6816 9754
+6845 9724
+6889 9710
+6918 9710
+6962 9724
+6992 9754
+17 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6977 9827
+6977 9871
+6962 9900
+3 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6889 9915
+6860 9900
+6830 9871
+6816 9827
+6816 9798
+6830 9754
+6860 9724
+6889 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+7226 9886
+7241 9915
+7241 9856
+7226 9886
+7212 9900
+7182 9915
+7124 9915
+7094 9900
+7080 9886
+7080 9856
+7094 9842
+7124 9827
+7197 9798
+7226 9783
+7241 9768
+15 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+7080 9871
+7094 9856
+7124 9842
+7197 9812
+7226 9798
+7241 9783
+7241 9739
+7226 9724
+7197 9710
+7138 9710
+7109 9724
+7094 9739
+7080 9768
+7080 9710
+7094 9739
+15 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7358 10017
+7358 9768
+7373 9724
+7402 9710
+7431 9710
+7461 9724
+7475 9754
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+7373 10017
+7373 9768
+7387 9724
+7402 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7314 9915
+7431 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 18
+7959 9871
+7945 9856
+7959 9842
+7974 9856
+7974 9871
+7945 9900
+7915 9915
+7871 9915
+7827 9900
+7798 9871
+7783 9827
+7783 9798
+7798 9754
+7827 9724
+7871 9710
+7901 9710
+7945 9724
+7974 9754
+18 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7871 9915
+7842 9900
+7813 9871
+7798 9827
+7798 9798
+7813 9754
+7842 9724
+7871 9710
+8 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+8106 10003
+8091 9988
+8077 10003
+8091 10017
+4 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8091 9915
+8091 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8106 9915
+8106 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8047 9915
+8106 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8047 9710
+8150 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+8253 10017
+8253 9768
+8267 9724
+8296 9710
+8326 9710
+8355 9724
+8370 9754
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+8267 10017
+8267 9768
+8282 9724
+8296 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8209 9915
+8326 9915
+2 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+8487 10003
+8472 9988
+8458 10003
+8472 10017
+4 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8472 9915
+8472 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8487 9915
+8487 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8428 9915
+8487 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8428 9710
+8531 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+8619 9827
+8795 9827
+8795 9856
+8780 9886
+8766 9900
+8736 9915
+8692 9915
+8648 9900
+8619 9871
+8604 9827
+8604 9798
+8619 9754
+8648 9724
+8692 9710
+8722 9710
+8766 9724
+8795 9754
+17 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+8780 9827
+8780 9871
+8766 9900
+3 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8692 9915
+8663 9900
+8634 9871
+8619 9827
+8619 9798
+8634 9754
+8663 9724
+8692 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+9030 9886
+9044 9915
+9044 9856
+9030 9886
+9015 9900
+8986 9915
+8927 9915
+8898 9900
+8883 9886
+8883 9856
+8898 9842
+8927 9827
+9000 9798
+9030 9783
+9044 9768
+15 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+8883 9871
+8898 9856
+8927 9842
+9000 9812
+9030 9798
+9044 9783
+9044 9739
+9030 9724
+9000 9710
+8942 9710
+8912 9724
+8898 9739
+8883 9768
+8883 9710
+8898 9739
+15 MLine
+End
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2315 2151
+2348 2140
+2370 2107
+2381 2052
+2381 2019
+2370 1964
+2348 1931
+2315 1920
+2293 1920
+2260 1931
+2238 1964
+2227 2019
+2227 2052
+2238 2107
+2260 2140
+2293 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2293 2151
+2271 2140
+2260 2129
+2249 2107
+2238 2052
+2238 2019
+2249 1964
+2260 1942
+2271 1931
+2293 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2315 1920
+2337 1931
+2348 1942
+2359 1964
+2370 2019
+2370 2052
+2359 2107
+2348 2129
+2337 2140
+2315 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3313 2107
+3335 2118
+3368 2151
+3368 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3357 2140
+3357 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3313 1920
+3411 1920
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3587 2151
+3620 2140
+3642 2107
+3653 2052
+3653 2019
+3642 1964
+3620 1931
+3587 1920
+3565 1920
+3532 1931
+3510 1964
+3499 2019
+3499 2052
+3510 2107
+3532 2140
+3565 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3565 2151
+3543 2140
+3532 2129
+3521 2107
+3510 2052
+3510 2019
+3521 1964
+3532 1942
+3543 1931
+3565 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3587 1920
+3609 1931
+3620 1942
+3631 1964
+3642 2019
+3642 2052
+3631 2107
+3620 2129
+3609 2140
+3587 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3807 2151
+3840 2140
+3862 2107
+3873 2052
+3873 2019
+3862 1964
+3840 1931
+3807 1920
+3785 1920
+3752 1931
+3730 1964
+3719 2019
+3719 2052
+3730 2107
+3752 2140
+3785 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3785 2151
+3763 2140
+3752 2129
+3741 2107
+3730 2052
+3730 2019
+3741 1964
+3752 1942
+3763 1931
+3785 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3807 1920
+3829 1931
+3840 1942
+3851 1964
+3862 2019
+3862 2052
+3851 2107
+3840 2129
+3829 2140
+3807 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4027 2151
+4060 2140
+4082 2107
+4093 2052
+4093 2019
+4082 1964
+4060 1931
+4027 1920
+4005 1920
+3972 1931
+3950 1964
+3939 2019
+3939 2052
+3950 2107
+3972 2140
+4005 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4005 2151
+3983 2140
+3972 2129
+3961 2107
+3950 2052
+3950 2019
+3961 1964
+3972 1942
+3983 1931
+4005 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4027 1920
+4049 1931
+4060 1942
+4071 1964
+4082 2019
+4082 2052
+4071 2107
+4060 2129
+4049 2140
+4027 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+4673 2107
+4684 2096
+4673 2085
+4662 2096
+4662 2107
+4673 2129
+4684 2140
+4717 2151
+4761 2151
+4794 2140
+4805 2129
+4816 2107
+4816 2085
+4805 2063
+4772 2041
+4717 2019
+4695 2008
+4673 1986
+4662 1953
+4662 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4761 2151
+4783 2140
+4794 2129
+4805 2107
+4805 2085
+4794 2063
+4761 2041
+4717 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+4662 1942
+4673 1953
+4695 1953
+4750 1931
+4783 1931
+4805 1942
+4816 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+4695 1953
+4750 1920
+4794 1920
+4805 1931
+4816 1953
+4816 1975
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4970 2151
+5003 2140
+5025 2107
+5036 2052
+5036 2019
+5025 1964
+5003 1931
+4970 1920
+4948 1920
+4915 1931
+4893 1964
+4882 2019
+4882 2052
+4893 2107
+4915 2140
+4948 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4948 2151
+4926 2140
+4915 2129
+4904 2107
+4893 2052
+4893 2019
+4904 1964
+4915 1942
+4926 1931
+4948 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4970 1920
+4992 1931
+5003 1942
+5014 1964
+5025 2019
+5025 2052
+5014 2107
+5003 2129
+4992 2140
+4970 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5190 2151
+5223 2140
+5245 2107
+5256 2052
+5256 2019
+5245 1964
+5223 1931
+5190 1920
+5168 1920
+5135 1931
+5113 1964
+5102 2019
+5102 2052
+5113 2107
+5135 2140
+5168 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5168 2151
+5146 2140
+5135 2129
+5124 2107
+5113 2052
+5113 2019
+5124 1964
+5135 1942
+5146 1931
+5168 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5190 1920
+5212 1931
+5223 1942
+5234 1964
+5245 2019
+5245 2052
+5234 2107
+5223 2129
+5212 2140
+5190 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5410 2151
+5443 2140
+5465 2107
+5476 2052
+5476 2019
+5465 1964
+5443 1931
+5410 1920
+5388 1920
+5355 1931
+5333 1964
+5322 2019
+5322 2052
+5333 2107
+5355 2140
+5388 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5388 2151
+5366 2140
+5355 2129
+5344 2107
+5333 2052
+5333 2019
+5344 1964
+5355 1942
+5366 1931
+5388 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5410 1920
+5432 1931
+5443 1942
+5454 1964
+5465 2019
+5465 2052
+5454 2107
+5443 2129
+5432 2140
+5410 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6055 2107
+6066 2096
+6055 2085
+6044 2096
+6044 2107
+6055 2129
+6066 2140
+6099 2151
+6143 2151
+6176 2140
+6187 2118
+6187 2085
+6176 2063
+6143 2052
+6110 2052
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6143 2151
+6165 2140
+6176 2118
+6176 2085
+6165 2063
+6143 2052
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6143 2052
+6165 2041
+6187 2019
+6198 1997
+6198 1964
+6187 1942
+6176 1931
+6143 1920
+6099 1920
+6066 1931
+6055 1942
+6044 1964
+6044 1975
+6055 1986
+6066 1975
+6055 1964
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6176 2030
+6187 1997
+6187 1964
+6176 1942
+6165 1931
+6143 1920
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6352 2151
+6385 2140
+6407 2107
+6418 2052
+6418 2019
+6407 1964
+6385 1931
+6352 1920
+6330 1920
+6297 1931
+6275 1964
+6264 2019
+6264 2052
+6275 2107
+6297 2140
+6330 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6330 2151
+6308 2140
+6297 2129
+6286 2107
+6275 2052
+6275 2019
+6286 1964
+6297 1942
+6308 1931
+6330 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6352 1920
+6374 1931
+6385 1942
+6396 1964
+6407 2019
+6407 2052
+6396 2107
+6385 2129
+6374 2140
+6352 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6572 2151
+6605 2140
+6627 2107
+6638 2052
+6638 2019
+6627 1964
+6605 1931
+6572 1920
+6550 1920
+6517 1931
+6495 1964
+6484 2019
+6484 2052
+6495 2107
+6517 2140
+6550 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6550 2151
+6528 2140
+6517 2129
+6506 2107
+6495 2052
+6495 2019
+6506 1964
+6517 1942
+6528 1931
+6550 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6572 1920
+6594 1931
+6605 1942
+6616 1964
+6627 2019
+6627 2052
+6616 2107
+6605 2129
+6594 2140
+6572 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6792 2151
+6825 2140
+6847 2107
+6858 2052
+6858 2019
+6847 1964
+6825 1931
+6792 1920
+6770 1920
+6737 1931
+6715 1964
+6704 2019
+6704 2052
+6715 2107
+6737 2140
+6770 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6770 2151
+6748 2140
+6737 2129
+6726 2107
+6715 2052
+6715 2019
+6726 1964
+6737 1942
+6748 1931
+6770 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6792 1920
+6814 1931
+6825 1942
+6836 1964
+6847 2019
+6847 2052
+6836 2107
+6825 2129
+6814 2140
+6792 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7526 2129
+7526 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7537 2151
+7537 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+7537 2151
+7416 1986
+7592 1986
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7493 1920
+7570 1920
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7735 2151
+7768 2140
+7790 2107
+7801 2052
+7801 2019
+7790 1964
+7768 1931
+7735 1920
+7713 1920
+7680 1931
+7658 1964
+7647 2019
+7647 2052
+7658 2107
+7680 2140
+7713 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7713 2151
+7691 2140
+7680 2129
+7669 2107
+7658 2052
+7658 2019
+7669 1964
+7680 1942
+7691 1931
+7713 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7735 1920
+7757 1931
+7768 1942
+7779 1964
+7790 2019
+7790 2052
+7779 2107
+7768 2129
+7757 2140
+7735 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7955 2151
+7988 2140
+8010 2107
+8021 2052
+8021 2019
+8010 1964
+7988 1931
+7955 1920
+7933 1920
+7900 1931
+7878 1964
+7867 2019
+7867 2052
+7878 2107
+7900 2140
+7933 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7933 2151
+7911 2140
+7900 2129
+7889 2107
+7878 2052
+7878 2019
+7889 1964
+7900 1942
+7911 1931
+7933 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7955 1920
+7977 1931
+7988 1942
+7999 1964
+8010 2019
+8010 2052
+7999 2107
+7988 2129
+7977 2140
+7955 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8174 2151
+8207 2140
+8229 2107
+8240 2052
+8240 2019
+8229 1964
+8207 1931
+8174 1920
+8152 1920
+8120 1931
+8098 1964
+8087 2019
+8087 2052
+8098 2107
+8120 2140
+8152 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8152 2151
+8131 2140
+8120 2129
+8109 2107
+8098 2052
+8098 2019
+8109 1964
+8120 1942
+8131 1931
+8152 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8174 1920
+8196 1931
+8207 1942
+8218 1964
+8229 2019
+8229 2052
+8218 2107
+8207 2129
+8196 2140
+8174 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8831 2151
+8809 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+8809 2041
+8831 2063
+8864 2074
+8897 2074
+8930 2063
+8952 2041
+8963 2008
+8963 1986
+8952 1953
+8930 1931
+8897 1920
+8864 1920
+8831 1931
+8820 1942
+8809 1964
+8809 1975
+8820 1986
+8831 1975
+8820 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8897 2074
+8919 2063
+8941 2041
+8952 2008
+8952 1986
+8941 1953
+8919 1931
+8897 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8831 2151
+8941 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+8831 2140
+8886 2140
+8941 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9117 2151
+9150 2140
+9172 2107
+9183 2052
+9183 2019
+9172 1964
+9150 1931
+9117 1920
+9095 1920
+9062 1931
+9040 1964
+9029 2019
+9029 2052
+9040 2107
+9062 2140
+9095 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9095 2151
+9073 2140
+9062 2129
+9051 2107
+9040 2052
+9040 2019
+9051 1964
+9062 1942
+9073 1931
+9095 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9117 1920
+9139 1931
+9150 1942
+9161 1964
+9172 2019
+9172 2052
+9161 2107
+9150 2129
+9139 2140
+9117 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9337 2151
+9370 2140
+9392 2107
+9403 2052
+9403 2019
+9392 1964
+9370 1931
+9337 1920
+9315 1920
+9282 1931
+9260 1964
+9249 2019
+9249 2052
+9260 2107
+9282 2140
+9315 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9315 2151
+9293 2140
+9282 2129
+9271 2107
+9260 2052
+9260 2019
+9271 1964
+9282 1942
+9293 1931
+9315 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9337 1920
+9359 1931
+9370 1942
+9381 1964
+9392 2019
+9392 2052
+9381 2107
+9370 2129
+9359 2140
+9337 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9557 2151
+9590 2140
+9612 2107
+9623 2052
+9623 2019
+9612 1964
+9590 1931
+9557 1920
+9535 1920
+9502 1931
+9480 1964
+9469 2019
+9469 2052
+9480 2107
+9502 2140
+9535 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9535 2151
+9513 2140
+9502 2129
+9491 2107
+9480 2052
+9480 2019
+9491 1964
+9502 1942
+9513 1931
+9535 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9557 1920
+9579 1931
+9590 1942
+9601 1964
+9612 2019
+9612 2052
+9601 2107
+9590 2129
+9579 2140
+9557 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2580 9216
+2580 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2580 2304
+2580 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2857 9216
+2857 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2857 2304
+2857 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3133 9216
+3133 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3133 2304
+3133 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3410 9216
+3410 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3410 2304
+3410 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3963 9216
+3963 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3963 2304
+3963 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4239 9216
+4239 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4239 2304
+4239 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4516 9216
+4516 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4516 2304
+4516 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4792 9216
+4792 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4792 2304
+4792 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5345 9216
+5345 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5345 2304
+5345 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5622 9216
+5622 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5622 2304
+5622 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5898 9216
+5898 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5898 2304
+5898 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6175 9216
+6175 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6175 2304
+6175 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6728 9216
+6728 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6728 2304
+6728 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7004 9216
+7004 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7004 2304
+7004 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7281 9216
+7281 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7281 2304
+7281 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7557 9216
+7557 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7557 2304
+7557 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8110 9216
+8110 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8110 2304
+8110 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8387 9216
+8387 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8387 2304
+8387 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8663 9216
+8663 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8663 2304
+8663 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8940 9216
+8940 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8940 2304
+8940 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1365 2824
+1376 2813
+1365 2802
+1354 2813
+1354 2824
+1365 2846
+1376 2857
+1409 2868
+1453 2868
+1486 2857
+1497 2835
+1497 2802
+1486 2780
+1453 2769
+1420 2769
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1453 2868
+1475 2857
+1486 2835
+1486 2802
+1475 2780
+1453 2769
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1453 2769
+1475 2758
+1497 2736
+1508 2714
+1508 2681
+1497 2659
+1486 2648
+1453 2637
+1409 2637
+1376 2648
+1365 2659
+1354 2681
+1354 2692
+1365 2703
+1376 2692
+1365 2681
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1486 2747
+1497 2714
+1497 2681
+1486 2659
+1475 2648
+1453 2637
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 2868
+1574 2758
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+1574 2758
+1596 2780
+1629 2791
+1661 2791
+1694 2780
+1716 2758
+1727 2725
+1727 2703
+1716 2670
+1694 2648
+1661 2637
+1629 2637
+1596 2648
+1585 2659
+1574 2681
+1574 2692
+1585 2703
+1596 2692
+1585 2681
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1661 2791
+1683 2780
+1705 2758
+1716 2725
+1716 2703
+1705 2670
+1683 2648
+1661 2637
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 2868
+1705 2868
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1596 2857
+1651 2857
+1705 2868
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 2868
+1914 2857
+1936 2824
+1947 2769
+1947 2736
+1936 2681
+1914 2648
+1881 2637
+1859 2637
+1826 2648
+1804 2681
+1793 2736
+1793 2769
+1804 2824
+1826 2857
+1859 2868
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 2868
+1837 2857
+1826 2846
+1815 2824
+1804 2769
+1804 2736
+1815 2681
+1826 2659
+1837 2648
+1859 2637
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 2637
+1903 2648
+1914 2659
+1925 2681
+1936 2736
+1936 2769
+1925 2824
+1914 2846
+1903 2857
+1881 2868
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 2868
+2134 2857
+2156 2824
+2167 2769
+2167 2736
+2156 2681
+2134 2648
+2101 2637
+2079 2637
+2046 2648
+2024 2681
+2013 2736
+2013 2769
+2024 2824
+2046 2857
+2079 2868
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 2868
+2057 2857
+2046 2846
+2035 2824
+2024 2769
+2024 2736
+2035 2681
+2046 2659
+2057 2648
+2079 2637
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 2637
+2123 2648
+2134 2659
+2145 2681
+2156 2736
+2156 2769
+2145 2824
+2134 2846
+2123 2857
+2101 2868
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2736
+9078 2736
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2736
+2442 2736
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1453 3926
+1453 3717
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1464 3948
+1464 3717
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1464 3948
+1343 3783
+1519 3783
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1420 3717
+1497 3717
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1661 3948
+1694 3937
+1716 3904
+1727 3849
+1727 3816
+1716 3761
+1694 3728
+1661 3717
+1640 3717
+1607 3728
+1585 3761
+1574 3816
+1574 3849
+1585 3904
+1607 3937
+1640 3948
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1640 3948
+1618 3937
+1607 3926
+1596 3904
+1585 3849
+1585 3816
+1596 3761
+1607 3739
+1618 3728
+1640 3717
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1661 3717
+1683 3728
+1694 3739
+1705 3761
+1716 3816
+1716 3849
+1705 3904
+1694 3926
+1683 3937
+1661 3948
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 3948
+1914 3937
+1936 3904
+1947 3849
+1947 3816
+1936 3761
+1914 3728
+1881 3717
+1859 3717
+1826 3728
+1804 3761
+1793 3816
+1793 3849
+1804 3904
+1826 3937
+1859 3948
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 3948
+1837 3937
+1826 3926
+1815 3904
+1804 3849
+1804 3816
+1815 3761
+1826 3739
+1837 3728
+1859 3717
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 3717
+1903 3728
+1914 3739
+1925 3761
+1936 3816
+1936 3849
+1925 3904
+1914 3926
+1903 3937
+1881 3948
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 3948
+2134 3937
+2156 3904
+2167 3849
+2167 3816
+2156 3761
+2134 3728
+2101 3717
+2079 3717
+2046 3728
+2024 3761
+2013 3816
+2013 3849
+2024 3904
+2046 3937
+2079 3948
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 3948
+2057 3937
+2046 3926
+2035 3904
+2024 3849
+2024 3816
+2035 3761
+2046 3739
+2057 3728
+2079 3717
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 3717
+2123 3728
+2134 3739
+2145 3761
+2156 3816
+2156 3849
+2145 3904
+2134 3926
+2123 3937
+2101 3948
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3816
+9078 3816
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3816
+2442 3816
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1453 5006
+1453 4797
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1464 5028
+1464 4797
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1464 5028
+1343 4863
+1519 4863
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1420 4797
+1497 4797
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 5028
+1574 4918
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+1574 4918
+1596 4940
+1629 4951
+1661 4951
+1694 4940
+1716 4918
+1727 4885
+1727 4863
+1716 4830
+1694 4808
+1661 4797
+1629 4797
+1596 4808
+1585 4819
+1574 4841
+1574 4852
+1585 4863
+1596 4852
+1585 4841
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1661 4951
+1683 4940
+1705 4918
+1716 4885
+1716 4863
+1705 4830
+1683 4808
+1661 4797
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 5028
+1705 5028
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1596 5017
+1651 5017
+1705 5028
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 5028
+1914 5017
+1936 4984
+1947 4929
+1947 4896
+1936 4841
+1914 4808
+1881 4797
+1859 4797
+1826 4808
+1804 4841
+1793 4896
+1793 4929
+1804 4984
+1826 5017
+1859 5028
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 5028
+1837 5017
+1826 5006
+1815 4984
+1804 4929
+1804 4896
+1815 4841
+1826 4819
+1837 4808
+1859 4797
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 4797
+1903 4808
+1914 4819
+1925 4841
+1936 4896
+1936 4929
+1925 4984
+1914 5006
+1903 5017
+1881 5028
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 5028
+2134 5017
+2156 4984
+2167 4929
+2167 4896
+2156 4841
+2134 4808
+2101 4797
+2079 4797
+2046 4808
+2024 4841
+2013 4896
+2013 4929
+2024 4984
+2046 5017
+2079 5028
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 5028
+2057 5017
+2046 5006
+2035 4984
+2024 4929
+2024 4896
+2035 4841
+2046 4819
+2057 4808
+2079 4797
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 4797
+2123 4808
+2134 4819
+2145 4841
+2156 4896
+2156 4929
+2145 4984
+2134 5006
+2123 5017
+2101 5028
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4896
+9078 4896
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4896
+2442 4896
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1376 6108
+1354 5998
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+1354 5998
+1376 6020
+1409 6031
+1442 6031
+1475 6020
+1497 5998
+1508 5965
+1508 5943
+1497 5910
+1475 5888
+1442 5877
+1409 5877
+1376 5888
+1365 5899
+1354 5921
+1354 5932
+1365 5943
+1376 5932
+1365 5921
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1442 6031
+1464 6020
+1486 5998
+1497 5965
+1497 5943
+1486 5910
+1464 5888
+1442 5877
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1376 6108
+1486 6108
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1376 6097
+1431 6097
+1486 6108
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1661 6108
+1694 6097
+1716 6064
+1727 6009
+1727 5976
+1716 5921
+1694 5888
+1661 5877
+1640 5877
+1607 5888
+1585 5921
+1574 5976
+1574 6009
+1585 6064
+1607 6097
+1640 6108
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1640 6108
+1618 6097
+1607 6086
+1596 6064
+1585 6009
+1585 5976
+1596 5921
+1607 5899
+1618 5888
+1640 5877
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1661 5877
+1683 5888
+1694 5899
+1705 5921
+1716 5976
+1716 6009
+1705 6064
+1694 6086
+1683 6097
+1661 6108
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 6108
+1914 6097
+1936 6064
+1947 6009
+1947 5976
+1936 5921
+1914 5888
+1881 5877
+1859 5877
+1826 5888
+1804 5921
+1793 5976
+1793 6009
+1804 6064
+1826 6097
+1859 6108
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 6108
+1837 6097
+1826 6086
+1815 6064
+1804 6009
+1804 5976
+1815 5921
+1826 5899
+1837 5888
+1859 5877
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 5877
+1903 5888
+1914 5899
+1925 5921
+1936 5976
+1936 6009
+1925 6064
+1914 6086
+1903 6097
+1881 6108
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 6108
+2134 6097
+2156 6064
+2167 6009
+2167 5976
+2156 5921
+2134 5888
+2101 5877
+2079 5877
+2046 5888
+2024 5921
+2013 5976
+2013 6009
+2024 6064
+2046 6097
+2079 6108
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 6108
+2057 6097
+2046 6086
+2035 6064
+2024 6009
+2024 5976
+2035 5921
+2046 5899
+2057 5888
+2079 5877
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 5877
+2123 5888
+2134 5899
+2145 5921
+2156 5976
+2156 6009
+2145 6064
+2134 6086
+2123 6097
+2101 6108
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5976
+9078 5976
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5976
+2442 5976
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1376 7188
+1354 7078
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+1354 7078
+1376 7100
+1409 7111
+1442 7111
+1475 7100
+1497 7078
+1508 7045
+1508 7023
+1497 6990
+1475 6968
+1442 6957
+1409 6957
+1376 6968
+1365 6979
+1354 7001
+1354 7012
+1365 7023
+1376 7012
+1365 7001
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1442 7111
+1464 7100
+1486 7078
+1497 7045
+1497 7023
+1486 6990
+1464 6968
+1442 6957
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1376 7188
+1486 7188
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1376 7177
+1431 7177
+1486 7188
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 7188
+1574 7078
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+1574 7078
+1596 7100
+1629 7111
+1661 7111
+1694 7100
+1716 7078
+1727 7045
+1727 7023
+1716 6990
+1694 6968
+1661 6957
+1629 6957
+1596 6968
+1585 6979
+1574 7001
+1574 7012
+1585 7023
+1596 7012
+1585 7001
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1661 7111
+1683 7100
+1705 7078
+1716 7045
+1716 7023
+1705 6990
+1683 6968
+1661 6957
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 7188
+1705 7188
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1596 7177
+1651 7177
+1705 7188
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 7188
+1914 7177
+1936 7144
+1947 7089
+1947 7056
+1936 7001
+1914 6968
+1881 6957
+1859 6957
+1826 6968
+1804 7001
+1793 7056
+1793 7089
+1804 7144
+1826 7177
+1859 7188
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 7188
+1837 7177
+1826 7166
+1815 7144
+1804 7089
+1804 7056
+1815 7001
+1826 6979
+1837 6968
+1859 6957
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 6957
+1903 6968
+1914 6979
+1925 7001
+1936 7056
+1936 7089
+1925 7144
+1914 7166
+1903 7177
+1881 7188
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 7188
+2134 7177
+2156 7144
+2167 7089
+2167 7056
+2156 7001
+2134 6968
+2101 6957
+2079 6957
+2046 6968
+2024 7001
+2013 7056
+2013 7089
+2024 7144
+2046 7177
+2079 7188
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 7188
+2057 7177
+2046 7166
+2035 7144
+2024 7089
+2024 7056
+2035 7001
+2046 6979
+2057 6968
+2079 6957
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 6957
+2123 6968
+2134 6979
+2145 7001
+2156 7056
+2156 7089
+2145 7144
+2134 7166
+2123 7177
+2101 7188
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7056
+9078 7056
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7056
+2442 7056
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+1486 8235
+1475 8224
+1486 8213
+1497 8224
+1497 8235
+1486 8257
+1464 8268
+1431 8268
+1398 8257
+1376 8235
+1365 8213
+1354 8169
+1354 8103
+1365 8070
+1387 8048
+1420 8037
+1442 8037
+1475 8048
+1497 8070
+1508 8103
+1508 8114
+1497 8147
+1475 8169
+1442 8180
+1431 8180
+1398 8169
+1376 8147
+1365 8114
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+1431 8268
+1409 8257
+1387 8235
+1376 8213
+1365 8169
+1365 8103
+1376 8070
+1398 8048
+1420 8037
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1442 8037
+1464 8048
+1486 8070
+1497 8103
+1497 8114
+1486 8147
+1464 8169
+1442 8180
+8 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1661 8268
+1694 8257
+1716 8224
+1727 8169
+1727 8136
+1716 8081
+1694 8048
+1661 8037
+1640 8037
+1607 8048
+1585 8081
+1574 8136
+1574 8169
+1585 8224
+1607 8257
+1640 8268
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1640 8268
+1618 8257
+1607 8246
+1596 8224
+1585 8169
+1585 8136
+1596 8081
+1607 8059
+1618 8048
+1640 8037
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1661 8037
+1683 8048
+1694 8059
+1705 8081
+1716 8136
+1716 8169
+1705 8224
+1694 8246
+1683 8257
+1661 8268
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 8268
+1914 8257
+1936 8224
+1947 8169
+1947 8136
+1936 8081
+1914 8048
+1881 8037
+1859 8037
+1826 8048
+1804 8081
+1793 8136
+1793 8169
+1804 8224
+1826 8257
+1859 8268
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 8268
+1837 8257
+1826 8246
+1815 8224
+1804 8169
+1804 8136
+1815 8081
+1826 8059
+1837 8048
+1859 8037
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 8037
+1903 8048
+1914 8059
+1925 8081
+1936 8136
+1936 8169
+1925 8224
+1914 8246
+1903 8257
+1881 8268
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 8268
+2134 8257
+2156 8224
+2167 8169
+2167 8136
+2156 8081
+2134 8048
+2101 8037
+2079 8037
+2046 8048
+2024 8081
+2013 8136
+2013 8169
+2024 8224
+2046 8257
+2079 8268
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 8268
+2057 8257
+2046 8246
+2035 8224
+2024 8169
+2024 8136
+2035 8081
+2046 8059
+2057 8048
+2079 8037
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 8037
+2123 8048
+2134 8059
+2145 8081
+2156 8136
+2156 8169
+2145 8224
+2134 8246
+2123 8257
+2101 8268
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8136
+9078 8136
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8136
+2442 8136
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+1486 9315
+1475 9304
+1486 9293
+1497 9304
+1497 9315
+1486 9337
+1464 9348
+1431 9348
+1398 9337
+1376 9315
+1365 9293
+1354 9249
+1354 9183
+1365 9150
+1387 9128
+1420 9117
+1442 9117
+1475 9128
+1497 9150
+1508 9183
+1508 9194
+1497 9227
+1475 9249
+1442 9260
+1431 9260
+1398 9249
+1376 9227
+1365 9194
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+1431 9348
+1409 9337
+1387 9315
+1376 9293
+1365 9249
+1365 9183
+1376 9150
+1398 9128
+1420 9117
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1442 9117
+1464 9128
+1486 9150
+1497 9183
+1497 9194
+1486 9227
+1464 9249
+1442 9260
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 9348
+1574 9238
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+1574 9238
+1596 9260
+1629 9271
+1661 9271
+1694 9260
+1716 9238
+1727 9205
+1727 9183
+1716 9150
+1694 9128
+1661 9117
+1629 9117
+1596 9128
+1585 9139
+1574 9161
+1574 9172
+1585 9183
+1596 9172
+1585 9161
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1661 9271
+1683 9260
+1705 9238
+1716 9205
+1716 9183
+1705 9150
+1683 9128
+1661 9117
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1596 9348
+1705 9348
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1596 9337
+1651 9337
+1705 9348
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1881 9348
+1914 9337
+1936 9304
+1947 9249
+1947 9216
+1936 9161
+1914 9128
+1881 9117
+1859 9117
+1826 9128
+1804 9161
+1793 9216
+1793 9249
+1804 9304
+1826 9337
+1859 9348
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1859 9348
+1837 9337
+1826 9326
+1815 9304
+1804 9249
+1804 9216
+1815 9161
+1826 9139
+1837 9128
+1859 9117
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1881 9117
+1903 9128
+1914 9139
+1925 9161
+1936 9216
+1936 9249
+1925 9304
+1914 9326
+1903 9337
+1881 9348
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 9348
+2134 9337
+2156 9304
+2167 9249
+2167 9216
+2156 9161
+2134 9128
+2101 9117
+2079 9117
+2046 9128
+2024 9161
+2013 9216
+2013 9249
+2024 9304
+2046 9337
+2079 9348
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 9348
+2057 9337
+2046 9326
+2035 9304
+2024 9249
+2024 9216
+2035 9161
+2046 9139
+2057 9128
+2079 9117
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 9117
+2123 9128
+2134 9139
+2145 9161
+2156 9216
+2156 9249
+2145 9304
+2134 9326
+2123 9337
+2101 9348
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4858 1621
+4880 1610
+4891 1599
+4902 1577
+4902 1555
+4891 1533
+4880 1522
+4858 1511
+4836 1511
+4814 1522
+4803 1533
+4792 1555
+4792 1577
+4803 1599
+4814 1610
+4836 1621
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4814 1610
+4803 1588
+4803 1544
+4814 1522
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4880 1522
+4891 1544
+4891 1588
+4880 1610
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+4891 1599
+4902 1610
+4924 1621
+4924 1610
+4902 1610
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+4803 1533
+4792 1522
+4781 1500
+4781 1489
+4792 1467
+4825 1456
+4880 1456
+4913 1445
+4924 1434
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+4781 1489
+4792 1478
+4825 1467
+4880 1467
+4913 1456
+4924 1434
+4924 1423
+4913 1401
+4880 1390
+4814 1390
+4781 1401
+4770 1423
+4770 1434
+4781 1456
+4814 1467
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5001 1555
+5133 1555
+5133 1577
+5122 1599
+5111 1610
+5089 1621
+5056 1621
+5023 1610
+5001 1588
+4990 1555
+4990 1533
+5001 1500
+5023 1478
+5056 1467
+5078 1467
+5111 1478
+5133 1500
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5122 1555
+5122 1588
+5111 1610
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5056 1621
+5034 1610
+5012 1588
+5001 1555
+5001 1533
+5012 1500
+5034 1478
+5056 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5221 1621
+5221 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5232 1621
+5232 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5232 1588
+5254 1610
+5287 1621
+5309 1621
+5342 1610
+5353 1588
+5353 1467
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5309 1621
+5331 1610
+5342 1588
+5342 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5188 1621
+5232 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5188 1467
+5265 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5309 1467
+5386 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5452 1555
+5584 1555
+5584 1577
+5573 1599
+5562 1610
+5540 1621
+5507 1621
+5474 1610
+5452 1588
+5441 1555
+5441 1533
+5452 1500
+5474 1478
+5507 1467
+5529 1467
+5562 1478
+5584 1500
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5573 1555
+5573 1588
+5562 1610
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5507 1621
+5485 1610
+5463 1588
+5452 1555
+5452 1533
+5463 1500
+5485 1478
+5507 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5672 1621
+5672 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5683 1621
+5683 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5683 1555
+5694 1588
+5716 1610
+5738 1621
+5771 1621
+5782 1610
+5782 1599
+5771 1588
+5760 1599
+5771 1610
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5639 1621
+5683 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5639 1467
+5716 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+5859 1599
+5859 1588
+5848 1588
+5848 1599
+5859 1610
+5881 1621
+5925 1621
+5947 1610
+5958 1599
+5969 1577
+5969 1500
+5980 1478
+5991 1467
+13 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+5958 1599
+5958 1500
+5969 1478
+5991 1467
+6002 1467
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+5958 1577
+5947 1566
+5881 1555
+5848 1544
+5837 1522
+5837 1500
+5848 1478
+5881 1467
+5914 1467
+5936 1478
+5958 1500
+11 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+5881 1555
+5859 1544
+5848 1522
+5848 1500
+5859 1478
+5881 1467
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6079 1698
+6079 1511
+6090 1478
+6112 1467
+6134 1467
+6156 1478
+6167 1500
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6090 1698
+6090 1511
+6101 1478
+6112 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6046 1621
+6134 1621
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6255 1687
+6244 1676
+6233 1687
+6244 1698
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6244 1621
+6244 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6255 1621
+6255 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6211 1621
+6255 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6211 1467
+6288 1467
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6431 1621
+6464 1610
+6486 1588
+6497 1555
+6497 1533
+6486 1500
+6464 1478
+6431 1467
+6409 1467
+6376 1478
+6354 1500
+6343 1533
+6343 1555
+6354 1588
+6376 1610
+6409 1621
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6409 1621
+6387 1610
+6365 1588
+6354 1555
+6354 1533
+6365 1500
+6387 1478
+6409 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6431 1467
+6453 1478
+6475 1500
+6486 1533
+6486 1555
+6475 1588
+6453 1610
+6431 1621
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6585 1621
+6585 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6596 1621
+6596 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6596 1588
+6618 1610
+6651 1621
+6673 1621
+6706 1610
+6717 1588
+6717 1467
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6673 1621
+6695 1610
+6706 1588
+6706 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 1621
+6596 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 1467
+6629 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6673 1467
+6750 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+771 5133
+1002 5133
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+771 5144
+1002 5144
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+881 5133
+859 5111
+848 5089
+848 5067
+859 5034
+881 5012
+914 5001
+936 5001
+969 5012
+991 5034
+1002 5067
+1002 5089
+991 5111
+969 5133
+14 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+848 5067
+859 5045
+881 5023
+914 5012
+936 5012
+969 5023
+991 5045
+1002 5067
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+771 5100
+771 5144
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1002 5133
+1002 5177
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+782 5265
+793 5254
+782 5243
+771 5254
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5254
+1002 5254
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5265
+1002 5265
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5221
+848 5265
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1002 5221
+1002 5298
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+870 5463
+848 5474
+892 5474
+870 5463
+859 5452
+848 5430
+848 5386
+859 5364
+870 5353
+892 5353
+903 5364
+914 5386
+936 5441
+947 5463
+958 5474
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+881 5353
+892 5364
+903 5386
+925 5441
+936 5463
+947 5474
+980 5474
+991 5463
+1002 5441
+1002 5397
+991 5375
+980 5364
+958 5353
+1002 5353
+980 5364
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+771 5562
+958 5562
+991 5573
+1002 5595
+1002 5617
+991 5639
+969 5650
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+771 5573
+958 5573
+991 5584
+1002 5595
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5529
+848 5617
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+870 5727
+881 5727
+881 5716
+870 5716
+859 5727
+848 5749
+848 5793
+859 5815
+870 5826
+892 5837
+969 5837
+991 5848
+1002 5859
+13 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+870 5826
+969 5826
+991 5837
+1002 5859
+1002 5870
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+892 5826
+903 5815
+914 5749
+925 5716
+947 5705
+969 5705
+991 5716
+1002 5749
+1002 5782
+991 5804
+969 5826
+11 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+914 5749
+925 5727
+947 5716
+969 5716
+991 5727
+1002 5749
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5947
+1002 5947
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5958
+1002 5958
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+881 5958
+859 5980
+848 6013
+848 6035
+859 6068
+881 6079
+1002 6079
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+848 6035
+859 6057
+881 6068
+1002 6068
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+848 5914
+848 5958
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1002 5914
+1002 5991
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1002 6035
+1002 6112
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 18
+881 6299
+892 6288
+903 6299
+892 6310
+881 6310
+859 6288
+848 6266
+848 6233
+859 6200
+881 6178
+914 6167
+936 6167
+969 6178
+991 6200
+1002 6233
+1002 6255
+991 6288
+969 6310
+18 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+848 6233
+859 6211
+881 6189
+914 6178
+936 6178
+969 6189
+991 6211
+1002 6233
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+914 6387
+914 6519
+892 6519
+870 6508
+859 6497
+848 6475
+848 6442
+859 6409
+881 6387
+914 6376
+936 6376
+969 6387
+991 6409
+1002 6442
+1002 6464
+991 6497
+969 6519
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+914 6508
+881 6508
+859 6497
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+848 6442
+859 6420
+881 6398
+914 6387
+936 6387
+969 6398
+991 6420
+1002 6442
+8 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+2304 5975
+2305 7816
+2307 4950
+2308 6253
+2310 6424
+2311 7247
+2312 7226
+2314 7637
+2315 5613
+2316 5493
+2318 6547
+2319 6692
+2321 5964
+2322 7196
+2323 5558
+2325 5777
+2326 5879
+2328 6986
+2329 6683
+2330 6582
+2332 7053
+2333 6524
+2334 7103
+2336 6771
+2337 6085
+2339 6261
+2340 7658
+2341 6191
+2343 5763
+2344 5180
+2345 6647
+2347 6690
+2348 6033
+2350 5517
+2351 6947
+2352 6031
+2354 7215
+2355 5701
+2357 6826
+2358 4979
+2359 7053
+2361 7059
+2362 6081
+2363 5251
+2365 6631
+2366 7749
+2368 7219
+2369 7019
+2370 5147
+2372 6824
+2373 7042
+2375 5319
+2376 6485
+2377 6702
+2379 7476
+2380 6497
+2381 5692
+2383 7014
+2384 6696
+2386 7546
+2387 6374
+2388 7684
+2390 5675
+2391 6634
+2392 5907
+2394 6945
+2395 4627
+2397 5267
+2398 7319
+2399 6397
+2401 6962
+2402 6413
+2404 5424
+2405 4277
+2406 7412
+2408 5725
+2409 5438
+2410 7077
+2412 7297
+2413 6874
+2415 5718
+2416 7183
+2417 6089
+2419 6439
+2420 5788
+2422 7577
+2423 7135
+2424 4970
+2426 4854
+2427 7340
+2428 6868
+2430 7205
+2431 4963
+2433 5641
+2434 6536
+2435 4679
+2437 6735
+2438 4672
+2439 8293
+2441 6474
+2442 7717
+2444 7297
+2445 5583
+2446 7717
+2448 6229
+2449 7615
+2451 5946
+2452 7426
+2453 7569
+2455 7305
+2456 7030
+2457 5945
+2459 6252
+2460 6256
+2462 5037
+2463 7580
+2464 6202
+2466 6322
+2467 7211
+2469 6680
+2470 7020
+2471 7596
+2473 6861
+2474 6352
+2475 6302
+2477 6238
+2478 5681
+2480 7024
+2481 7194
+2482 7181
+2484 5997
+2485 7477
+2486 6567
+2488 5778
+2489 7126
+2491 7143
+2492 4981
+2493 7184
+2495 6655
+2496 6103
+2498 7571
+2499 7773
+2500 4533
+2502 7966
+2503 6383
+2504 5874
+2506 6128
+2507 7545
+2509 7794
+2510 5779
+2511 6850
+2513 6570
+2514 6612
+2516 6800
+2517 7324
+2518 6811
+2520 6237
+2521 5937
+2522 7023
+2524 5700
+2525 6549
+2527 5356
+2528 4062
+2529 5495
+2531 7192
+2532 7316
+2533 6114
+2535 7015
+2536 6818
+2538 6597
+2539 7315
+2540 6174
+2542 5431
+2543 4943
+2545 7012
+2546 6702
+2547 7220
+2549 6142
+2550 7649
+2551 6097
+2553 7626
+2554 5399
+2556 6739
+2557 5159
+2558 6984
+2560 6165
+2561 6070
+2563 7594
+2564 6333
+2565 6072
+2567 6981
+2568 6118
+2569 8009
+2571 6786
+2572 3964
+2574 7069
+2575 6203
+2576 7315
+2578 6263
+2579 6910
+2580 7867
+2582 7539
+2583 6058
+2585 7242
+2586 7161
+2587 4653
+2589 5701
+2590 5840
+2592 7394
+2593 6140
+2594 6588
+2596 7405
+2597 7363
+2598 6270
+2600 6828
+2601 6694
+2603 6633
+2604 5843
+2605 6859
+2607 7988
+2608 8335
+2610 6485
+2611 6899
+2612 6402
+2614 6170
+2615 6849
+2616 6781
+2618 5607
+2619 7433
+2621 6231
+2622 6930
+2623 6528
+2625 5108
+2626 5909
+2627 6618
+2629 6798
+2630 7872
+2632 6204
+2633 5670
+2634 6511
+2636 7405
+2637 7134
+2639 6024
+2640 5627
+2641 7504
+2643 6354
+2644 6328
+2645 6850
+2647 6170
+2648 5736
+2650 5071
+2651 7988
+2652 5623
+2654 7860
+2655 8050
+2657 6341
+2658 6585
+2659 7083
+2661 6648
+2662 6756
+2663 5424
+2665 6470
+2666 7593
+2668 5424
+2669 6352
+2670 6943
+2672 6103
+2673 5837
+2674 7117
+2676 6315
+2677 5418
+2679 6215
+2680 6400
+2681 6010
+2683 7503
+2684 7385
+2686 6992
+2687 6667
+2688 6781
+2690 5817
+2691 5413
+2692 5412
+2694 5498
+2695 4809
+2697 6155
+2698 6572
+2699 5742
+2701 6998
+2702 7159
+2704 5752
+2705 6282
+2706 7428
+2708 6185
+2709 5320
+2710 5352
+2712 7322
+2713 6880
+2715 5045
+2716 8073
+2717 6522
+2719 6304
+2720 6838
+2721 7607
+2723 6454
+2724 4543
+2726 5443
+2727 4373
+2728 6075
+2730 4438
+2731 6222
+2733 6471
+2734 6127
+2735 4718
+2737 6646
+2738 7497
+2739 6643
+2741 6507
+2742 7559
+2744 5945
+2745 6344
+2746 5749
+2748 3931
+2749 5983
+2751 5519
+2752 7380
+2753 6519
+2755 6871
+2756 6904
+2757 4866
+2759 6241
+2760 6975
+2762 6489
+2763 6289
+2764 7682
+2766 6684
+2767 7146
+2768 4765
+2770 6388
+2771 5567
+2773 6850
+2774 7391
+2775 6612
+2777 6446
+2778 6030
+2780 4342
+2781 4427
+2782 6825
+2784 5752
+2785 6568
+2786 7571
+2788 6257
+2789 6656
+2791 6926
+2792 6282
+2793 6897
+2795 6227
+2796 5113
+2798 7030
+2799 7242
+2800 5510
+2802 7129
+2803 6568
+2804 6192
+2806 6959
+2807 5321
+2809 4693
+2810 6100
+2811 6395
+2813 6826
+2814 5490
+2815 6969
+2817 6078
+2818 7152
+2820 6091
+2821 7381
+2822 6617
+2824 7695
+2825 5593
+2827 6622
+2828 6288
+2829 6702
+2831 6934
+2832 6624
+2833 5925
+2835 7798
+2836 4630
+2838 6688
+2839 7861
+2840 6913
+2842 6210
+2843 6419
+2845 6804
+2846 7672
+2847 7459
+2849 7743
+2850 6174
+2851 7115
+2853 7227
+2854 6955
+2856 4666
+2857 5437
+2858 7272
+2860 7161
+2861 6287
+2862 6510
+2864 7009
+2865 6230
+2867 8104
+2868 5213
+2869 7444
+2871 5270
+2872 6554
+2874 8316
+2875 6849
+2876 7049
+2878 7424
+2879 5947
+2880 7143
+2882 4998
+2883 6869
+2885 6666
+2886 5571
+2887 4916
+2889 7033
+2890 7221
+2892 6641
+2893 5717
+2894 5146
+2896 5780
+2897 6069
+2898 5560
+2900 6828
+2901 6165
+2903 5213
+2904 7420
+2905 5039
+2907 6388
+2908 7049
+2909 6891
+2911 6493
+2912 7226
+2914 7190
+2915 6023
+2916 7258
+2918 7024
+2919 7329
+2921 5204
+2922 6316
+2923 7768
+2925 5235
+2926 3984
+2927 4882
+2929 5740
+2930 6666
+2932 5163
+2933 6564
+2934 7307
+2936 5580
+2937 7181
+2939 6624
+2940 7831
+2941 7859
+2943 5221
+2944 7092
+2945 7608
+2947 5700
+2948 6040
+2950 7511
+2951 5388
+2952 7134
+2954 6344
+2955 7619
+2956 5623
+2958 5272
+2959 5360
+2961 6245
+2962 6129
+2963 6190
+2965 6880
+2966 6481
+2968 6064
+2969 5978
+2970 5826
+2972 6860
+2973 7539
+2974 5309
+2976 5697
+2977 6036
+2979 5645
+2980 7292
+2981 7775
+2983 5403
+2984 7097
+2986 6945
+2987 6146
+2988 5767
+2990 6920
+2991 6175
+2992 6384
+2994 6065
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+2994 6065
+2995 6508
+2997 6632
+2998 5605
+2999 7427
+3001 6132
+3002 6997
+3003 5107
+3005 8057
+3006 5980
+3008 6607
+3009 5047
+3010 7159
+3012 6130
+3013 6326
+3015 5480
+3016 7144
+3017 6460
+3019 6057
+3020 5236
+3021 7111
+3023 6834
+3024 7882
+3026 6138
+3027 6672
+3028 4868
+3030 5932
+3031 6708
+3033 5904
+3034 6156
+3035 7098
+3037 6948
+3038 7216
+3039 5263
+3041 4902
+3042 5075
+3044 6038
+3045 5928
+3046 6721
+3048 6916
+3049 6175
+3050 6186
+3052 5165
+3053 6628
+3055 4563
+3056 6825
+3057 6994
+3059 5837
+3060 6024
+3062 4145
+3063 6181
+3064 7149
+3066 6230
+3067 7353
+3068 5027
+3070 6784
+3071 5176
+3073 4734
+3074 6185
+3075 7018
+3077 6738
+3078 7112
+3080 5657
+3081 6499
+3082 6577
+3084 5404
+3085 6748
+3086 7088
+3088 6050
+3089 4645
+3091 7826
+3092 4502
+3093 3982
+3095 6140
+3096 6906
+3097 5287
+3099 6297
+3100 7275
+3102 7638
+3103 6758
+3104 6217
+3106 6206
+3107 6472
+3109 7863
+3110 5915
+3111 6128
+3113 7946
+3114 6022
+3115 6673
+3117 7093
+3118 7403
+3120 5984
+3121 7523
+3122 5666
+3124 5830
+3125 7180
+3127 7926
+3128 5279
+3129 7104
+3131 6301
+3132 7283
+3133 6673
+3135 5524
+3136 4270
+3138 7139
+3139 5666
+3140 6830
+3142 6505
+3143 4847
+3144 7208
+3146 5955
+3147 6739
+3149 4931
+3150 6824
+3151 6430
+3153 6334
+3154 6755
+3156 6898
+3157 7908
+3158 7316
+3160 4991
+3161 5627
+3162 6798
+3164 7575
+3165 4947
+3167 5466
+3168 7527
+3169 6864
+3171 5942
+3172 6255
+3174 6357
+3175 6552
+3176 8008
+3178 5726
+3179 5386
+3180 7356
+3182 7055
+3183 7835
+3185 5904
+3186 7610
+3187 6764
+3189 6366
+3190 7155
+3192 6349
+3193 6661
+3194 6692
+3196 7036
+3197 6412
+3198 6167
+3200 5942
+3201 6170
+3203 6511
+3204 6497
+3205 5323
+3207 5020
+3208 6034
+3209 7502
+3211 7104
+3212 6304
+3214 4423
+3215 5941
+3216 6554
+3218 5133
+3219 5137
+3221 4899
+3222 5826
+3223 7202
+3225 5999
+3226 5980
+3227 7764
+3229 5558
+3230 5769
+3232 6808
+3233 6655
+3234 7062
+3236 4576
+3237 7493
+3239 5320
+3240 6538
+3241 6106
+3243 6974
+3244 6782
+3245 5881
+3247 5960
+3248 6582
+3250 3852
+3251 7165
+3252 5777
+3254 4462
+3255 6883
+3256 5868
+3258 6677
+3259 7032
+3261 7121
+3262 6284
+3263 4604
+3265 6944
+3266 5429
+3268 5106
+3269 4632
+3270 5302
+3272 7407
+3273 6297
+3274 4845
+3276 5363
+3277 5750
+3279 6514
+3280 6256
+3281 6940
+3283 5749
+3284 5088
+3286 5680
+3287 6105
+3288 5626
+3290 7455
+3291 6419
+3292 7427
+3294 6426
+3295 6968
+3297 7535
+3298 6764
+3299 7084
+3301 6368
+3302 7328
+3303 6864
+3305 7209
+3306 5261
+3308 6392
+3309 4682
+3310 5981
+3312 6751
+3313 6832
+3315 5489
+3316 6844
+3317 6692
+3319 6347
+3320 7442
+3321 5362
+3323 5816
+3324 6621
+3326 6946
+3327 7012
+3328 5654
+3330 5382
+3331 7440
+3333 4981
+3334 6342
+3335 6539
+3337 5497
+3338 7107
+3339 6330
+3341 7525
+3342 6899
+3344 5995
+3345 5421
+3346 6763
+3348 6741
+3349 5918
+3350 6332
+3352 6261
+3353 5289
+3355 6792
+3356 4720
+3357 6069
+3359 5393
+3360 7078
+3362 6579
+3363 5048
+3364 6334
+3366 4833
+3367 5472
+3368 7092
+3370 5130
+3371 8076
+3373 5672
+3374 5522
+3375 5711
+3377 7683
+3378 6997
+3380 6467
+3381 6152
+3382 6038
+3384 6242
+3385 4935
+3386 7055
+3388 6717
+3389 7209
+3391 6157
+3392 7196
+3393 5341
+3395 7441
+3396 7034
+3397 6058
+3399 7014
+3400 6908
+3402 7481
+3403 6465
+3404 6024
+3406 5161
+3407 7598
+3409 4797
+3410 6655
+3411 6232
+3413 7690
+3414 4949
+3415 7138
+3417 5030
+3418 4984
+3420 6002
+3421 5609
+3422 6021
+3424 6210
+3425 6712
+3427 5799
+3428 4447
+3429 5318
+3431 6674
+3432 6104
+3433 5491
+3435 5034
+3436 5408
+3438 5728
+3439 5729
+3440 7040
+3442 6414
+3443 6618
+3444 4612
+3446 5057
+3447 5917
+3449 5631
+3450 7749
+3451 5845
+3453 4696
+3454 6539
+3456 5306
+3457 6940
+3458 6095
+3460 5522
+3461 7480
+3462 7401
+3464 6061
+3465 4705
+3467 7143
+3468 6591
+3469 6361
+3471 6358
+3472 6579
+3474 5328
+3475 5058
+3476 5359
+3478 7628
+3479 4818
+3480 6228
+3482 6697
+3483 5229
+3485 7214
+3486 6968
+3487 6231
+3489 7966
+3490 6855
+3491 5392
+3493 6562
+3494 4965
+3496 5518
+3497 4392
+3498 6042
+3500 5510
+3501 5253
+3503 7226
+3504 5400
+3505 5482
+3507 5709
+3508 6324
+3509 5405
+3511 5800
+3512 6493
+3514 5151
+3515 5342
+3516 5332
+3518 6004
+3519 6017
+3521 6112
+3522 4149
+3523 6556
+3525 6055
+3526 4613
+3527 6550
+3529 7414
+3530 5444
+3532 5983
+3533 5153
+3534 6227
+3536 6975
+3537 6840
+3538 6669
+3540 5521
+3541 7013
+3543 6924
+3544 6700
+3545 6718
+3547 6761
+3548 6997
+3550 4070
+3551 5336
+3552 5382
+3554 7298
+3555 6985
+3556 5151
+3558 7633
+3559 5992
+3561 4105
+3562 7280
+3563 6925
+3565 5363
+3566 6286
+3568 6211
+3569 4586
+3570 5155
+3572 4908
+3573 6782
+3574 6281
+3576 4295
+3577 6229
+3579 6564
+3580 3982
+3581 6056
+3583 4917
+3584 6610
+3585 7452
+3587 6288
+3588 6866
+3590 6604
+3591 5803
+3592 5523
+3594 7327
+3595 6162
+3597 5427
+3598 4539
+3599 4636
+3601 6353
+3602 6531
+3603 6937
+3605 6264
+3606 5553
+3608 7460
+3609 6216
+3610 5923
+3612 7448
+3613 6211
+3615 5896
+3616 7463
+3617 7677
+3619 7453
+3620 6312
+3621 6029
+3623 6315
+3624 5449
+3626 5130
+3627 5696
+3628 6288
+3630 5038
+3631 6149
+3632 5816
+3634 5556
+3635 6803
+3637 6792
+3638 6528
+3639 4853
+3641 6032
+3642 5143
+3644 5579
+3645 5671
+3646 7076
+3648 6538
+3649 4431
+3650 5194
+3652 6770
+3653 6072
+3655 4156
+3656 4607
+3657 7255
+3659 5704
+3660 6602
+3662 6843
+3663 6291
+3664 5185
+3666 7251
+3667 6110
+3668 5283
+3670 6565
+3671 6153
+3673 6825
+3674 5929
+3675 4326
+3677 5884
+3678 6694
+3679 4817
+3681 5716
+3682 7328
+3684 6636
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+3684 6636
+3685 6170
+3686 5820
+3688 5297
+3689 5708
+3691 4592
+3692 4857
+3693 6834
+3695 7258
+3696 6691
+3697 6333
+3699 7118
+3700 5369
+3702 6478
+3703 6327
+3704 6422
+3706 5175
+3707 6853
+3709 6431
+3710 5454
+3711 5344
+3713 6855
+3714 5590
+3715 7694
+3717 6550
+3718 7201
+3720 6486
+3721 4999
+3722 7183
+3724 5553
+3725 6642
+3726 4676
+3728 6758
+3729 4332
+3731 5495
+3732 5165
+3733 5613
+3735 5879
+3736 4700
+3738 4972
+3739 4334
+3740 6682
+3742 7116
+3743 5894
+3744 6361
+3746 5605
+3747 6007
+3749 5479
+3750 5883
+3751 5141
+3753 7290
+3754 6674
+3756 4964
+3757 5153
+3758 7665
+3760 4429
+3761 4644
+3762 4841
+3764 6395
+3765 5078
+3767 4876
+3768 6966
+3769 5723
+3771 7599
+3772 7060
+3773 5417
+3775 3796
+3776 5048
+3778 6809
+3779 5829
+3780 6202
+3782 5439
+3783 7151
+3785 5412
+3786 6694
+3787 4841
+3789 7062
+3790 5192
+3791 4741
+3793 4764
+3794 4839
+3796 6243
+3797 5745
+3798 5906
+3800 7574
+3801 4236
+3803 6197
+3804 7421
+3805 3958
+3807 6458
+3808 7604
+3809 5816
+3811 4430
+3812 5677
+3814 5400
+3815 5773
+3816 6096
+3818 3143
+3819 5402
+3820 7683
+3822 5902
+3823 6980
+3825 4711
+3826 4456
+3827 6765
+3829 6019
+3830 5095
+3832 4937
+3833 5773
+3834 5615
+3836 6371
+3837 6926
+3838 6176
+3840 6255
+3841 6747
+3843 7824
+3844 6753
+3845 6128
+3847 5596
+3848 3728
+3850 5860
+3851 5295
+3852 5202
+3854 5454
+3855 5691
+3856 5828
+3858 6077
+3859 4998
+3861 7756
+3862 6009
+3863 5641
+3865 4587
+3866 5874
+3867 5728
+3869 5814
+3870 6350
+3872 6834
+3873 5732
+3874 5525
+3876 5287
+3877 5901
+3879 6770
+3880 5634
+3881 6675
+3883 5801
+3884 6346
+3885 6345
+3887 3944
+3888 6323
+3890 7631
+3891 5038
+3892 5339
+3894 5718
+3895 6260
+3897 4656
+3898 5858
+3899 5914
+3901 5009
+3902 6377
+3903 6192
+3905 3838
+3906 5374
+3908 6010
+3909 6069
+3910 4908
+3912 6819
+3913 5734
+3914 5874
+3916 3925
+3917 6544
+3919 7007
+3920 4534
+3921 4806
+3923 6988
+3924 4958
+3926 4422
+3927 6334
+3928 4903
+3930 7559
+3931 6882
+3932 7246
+3934 7262
+3935 6130
+3937 3709
+3938 5727
+3939 6338
+3941 4823
+3942 6971
+3944 6382
+3945 5852
+3946 5377
+3948 6003
+3949 6432
+3950 5140
+3952 5964
+3953 6563
+3955 4698
+3956 7282
+3957 5322
+3959 6201
+3960 5999
+3961 7515
+3963 7765
+3964 6574
+3966 6829
+3967 5806
+3968 6656
+3970 6808
+3971 6480
+3973 4308
+3974 5807
+3975 4915
+3977 5140
+3978 5656
+3979 6004
+3981 7332
+3982 6410
+3984 5599
+3985 5602
+3986 5153
+3988 4864
+3989 5306
+3991 5471
+3992 5498
+3993 5240
+3995 6296
+3996 5165
+3997 7085
+3999 4961
+4000 4641
+4002 6059
+4003 5248
+4004 6500
+4006 5729
+4007 6164
+4008 4816
+4010 4014
+4011 5666
+4013 4345
+4014 4585
+4015 5984
+4017 4942
+4018 4814
+4020 5578
+4021 4211
+4022 7063
+4024 4061
+4025 4690
+4026 5719
+4028 6475
+4029 7119
+4031 4972
+4032 5645
+4033 7593
+4035 5954
+4036 6742
+4038 4801
+4039 6177
+4040 7284
+4042 6661
+4043 5013
+4044 4135
+4046 4466
+4047 4334
+4049 3960
+4050 4191
+4051 5243
+4053 7723
+4054 6634
+4056 5310
+4057 5735
+4058 7055
+4060 6541
+4061 7189
+4062 5539
+4064 6938
+4065 4548
+4067 4666
+4068 6024
+4069 5072
+4071 5066
+4072 4461
+4073 5766
+4075 4976
+4076 4248
+4078 6228
+4079 6556
+4080 6204
+4082 4209
+4083 7114
+4085 6552
+4086 6478
+4087 6333
+4089 5969
+4090 5169
+4091 7604
+4093 6236
+4094 6638
+4096 5579
+4097 6672
+4098 6449
+4100 5180
+4101 6388
+4103 4234
+4104 4391
+4105 4651
+4107 6191
+4108 6119
+4109 5000
+4111 5240
+4112 6411
+4114 5193
+4115 7274
+4116 4555
+4118 5460
+4119 3571
+4120 6938
+4122 6110
+4123 4595
+4125 5067
+4126 5035
+4127 7996
+4129 4122
+4130 6991
+4132 4827
+4133 4823
+4134 5016
+4136 5928
+4137 4319
+4138 5626
+4140 5762
+4141 5980
+4143 5354
+4144 7235
+4145 5318
+4147 6232
+4148 5351
+4150 5777
+4151 5357
+4152 5312
+4154 4073
+4155 5107
+4156 6022
+4158 3898
+4159 5845
+4161 4139
+4162 7499
+4163 6649
+4165 5487
+4166 6164
+4167 5959
+4169 5074
+4170 5523
+4172 5028
+4173 6271
+4174 5409
+4176 7406
+4177 5963
+4179 5488
+4180 4874
+4181 5595
+4183 4673
+4184 4818
+4185 4402
+4187 5036
+4188 5949
+4190 5548
+4191 4019
+4192 4972
+4194 4866
+4195 6727
+4197 5365
+4198 4732
+4199 6428
+4201 3299
+4202 4261
+4203 5529
+4205 5748
+4206 3059
+4208 5490
+4209 4973
+4210 6017
+4212 4664
+4213 3796
+4214 4896
+4216 4452
+4217 6510
+4219 4747
+4220 5521
+4221 4193
+4223 4976
+4224 4771
+4226 4945
+4227 4345
+4228 5805
+4230 5689
+4231 4711
+4232 6199
+4234 4049
+4235 5158
+4237 3510
+4238 5769
+4239 5298
+4241 5926
+4242 4664
+4244 6605
+4245 5619
+4246 4499
+4248 5892
+4249 5683
+4250 5952
+4252 6122
+4253 4120
+4255 6840
+4256 4934
+4257 5462
+4259 3921
+4260 6392
+4261 3845
+4263 4635
+4264 5077
+4266 5357
+4267 5407
+4268 4526
+4270 5522
+4271 5350
+4273 6841
+4274 5624
+4275 6043
+4277 6499
+4278 6918
+4279 7601
+4281 5802
+4282 4525
+4284 5221
+4285 6049
+4286 4410
+4288 4131
+4289 3651
+4291 6234
+4292 5942
+4293 5465
+4295 3740
+4296 4637
+4297 5424
+4299 5638
+4300 5997
+4302 5276
+4303 5294
+4304 5911
+4306 5647
+4307 3782
+4308 5702
+4310 6094
+4311 6285
+4313 5162
+4314 6497
+4315 5088
+4317 5544
+4318 4826
+4320 4705
+4321 5791
+4322 3410
+4324 5219
+4325 5887
+4326 7402
+4328 4437
+4329 4834
+4331 3945
+4332 5536
+4333 4938
+4335 4561
+4336 4568
+4338 4726
+4339 4517
+4340 4483
+4342 4659
+4343 5097
+4344 4829
+4346 6115
+4347 4631
+4349 4721
+4350 6862
+4351 6986
+4353 4668
+4354 6283
+4355 3399
+4357 4840
+4358 4100
+4360 3782
+4361 5525
+4362 5422
+4364 5764
+4365 4929
+4367 4125
+4368 4868
+4369 6211
+4371 5907
+4372 4884
+4373 4001
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+4373 4001
+4375 6307
+4376 5989
+4378 4968
+4379 5533
+4380 4396
+4382 5916
+4383 5373
+4385 5302
+4386 5738
+4387 4804
+4389 4709
+4390 6196
+4391 4473
+4393 7109
+4394 5018
+4396 4731
+4397 5907
+4398 4788
+4400 6437
+4401 5667
+4402 5365
+4404 3650
+4405 4945
+4407 3976
+4408 4879
+4409 4407
+4411 6014
+4412 4096
+4414 5222
+4415 6216
+4416 5301
+4418 5797
+4419 4803
+4420 4612
+4422 4215
+4423 4238
+4425 6240
+4426 4646
+4427 4413
+4429 5132
+4430 4949
+4432 5271
+4433 5711
+4434 4627
+4436 5084
+4437 5256
+4438 5503
+4440 4790
+4441 5481
+4443 5128
+4444 4624
+4445 4050
+4447 4813
+4448 5188
+4449 4801
+4451 5200
+4452 4263
+4454 5300
+4455 4722
+4456 5144
+4458 4835
+4459 4681
+4461 4219
+4462 3599
+4463 5365
+4465 6045
+4466 5993
+4467 3658
+4469 4438
+4470 4802
+4472 4337
+4473 5162
+4474 4701
+4476 5821
+4477 5553
+4479 6380
+4480 4313
+4481 4448
+4483 5026
+4484 5513
+4485 4882
+4487 4593
+4488 6002
+4490 4918
+4491 5307
+4492 4385
+4494 5196
+4495 4424
+4496 5074
+4498 5191
+4499 2876
+4501 5532
+4502 4186
+4503 5173
+4505 4020
+4506 5470
+4508 6183
+4509 5789
+4510 5566
+4512 7397
+4513 4030
+4514 4571
+4516 5151
+4517 4024
+4519 4736
+4520 5770
+4521 5857
+4523 3621
+4524 3999
+4526 4367
+4527 4136
+4528 4411
+4530 6602
+4531 5130
+4532 4375
+4534 4136
+4535 4354
+4537 4480
+4538 5302
+4539 5085
+4541 5188
+4542 4070
+4543 5418
+4545 3478
+4546 4261
+4548 4781
+4549 4659
+4550 5145
+4552 4164
+4553 4856
+4555 6950
+4556 4181
+4557 4789
+4559 5802
+4560 6507
+4561 6295
+4563 2845
+4564 3797
+4566 4108
+4567 5561
+4568 5758
+4570 5495
+4571 6497
+4573 4735
+4574 3843
+4575 5613
+4577 4142
+4578 4111
+4579 4694
+4581 4239
+4582 4944
+4584 5527
+4585 4880
+4586 4081
+4588 5156
+4589 4686
+4590 5033
+4592 4636
+4593 4331
+4595 4534
+4596 4100
+4597 5606
+4599 5805
+4600 5260
+4602 5058
+4603 3519
+4604 5371
+4606 4458
+4607 5803
+4608 6090
+4610 3593
+4611 6145
+4613 5581
+4614 3785
+4615 3642
+4617 5094
+4618 4028
+4620 6271
+4621 4236
+4622 4135
+4624 5583
+4625 3876
+4626 5511
+4628 4542
+4629 3819
+4631 3291
+4632 4485
+4633 5821
+4635 2945
+4636 4217
+4637 4247
+4639 5298
+4640 5690
+4642 4138
+4643 4686
+4644 6049
+4646 5350
+4647 3809
+4649 4497
+4650 4178
+4651 5365
+4653 4685
+4654 4860
+4655 3455
+4657 3674
+4658 4198
+4660 4522
+4661 5279
+4662 4441
+4664 4086
+4665 3529
+4667 4959
+4668 4313
+4669 4104
+4671 4460
+4672 5557
+4673 4769
+4675 4642
+4676 5072
+4678 4229
+4679 4214
+4680 4135
+4682 3574
+4683 5016
+4684 3918
+4686 3988
+4687 4638
+4689 3379
+4690 3912
+4691 3752
+4693 4410
+4694 3841
+4696 3147
+4697 5088
+4698 4660
+4700 4743
+4701 4963
+4702 3857
+4704 4519
+4705 4511
+4707 6638
+4708 3514
+4709 3953
+4711 4098
+4712 4830
+4714 4213
+4715 4801
+4716 4252
+4718 4835
+4719 4799
+4720 4029
+4722 4666
+4723 5112
+4725 4237
+4726 3929
+4727 5011
+4729 5031
+4730 4380
+4731 5397
+4733 4341
+4734 4368
+4736 3439
+4737 5105
+4738 4054
+4740 4108
+4741 3825
+4743 3774
+4744 4465
+4745 4408
+4747 3875
+4748 3327
+4749 4335
+4751 5010
+4752 3419
+4754 3467
+4755 5674
+4756 3545
+4758 4611
+4759 5626
+4761 4621
+4762 4163
+4763 4579
+4765 4164
+4766 3478
+4767 4734
+4769 4378
+4770 4729
+4772 4792
+4773 2917
+4774 4123
+4776 4701
+4777 3921
+4778 4556
+4780 4234
+4781 3942
+4783 3896
+4784 4881
+4785 3423
+4787 4234
+4788 3534
+4790 3747
+4791 3514
+4792 3246
+4794 5988
+4795 4811
+4796 3302
+4798 3206
+4799 4655
+4801 4662
+4802 3633
+4803 3951
+4805 3603
+4806 3966
+4808 3180
+4809 3612
+4810 3946
+4812 5075
+4813 4119
+4814 4512
+4816 4386
+4817 3565
+4819 4355
+4820 3819
+4821 4626
+4823 4929
+4824 3337
+4825 5396
+4827 3200
+4828 4573
+4830 4451
+4831 3233
+4832 4307
+4834 2969
+4835 4928
+4837 4062
+4838 4411
+4839 4053
+4841 4414
+4842 3122
+4843 3562
+4845 3344
+4846 5002
+4848 3488
+4849 3619
+4850 5116
+4852 4652
+4853 3643
+4855 3366
+4856 3762
+4857 3847
+4859 3509
+4860 3357
+4861 3683
+4863 3601
+4864 4759
+4866 3734
+4867 4163
+4868 3625
+4870 3684
+4871 3988
+4872 3739
+4874 3013
+4875 3886
+4877 4262
+4878 4208
+4879 3747
+4881 3695
+4882 3499
+4884 4756
+4885 4083
+4886 3708
+4888 4346
+4889 4228
+4890 4875
+4892 4302
+4893 3129
+4895 3595
+4896 3206
+4897 3657
+4899 3897
+4900 3714
+4902 4546
+4903 3941
+4904 3987
+4906 3399
+4907 3728
+4908 4032
+4910 4304
+4911 3607
+4913 4106
+4914 3293
+4915 4661
+4917 4094
+4918 3563
+4920 3370
+4921 3443
+4922 3681
+4924 3064
+4925 3626
+4926 3979
+4928 5253
+4929 3296
+4931 5318
+4932 3374
+4933 4219
+4935 3011
+4936 4587
+4937 5470
+4939 3823
+4940 3979
+4942 2946
+4943 3030
+4944 4637
+4946 3945
+4947 3750
+4949 4495
+4950 6040
+4951 3667
+4953 4144
+4954 3213
+4955 4001
+4957 3328
+4958 3290
+4960 4729
+4961 3859
+4962 2930
+4964 3991
+4965 4481
+4967 3328
+4968 4332
+4969 3967
+4971 3367
+4972 3517
+4973 4507
+4975 3048
+4976 4018
+4978 3168
+4979 3484
+4980 3019
+4982 3981
+4983 3219
+4984 3418
+4986 4245
+4987 2792
+4989 4461
+4990 4808
+4991 3574
+4993 3264
+4994 4046
+4996 4112
+4997 3535
+4998 3439
+5000 3694
+5001 2853
+5002 3746
+5004 3686
+5005 2864
+5007 4195
+5008 3154
+5009 3880
+5011 3566
+5012 3762
+5014 4567
+5015 3416
+5016 3373
+5018 4005
+5019 3810
+5020 4561
+5022 4018
+5023 3856
+5025 3308
+5026 3627
+5027 3297
+5029 3280
+5030 3243
+5031 3710
+5033 4076
+5034 3332
+5036 5182
+5037 2777
+5038 5224
+5040 2786
+5041 2890
+5043 4560
+5044 3147
+5045 4228
+5047 4021
+5048 2970
+5049 4851
+5051 4002
+5052 3527
+5054 3231
+5055 3118
+5056 3904
+5058 3773
+5059 3850
+5061 3070
+5062 3773
+5063 3879
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+5063 3879
+5065 3441
+5066 4339
+5067 3743
+5069 4075
+5070 3051
+5072 4049
+5073 4028
+5074 3206
+5076 3346
+5077 3790
+5078 3009
+5080 3329
+5081 3559
+5083 4121
+5084 3576
+5085 3450
+5087 2877
+5088 3404
+5090 3346
+5091 3182
+5092 2917
+5094 3480
+5095 2904
+5096 3539
+5098 4145
+5099 3587
+5101 4768
+5102 2948
+5103 3781
+5105 2945
+5106 3064
+5108 4570
+5109 3327
+5110 4250
+5112 2959
+5113 3737
+5114 3623
+5116 3186
+5117 3718
+5119 2897
+5120 2984
+5121 4505
+5123 3127
+5124 3793
+5125 4309
+5127 3412
+5128 3062
+5130 3808
+5131 2960
+5132 3298
+5134 3533
+5135 3190
+5137 3457
+5138 2788
+5139 3136
+5141 3197
+5142 3653
+5143 3043
+5145 3119
+5146 3192
+5148 3071
+5149 3284
+5150 3910
+5152 3711
+5153 3611
+5155 3356
+5156 3826
+5157 2917
+5159 3157
+5160 3312
+5161 4161
+5163 3561
+5164 3936
+5166 3871
+5167 3756
+5168 3744
+5170 3495
+5171 3013
+5172 3203
+5174 4517
+5175 3220
+5177 3923
+5178 3751
+5179 3117
+5181 4169
+5182 3055
+5184 3006
+5185 3403
+5186 2931
+5188 3579
+5189 3710
+5190 3432
+5192 3242
+5193 4417
+5195 3799
+5196 3103
+5197 2984
+5199 4025
+5200 4361
+5202 3475
+5203 3287
+5204 3220
+5206 4545
+5207 3662
+5208 3381
+5210 3982
+5211 2876
+5213 3510
+5214 3643
+5215 4000
+5217 2982
+5218 3840
+5219 3011
+5221 3072
+5222 2792
+5224 3720
+5225 2818
+5226 3808
+5228 3551
+5229 3639
+5231 2946
+5232 3743
+5233 3761
+5235 3335
+5236 3316
+5237 2889
+5239 3142
+5240 2788
+5242 3173
+5243 2806
+5244 3410
+5246 3148
+5247 3062
+5249 3936
+5250 2843
+5251 4039
+5253 3585
+5254 3841
+5255 2896
+5257 3356
+5258 3013
+5260 4154
+5261 3697
+5262 2950
+5264 3484
+5265 3633
+5266 3557
+5268 3037
+5269 3457
+5271 3461
+5272 3551
+5273 4206
+5275 3111
+5276 3106
+5278 3003
+5279 3547
+5280 3048
+5282 3915
+5283 2977
+5284 3170
+5286 3217
+5287 3901
+5289 3362
+5290 2792
+5291 3396
+5293 3077
+5294 3785
+5296 3244
+5297 3439
+5298 3267
+5300 3481
+5301 3080
+5302 3152
+5304 3088
+5305 3310
+5307 3713
+5308 3899
+5309 3541
+5311 3177
+5312 3118
+5313 3647
+5315 2988
+5316 2756
+5318 2727
+5319 2948
+5320 3117
+5322 3935
+5323 2961
+5325 3929
+5326 3201
+5327 3554
+5329 3020
+5330 3453
+5331 3253
+5333 3033
+5334 4427
+5336 2836
+5337 2921
+5338 4102
+5340 2814
+5341 3323
+5343 2988
+5344 3271
+5345 3288
+5347 2836
+5348 3468
+5349 2984
+5351 2853
+5352 2792
+5354 3206
+5355 2745
+5356 3203
+5358 3541
+5359 3217
+5360 2989
+5362 3379
+5363 3504
+5365 3251
+5366 3346
+5367 3070
+5369 3489
+5370 2946
+5372 3064
+5373 3160
+5374 2881
+5376 3045
+5377 3585
+5378 2801
+5380 3463
+5381 3051
+5383 3284
+5384 3000
+5385 3717
+5387 2952
+5388 3091
+5390 3180
+5391 3575
+5392 3165
+5394 3031
+5395 2950
+5396 2944
+5398 3282
+5399 3210
+5401 3319
+5402 3373
+5403 2919
+5405 2818
+5406 2843
+5407 3016
+5409 2716
+5410 2792
+5412 2853
+5413 2788
+5414 2897
+5416 3626
+5417 3268
+5419 2818
+5420 3655
+5421 3558
+5423 3364
+5424 3011
+5425 2898
+5427 2786
+5428 2919
+5430 3606
+5431 3429
+5432 2716
+5434 2898
+5435 2745
+5437 3037
+5438 2940
+5439 3036
+5441 2814
+5442 3247
+5443 2853
+5445 2930
+5446 2914
+5448 2817
+5449 2981
+5450 2976
+5452 2910
+5453 2878
+5454 2817
+5456 2727
+5457 3086
+5459 2817
+5460 2822
+5461 3188
+5463 3008
+5464 2898
+5466 2945
+5467 2896
+5468 2817
+5470 2916
+5471 2986
+5472 3204
+5474 2898
+5475 2756
+5477 3578
+5478 2898
+5479 3110
+5481 2853
+5482 2836
+5484 3011
+5485 3708
+5486 3119
+5488 3087
+5489 3051
+5490 3256
+5492 2942
+5493 3278
+5495 2838
+5496 2814
+5497 3027
+5499 3363
+5500 2806
+5501 2897
+5503 3186
+5504 2756
+5506 2921
+5507 3441
+5508 2858
+5510 2806
+5511 2984
+5513 3324
+5514 2939
+5515 3112
+5517 2838
+5518 2943
+5519 2955
+5521 3062
+5522 3133
+5524 3072
+5525 2881
+5526 2944
+5528 2890
+5529 3096
+5531 3266
+5532 3733
+5533 2766
+5535 2930
+5536 2756
+5537 3186
+5539 2788
+5540 2981
+5542 2788
+5543 3252
+5544 2890
+5546 3093
+5547 3157
+5548 3029
+5550 3290
+5551 2917
+5553 2992
+5554 2862
+5555 2942
+5557 3112
+5558 2917
+5560 2862
+5561 3132
+5562 2876
+5564 2910
+5565 2952
+5566 2814
+5568 2943
+5569 2999
+5571 2818
+5572 2876
+5573 3586
+5575 3002
+5576 3130
+5578 3532
+5579 3157
+5580 2817
+5582 2792
+5583 3246
+5584 2716
+5586 3204
+5587 2822
+5589 3351
+5590 3107
+5591 3048
+5593 3037
+5594 3502
+5595 3297
+5597 3290
+5598 3196
+5600 3259
+5601 2839
+5602 3924
+5604 2976
+5605 2777
+5607 3056
+5608 2914
+5609 2864
+5611 2777
+5612 2814
+5613 3511
+5615 2777
+5616 3017
+5618 3115
+5619 2792
+5620 3005
+5622 2814
+5623 2839
+5625 2864
+5626 2727
+5627 3180
+5629 2981
+5630 2977
+5631 3086
+5633 2955
+5634 2988
+5636 2988
+5637 2914
+5638 2772
+5640 3015
+5641 3077
+5642 2973
+5644 3170
+5645 3077
+5647 2973
+5648 2877
+5649 3246
+5651 2943
+5652 2992
+5654 2788
+5655 3052
+5656 2772
+5658 2814
+5659 2817
+5660 2872
+5662 2818
+5663 2801
+5665 3387
+5666 2876
+5667 3006
+5669 2788
+5670 2817
+5672 2862
+5673 2814
+5674 2814
+5676 2872
+5677 2801
+5678 3055
+5680 2838
+5681 2772
+5683 2801
+5684 2865
+5685 2931
+5687 3045
+5688 2952
+5689 2862
+5691 2982
+5692 2792
+5694 2948
+5695 2727
+5696 2885
+5698 3159
+5699 3161
+5701 3156
+5702 2806
+5703 2876
+5705 2716
+5706 2956
+5707 2716
+5709 2933
+5710 3131
+5712 2945
+5713 2919
+5714 2981
+5716 2727
+5717 2885
+5719 3035
+5720 2772
+5721 2727
+5723 2853
+5724 2843
+5725 2955
+5727 2727
+5728 2843
+5730 2845
+5731 2756
+5732 2756
+5734 2727
+5735 3152
+5736 3472
+5738 2818
+5739 2814
+5741 3105
+5742 3108
+5743 2872
+5745 3054
+5746 2727
+5748 2727
+5749 2921
+5750 2727
+5752 2943
+5753 2756
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+5753 2756
+5754 2756
+5756 2857
+5757 3025
+5759 2814
+5760 2727
+5761 2945
+5763 2756
+5764 2843
+5766 2756
+5767 3115
+5768 2777
+5770 3071
+5771 2916
+5772 2727
+5774 2788
+5775 2756
+5777 2981
+5778 2902
+5779 2838
+5781 2992
+5782 2942
+5784 2986
+5785 2772
+5786 2872
+5788 3157
+5789 2772
+5790 3007
+5792 2801
+5793 2788
+5795 2910
+5796 2772
+5797 3196
+5799 2950
+5800 2872
+5801 2788
+5803 3064
+5804 2788
+5806 2801
+5807 3006
+5808 3215
+5810 2788
+5811 2872
+5813 2772
+5814 3046
+5815 2986
+5817 2942
+5818 2788
+5819 3016
+5821 2817
+5822 2897
+5824 2878
+5825 2955
+5826 2727
+5828 2792
+5829 2745
+5831 2716
+5832 2766
+5833 3071
+5835 2806
+5836 2745
+5837 2889
+5839 3368
+5840 2986
+5842 2890
+5843 2961
+5844 2982
+5846 2716
+5847 2898
+5848 2982
+5850 2745
+5851 2836
+5853 2745
+5854 2858
+5855 2766
+5857 2745
+5858 2745
+5860 2745
+5861 3028
+5862 2806
+5864 2716
+5865 2845
+5866 2716
+5868 2876
+5869 2912
+5871 2839
+5872 2843
+5873 2946
+5875 2756
+5876 2857
+5878 2939
+5879 2916
+5880 2777
+5882 2777
+5883 2864
+5884 2792
+5886 2777
+5887 2727
+5889 2727
+5890 2885
+5891 2843
+5893 2727
+5894 2756
+5895 2727
+5897 2788
+5898 2885
+5900 2843
+5901 2727
+5902 2864
+5904 2727
+5905 2792
+5907 2864
+5908 2727
+5909 2756
+5911 2727
+5912 2756
+5913 2727
+5915 2916
+5916 2756
+5918 2727
+5919 2756
+5920 2792
+5922 2853
+5923 2727
+5925 2727
+5926 2839
+5927 2792
+5929 2857
+5930 2914
+5931 2976
+5933 3013
+5934 2766
+5936 2745
+5937 3064
+5938 2836
+5940 2961
+5941 2919
+5942 3050
+5944 2716
+5945 2716
+5947 2766
+5948 2786
+5949 2716
+5951 2786
+5952 2836
+5954 2716
+5955 2716
+5956 2716
+5958 3048
+5959 2815
+5960 2766
+5962 2786
+5963 2716
+5965 2990
+5966 2766
+5967 2716
+5969 2806
+5970 3096
+5972 2766
+5973 2716
+5974 2836
+5976 2745
+5977 2902
+5978 2960
+5980 2889
+5981 2745
+5983 2716
+5984 2945
+5985 2916
+5987 2845
+5988 2806
+5989 2716
+5991 2786
+5992 2815
+5994 2806
+5995 2716
+5996 2745
+5998 2806
+5999 2766
+6001 2716
+6002 2853
+6003 2815
+6005 2933
+6006 2786
+6007 2912
+6009 2716
+6010 2716
+6012 2716
+6013 2766
+6014 3028
+6016 2716
+6017 2716
+6019 2745
+6020 2841
+6021 2745
+6023 2836
+6024 2815
+6025 2961
+6027 2845
+6028 2745
+6030 2841
+6031 2836
+6032 2716
+6034 2766
+6035 2716
+6036 2716
+6038 2836
+6039 2716
+6041 2786
+6042 2766
+6043 2745
+6045 2716
+6046 2716
+6048 2745
+6049 2716
+6050 2716
+6052 2766
+6053 2786
+6054 2716
+6056 2845
+6057 2716
+6059 2745
+6060 2876
+6061 2766
+6063 2766
+6064 2786
+6066 2716
+6067 2716
+6068 2933
+6070 2716
+6071 2716
+6072 2716
+6074 2745
+6075 2716
+6077 2716
+6078 2786
+6079 2716
+6081 2745
+6082 2716
+6083 2853
+6085 2806
+6086 2716
+6088 2766
+6089 2845
+6090 2876
+6092 2786
+6093 2716
+6095 2836
+6096 2841
+6097 2745
+6099 2845
+6100 2874
+6101 2940
+6103 2845
+6104 2876
+6106 2766
+6107 2806
+6108 2806
+6110 2716
+6111 2841
+6113 2716
+6114 2745
+6115 2766
+6117 2716
+6118 2716
+6119 2716
+6121 2986
+6122 2853
+6124 2845
+6125 2745
+6126 3047
+6128 3093
+6129 2745
+6130 2716
+6132 2745
+6133 2716
+6135 2745
+6136 2716
+6137 2858
+6139 2716
+6140 2766
+6142 2716
+6143 2806
+6144 2745
+6146 2745
+6147 2766
+6148 2806
+6150 3020
+6151 2716
+6153 2876
+6154 2845
+6155 2766
+6157 2786
+6158 2786
+6160 2716
+6161 2745
+6162 2806
+6164 2716
+6165 2716
+6166 2745
+6168 2716
+6169 2745
+6171 2745
+6172 2745
+6173 2716
+6175 2716
+6176 2745
+6177 2716
+6179 2716
+6180 2716
+6182 2766
+6183 2716
+6184 2815
+6186 2745
+6187 2716
+6189 2745
+6190 2716
+6191 2716
+6193 2766
+6194 2944
+6195 2919
+6197 2716
+6198 2745
+6200 2845
+6201 2716
+6202 2716
+6204 2716
+6205 2716
+6207 2716
+6208 2786
+6209 2716
+6211 2716
+6212 2745
+6213 2815
+6215 2806
+6216 2716
+6218 2836
+6219 2716
+6220 2786
+6222 2836
+6223 2716
+6224 2716
+6226 2716
+6227 2786
+6229 2845
+6230 2716
+6231 2716
+6233 2916
+6234 2745
+6236 2716
+6237 2786
+6238 2745
+6240 2786
+6241 2806
+6242 2745
+6244 2716
+6245 2716
+6247 2786
+6248 2766
+6249 2853
+6251 2716
+6252 2716
+6254 2766
+6255 2766
+6256 2716
+6258 2745
+6259 2745
+6260 2716
+6262 2815
+6263 2766
+6265 2919
+6266 3047
+6267 2944
+6269 2944
+6270 2766
+6271 2766
+6273 2716
+6274 2716
+6276 2815
+6277 2716
+6278 2716
+6280 2716
+6281 2716
+6283 2845
+6284 2815
+6285 2716
+6287 2716
+6288 2766
+6289 2836
+6291 2716
+6292 2716
+6294 2716
+6295 2745
+6296 2716
+6298 2766
+6299 2716
+6301 2815
+6302 2745
+6303 2716
+6305 2745
+6306 2716
+6307 2786
+6309 2716
+6310 2858
+6312 2766
+6313 2786
+6314 2745
+6316 2745
+6317 2766
+6318 2786
+6320 2716
+6321 2716
+6323 2716
+6324 2716
+6325 2806
+6327 2716
+6328 2716
+6330 2745
+6331 2836
+6332 2716
+6334 2716
+6335 2745
+6336 2716
+6338 2716
+6339 2716
+6341 2716
+6342 2716
+6343 2786
+6345 2745
+6346 2845
+6348 2716
+6349 2745
+6350 2716
+6352 2845
+6353 2716
+6354 2716
+6356 2841
+6357 2766
+6359 2766
+6360 2806
+6361 2745
+6363 2745
+6364 2716
+6365 2766
+6367 2766
+6368 2716
+6370 2874
+6371 2858
+6372 2815
+6374 2716
+6375 2745
+6377 2716
+6378 2716
+6379 2716
+6381 2716
+6382 2786
+6383 2745
+6385 2766
+6386 2815
+6388 2716
+6389 2716
+6390 2716
+6392 2786
+6393 2745
+6395 2766
+6396 2716
+6397 2766
+6399 2716
+6400 2716
+6401 2806
+6403 2716
+6404 2716
+6406 2716
+6407 2716
+6408 2716
+6410 2716
+6411 2716
+6412 2766
+6414 2716
+6415 2716
+6417 2716
+6418 2716
+6419 2766
+6421 2874
+6422 2745
+6424 2836
+6425 2745
+6426 2716
+6428 2766
+6429 2716
+6430 2716
+6432 2716
+6433 2716
+6435 2766
+6436 2745
+6437 2786
+6439 2745
+6440 2876
+6442 2766
+6443 2766
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+6443 2766
+6444 2716
+6446 2716
+6447 2745
+6448 2716
+6450 2716
+6451 2716
+6453 2716
+6454 2716
+6455 2745
+6457 2745
+6458 2716
+6459 2716
+6461 2716
+6462 2745
+6464 2716
+6465 2745
+6466 2745
+6468 2716
+6469 2716
+6471 2716
+6472 2716
+6473 2745
+6475 2716
+6476 2716
+6477 2716
+6479 2745
+6480 2716
+6482 2716
+6483 2716
+6484 2716
+6486 2716
+6487 2745
+6489 2716
+6490 2786
+6491 2716
+6493 2745
+6494 2716
+6495 2745
+6497 2716
+6498 2716
+6500 2716
+6501 2716
+6502 2716
+6504 2745
+6505 2716
+6506 2716
+6508 2716
+6509 2745
+6511 2745
+6512 2716
+6513 2716
+6515 2745
+6516 2716
+6518 2716
+6519 2716
+6520 2766
+6522 2716
+6523 2716
+6524 2766
+6526 2716
+6527 2745
+6529 2745
+6530 2716
+6531 2716
+6533 2716
+6534 2716
+6536 2745
+6537 2716
+6538 2716
+6540 2716
+6541 2716
+6542 2716
+6544 2716
+6545 2716
+6547 2716
+6548 2716
+6549 2716
+6551 2716
+6552 2716
+6553 2716
+6555 2766
+6556 2716
+6558 2716
+6559 2716
+6560 2716
+6562 2716
+6563 2766
+6565 2716
+6566 2716
+6567 2745
+6569 2716
+6570 2716
+6571 2716
+6573 2716
+6574 2716
+6576 2716
+6577 2716
+6578 2716
+6580 2716
+6581 2716
+6583 2745
+6584 2745
+6585 2716
+6587 2745
+6588 2716
+6589 2716
+6591 2716
+6592 2716
+6594 2716
+6595 2716
+6596 2716
+6598 2716
+6599 2716
+6600 2716
+6602 2716
+6603 2716
+6605 2716
+6606 2716
+6607 2716
+6609 2716
+6610 2716
+6612 2716
+6613 2766
+6614 2716
+6616 2716
+6617 2766
+6618 2716
+6620 2716
+6621 2716
+6623 2716
+6624 2806
+6625 2716
+6627 2745
+6628 2716
+6630 2716
+6631 2716
+6632 2716
+6634 2716
+6635 2745
+6636 2716
+6638 2745
+6639 2716
+6641 2716
+6642 2716
+6643 2745
+6645 2716
+6646 2745
+6648 2745
+6649 2716
+6650 2745
+6652 2716
+6653 2716
+6654 2716
+6656 2766
+6657 2716
+6659 2716
+6660 2716
+6661 2716
+6663 2716
+6664 2716
+6665 2745
+6667 2716
+6668 2745
+6670 2745
+6671 2716
+6672 2716
+6674 2716
+6675 2716
+6677 2745
+6678 2745
+6679 2716
+6681 2716
+6682 2716
+6683 2745
+6685 2766
+6686 2766
+6688 2716
+6689 2716
+6690 2716
+6692 2716
+6693 2716
+6695 2716
+6696 2716
+6697 2745
+6699 2716
+6700 2745
+6701 2716
+6703 2716
+6704 2716
+6706 2716
+6707 2716
+6708 2716
+6710 2745
+6711 2716
+6712 2716
+6714 2716
+6715 2716
+6717 2716
+6718 2716
+6719 2836
+6721 2745
+6722 2716
+6724 2716
+6725 2716
+6726 2716
+6728 2716
+6729 2716
+6730 2766
+6732 2745
+6733 2716
+6735 2716
+6736 2716
+6737 2716
+6739 2716
+6740 2716
+6742 2745
+6743 2716
+6744 2745
+6746 2716
+6747 2716
+6748 2716
+6750 2716
+6751 2745
+6753 2716
+6754 2716
+6755 2716
+6757 2745
+6758 2745
+6759 2716
+6761 2716
+6762 2786
+6764 2745
+6765 2716
+6766 2716
+6768 2716
+6769 2716
+6771 2716
+6772 2716
+6773 2745
+6775 2745
+6776 2716
+6777 2716
+6779 2745
+6780 2745
+6782 2716
+6783 2716
+6784 2716
+6786 2745
+6787 2716
+6789 2716
+6790 2716
+6791 2716
+6793 2766
+6794 2716
+6795 2716
+6797 2716
+6798 2716
+6800 2716
+6801 2716
+6802 2716
+6804 2716
+6805 2716
+6806 2716
+6808 2716
+6809 2716
+6811 2745
+6812 2786
+6813 2786
+6815 2745
+6816 2716
+6818 2716
+6819 2716
+6820 2716
+6822 2745
+6823 2716
+6824 2745
+6826 2716
+6827 2716
+6829 2716
+6830 2716
+6831 2716
+6833 2716
+6834 2716
+6836 2716
+6837 2716
+6838 2716
+6840 2716
+6841 2745
+6842 2716
+6844 2716
+6845 2716
+6847 2745
+6848 2745
+6849 2716
+6851 2745
+6852 2716
+6853 2716
+6855 2745
+6856 2716
+6858 2716
+6859 2716
+6860 2716
+6862 2716
+6863 2716
+6865 2716
+6866 2716
+6867 2716
+6869 2716
+6870 2716
+6871 2716
+6873 2716
+6874 2716
+6876 2716
+6877 2745
+6878 2716
+6880 2745
+6881 2716
+6883 2716
+6884 2716
+6885 2716
+6887 2716
+6888 2716
+6889 2716
+6891 2716
+6892 2716
+6894 2716
+6895 2716
+6896 2716
+6898 2716
+6899 2716
+6900 2716
+6902 2716
+6903 2716
+6905 2716
+6906 2745
+6907 2716
+6909 2716
+6910 2716
+6912 2716
+6913 2716
+6914 2716
+6916 2716
+6917 2716
+6918 2716
+6920 2716
+6921 2716
+6923 2716
+6924 2745
+6925 2716
+6927 2716
+6928 2716
+6930 2716
+6931 2716
+6932 2716
+6934 2716
+6935 2716
+6936 2716
+6938 2716
+6939 2716
+6941 2716
+6942 2716
+6943 2716
+6945 2716
+6946 2716
+6947 2745
+6949 2716
+6950 2745
+6952 2716
+6953 2716
+6954 2716
+6956 2716
+6957 2716
+6959 2716
+6960 2716
+6961 2716
+6963 2716
+6964 2716
+6965 2716
+6967 2716
+6968 2745
+6970 2716
+6971 2716
+6972 2745
+6974 2716
+6975 2716
+6977 2716
+6978 2745
+6979 2716
+6981 2716
+6982 2716
+6983 2716
+6985 2716
+6986 2716
+6988 2716
+6989 2716
+6990 2716
+6992 2716
+6993 2716
+6994 2716
+6996 2716
+6997 2745
+6999 2716
+7000 2716
+7001 2745
+7003 2716
+7004 2716
+7006 2716
+7007 2716
+7008 2716
+7010 2716
+7011 2716
+7012 2716
+7014 2716
+7015 2716
+7017 2716
+7018 2716
+7019 2716
+7021 2716
+7022 2716
+7024 2716
+7025 2716
+7026 2716
+7028 2716
+7029 2716
+7030 2716
+7032 2745
+7033 2716
+7035 2716
+7036 2716
+7037 2716
+7039 2745
+7040 2716
+7041 2716
+7043 2716
+7044 2716
+7046 2716
+7047 2716
+7048 2716
+7050 2716
+7051 2716
+7053 2716
+7054 2716
+7055 2716
+7057 2716
+7058 2745
+7059 2745
+7061 2716
+7062 2716
+7064 2716
+7065 2716
+7066 2716
+7068 2716
+7069 2716
+7071 2716
+7072 2716
+7073 2716
+7075 2716
+7076 2716
+7077 2716
+7079 2716
+7080 2716
+7082 2716
+7083 2716
+7084 2745
+7086 2716
+7087 2716
+7088 2716
+7090 2745
+7091 2716
+7093 2716
+7094 2716
+7095 2716
+7097 2716
+7098 2716
+7100 2716
+7101 2716
+7102 2716
+7104 2716
+7105 2716
+7106 2716
+7108 2716
+7109 2716
+7111 2716
+7112 2745
+7113 2716
+7115 2716
+7116 2716
+7118 2716
+7119 2716
+7120 2716
+7122 2716
+7123 2716
+7124 2745
+7126 2716
+7127 2716
+7129 2716
+7130 2716
+7131 2716
+7133 2716
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+7133 2716
+7134 2716
+7135 2716
+7137 2716
+7138 2716
+7140 2716
+7141 2716
+7142 2716
+7144 2716
+7145 2716
+7147 2716
+7148 2745
+7149 2745
+7151 2745
+7152 2716
+7153 2716
+7155 2716
+7156 2716
+7158 2716
+7159 2716
+7160 2716
+7162 2716
+7163 2716
+7165 2716
+7166 2716
+7167 2716
+7169 2716
+7170 2716
+7171 2716
+7173 2716
+7174 2716
+7176 2716
+7177 2716
+7178 2716
+7180 2716
+7181 2716
+7182 2716
+7184 2716
+7185 2716
+7187 2716
+7188 2716
+7189 2716
+7191 2716
+7192 2716
+7194 2716
+7195 2716
+7196 2716
+7198 2716
+7199 2716
+7200 2716
+7202 2716
+7203 2716
+7205 2716
+7206 2716
+7207 2716
+7209 2716
+7210 2716
+7212 2716
+7213 2716
+7214 2745
+7216 2716
+7217 2716
+7218 2716
+7220 2716
+7221 2716
+7223 2716
+7224 2716
+7225 2716
+7227 2716
+7228 2716
+7229 2716
+7231 2716
+7232 2716
+7234 2716
+7235 2716
+7236 2716
+7238 2716
+7239 2716
+7241 2716
+7242 2716
+7243 2716
+7245 2716
+7246 2716
+7247 2716
+7249 2716
+7250 2716
+7252 2716
+7253 2716
+7254 2716
+7256 2716
+7257 2716
+7259 2716
+7260 2716
+7261 2716
+7263 2716
+7264 2716
+7265 2716
+7267 2716
+7268 2716
+7270 2716
+7271 2716
+7272 2716
+7274 2716
+7275 2716
+7276 2716
+7278 2716
+7279 2716
+7281 2716
+7282 2716
+7283 2716
+7285 2716
+7286 2716
+7288 2716
+7289 2716
+7290 2716
+7292 2716
+7293 2716
+7294 2716
+7296 2716
+7297 2716
+7299 2766
+7300 2716
+7301 2716
+7303 2716
+7304 2716
+7306 2716
+7307 2716
+7308 2716
+7310 2716
+7311 2716
+7312 2716
+7314 2716
+7315 2716
+7317 2716
+7318 2716
+7319 2716
+7321 2716
+7322 2716
+7323 2716
+7325 2716
+7326 2716
+7328 2716
+7329 2716
+7330 2716
+7332 2716
+7333 2716
+7335 2716
+7336 2716
+7337 2716
+7339 2716
+7340 2716
+7341 2716
+7343 2716
+7344 2716
+7346 2716
+7347 2716
+7348 2716
+7350 2716
+7351 2716
+7353 2716
+7354 2716
+7355 2716
+7357 2716
+7358 2716
+7359 2716
+7361 2716
+7362 2716
+7364 2716
+7365 2716
+7366 2716
+7368 2716
+7369 2716
+7370 2716
+7372 2716
+7373 2716
+7375 2716
+7376 2716
+7377 2716
+7379 2716
+7380 2716
+7382 2716
+7383 2716
+7384 2716
+7386 2716
+7387 2716
+7388 2716
+7390 2716
+7391 2716
+7393 2716
+7394 2716
+7395 2716
+7397 2716
+7398 2716
+7400 2716
+7401 2716
+7402 2716
+7404 2716
+7405 2716
+7406 2716
+7408 2716
+7409 2716
+7411 2716
+7412 2716
+7413 2716
+7415 2716
+7416 2716
+7417 2716
+7419 2716
+7420 2716
+7422 2716
+7423 2716
+7424 2716
+7426 2716
+7427 2716
+7429 2716
+7430 2716
+7431 2716
+7433 2716
+7434 2716
+7435 2716
+7437 2716
+7438 2716
+7440 2716
+7441 2716
+7442 2716
+7444 2716
+7445 2716
+7447 2716
+7448 2716
+7449 2716
+7451 2716
+7452 2716
+7453 2716
+7455 2716
+7456 2716
+7458 2716
+7459 2716
+7460 2716
+7462 2716
+7463 2716
+7464 2716
+7466 2716
+7467 2716
+7469 2716
+7470 2716
+7471 2716
+7473 2716
+7474 2716
+7476 2716
+7477 2716
+7478 2716
+7480 2716
+7481 2716
+7482 2716
+7484 2716
+7485 2716
+7487 2716
+7488 2716
+7489 2716
+7491 2716
+7492 2716
+7494 2716
+7495 2716
+7496 2716
+7498 2716
+7499 2716
+7500 2716
+7502 2716
+7503 2716
+7505 2716
+7506 2716
+7507 2716
+7509 2716
+7510 2716
+7512 2716
+7513 2716
+7514 2716
+7516 2716
+7517 2716
+7518 2716
+7520 2716
+7521 2716
+7523 2716
+7524 2716
+7525 2716
+7527 2716
+7528 2716
+7529 2716
+7531 2716
+7532 2716
+7534 2716
+7535 2716
+7536 2716
+7538 2716
+7539 2716
+7541 2716
+7542 2716
+7543 2716
+7545 2716
+7546 2716
+7547 2716
+7549 2716
+7550 2716
+7552 2716
+7553 2716
+7554 2716
+7556 2716
+7557 2716
+7559 2716
+7560 2716
+7561 2716
+7563 2716
+7564 2716
+7565 2716
+7567 2716
+7568 2716
+7570 2716
+7571 2716
+7572 2716
+7574 2716
+7575 2716
+7576 2716
+7578 2716
+7579 2716
+7581 2745
+7582 2745
+7583 2745
+7585 2716
+7586 2716
+7588 2716
+7589 2716
+7590 2716
+7592 2716
+7593 2716
+7594 2716
+7596 2716
+7597 2716
+7599 2716
+7600 2716
+7601 2716
+7603 2716
+7604 2716
+7606 2716
+7607 2716
+7608 2716
+7610 2716
+7611 2716
+7612 2716
+7614 2716
+7615 2716
+7617 2716
+7618 2716
+7619 2716
+7621 2716
+7622 2716
+7623 2716
+7625 2716
+7626 2716
+7628 2716
+7629 2716
+7630 2716
+7632 2716
+7633 2716
+7635 2716
+7636 2716
+7637 2716
+7639 2716
+7640 2716
+7641 2716
+7643 2716
+7644 2716
+7646 2716
+7647 2716
+7648 2716
+7650 2716
+7651 2716
+7653 2716
+7654 2716
+7655 2716
+7657 2716
+7658 2716
+7659 2716
+7661 2716
+7662 2716
+7664 2716
+7665 2716
+7666 2716
+7668 2716
+7669 2716
+7670 2716
+7672 2716
+7673 2716
+7675 2716
+7676 2716
+7677 2716
+7679 2716
+7680 2716
+7682 2716
+7683 2716
+7684 2716
+7686 2716
+7687 2716
+7688 2716
+7690 2716
+7691 2716
+7693 2716
+7694 2716
+7695 2716
+7697 2716
+7698 2716
+7700 2716
+7701 2716
+7702 2716
+7704 2716
+7705 2716
+7706 2716
+7708 2716
+7709 2716
+7711 2716
+7712 2716
+7713 2716
+7715 2716
+7716 2716
+7717 2716
+7719 2716
+7720 2716
+7722 2716
+7723 2716
+7724 2716
+7726 2716
+7727 2716
+7729 2716
+7730 2716
+7731 2716
+7733 2716
+7734 2716
+7735 2716
+7737 2716
+7738 2716
+7740 2716
+7741 2716
+7742 2716
+7744 2716
+7745 2716
+7747 2716
+7748 2716
+7749 2716
+7751 2716
+7752 2716
+7753 2716
+7755 2716
+7756 2716
+7758 2716
+7759 2716
+7760 2716
+7762 2716
+7763 2716
+7764 2716
+7766 2716
+7767 2716
+7769 2716
+7770 2716
+7771 2716
+7773 2716
+7774 2716
+7776 2716
+7777 2716
+7778 2716
+7780 2716
+7781 2716
+7782 2716
+7784 2716
+7785 2716
+7787 2716
+7788 2716
+7789 2716
+7791 2716
+7792 2716
+7794 2716
+7795 2716
+7796 2716
+7798 2716
+7799 2716
+7800 2716
+7802 2716
+7803 2716
+7805 2716
+7806 2716
+7807 2716
+7809 2716
+7810 2716
+7811 2716
+7813 2716
+7814 2716
+7816 2716
+7817 2716
+7818 2716
+7820 2716
+7821 2716
+7823 2716
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+7823 2716
+7824 2716
+7825 2716
+7827 2716
+7828 2716
+7829 2716
+7831 2716
+7832 2716
+7834 2716
+7835 2716
+7836 2716
+7838 2716
+7839 2716
+7841 2716
+7842 2716
+7843 2716
+7845 2716
+7846 2716
+7847 2716
+7849 2716
+7850 2716
+7852 2716
+7853 2716
+7854 2716
+7856 2716
+7857 2716
+7858 2716
+7860 2716
+7861 2716
+7863 2716
+7864 2716
+7865 2716
+7867 2716
+7868 2716
+7870 2716
+7871 2716
+7872 2716
+7874 2716
+7875 2716
+7876 2716
+7878 2716
+7879 2716
+7881 2716
+7882 2716
+7883 2716
+7885 2716
+7886 2716
+7888 2716
+7889 2716
+7890 2716
+7892 2716
+7893 2716
+7894 2716
+7896 2716
+7897 2716
+7899 2716
+7900 2716
+7901 2716
+7903 2716
+7904 2716
+7905 2716
+7907 2716
+7908 2716
+7910 2716
+7911 2716
+7912 2716
+7914 2716
+7915 2716
+7917 2716
+7918 2716
+7919 2716
+7921 2716
+7922 2716
+7923 2716
+7925 2716
+7926 2716
+7928 2716
+7929 2716
+7930 2716
+7932 2716
+7933 2716
+7935 2716
+7936 2716
+7937 2716
+7939 2716
+7940 2716
+7941 2716
+7943 2716
+7944 2716
+7946 2716
+7947 2716
+7948 2716
+7950 2716
+7951 2716
+7952 2716
+7954 2716
+7955 2716
+7957 2716
+7958 2716
+7959 2716
+7961 2716
+7962 2716
+7964 2716
+7965 2716
+7966 2716
+7968 2716
+7969 2716
+7970 2716
+7972 2716
+7973 2716
+7975 2716
+7976 2716
+7977 2716
+7979 2716
+7980 2716
+7982 2716
+7983 2716
+7984 2716
+7986 2716
+7987 2716
+7988 2716
+7990 2716
+7991 2716
+7993 2716
+7994 2716
+7995 2716
+7997 2716
+7998 2716
+7999 2716
+8001 2716
+8002 2716
+8004 2716
+8005 2716
+8006 2716
+8008 2716
+8009 2716
+8011 2716
+8012 2716
+8013 2716
+8015 2716
+8016 2716
+8017 2716
+8019 2716
+8020 2716
+8022 2716
+8023 2716
+8024 2716
+8026 2716
+8027 2716
+8029 2716
+8030 2716
+8031 2716
+8033 2716
+8034 2716
+8035 2716
+8037 2716
+8038 2716
+8040 2716
+8041 2716
+8042 2716
+8044 2716
+8045 2716
+8046 2716
+8048 2716
+8049 2716
+8051 2716
+8052 2716
+8053 2716
+8055 2716
+8056 2716
+8058 2716
+8059 2716
+8060 2716
+8062 2716
+8063 2716
+8064 2716
+8066 2716
+8067 2716
+8069 2716
+8070 2716
+8071 2716
+8073 2716
+8074 2716
+8076 2716
+8077 2716
+8078 2716
+8080 2716
+8081 2716
+8082 2716
+8084 2716
+8085 2716
+8087 2716
+8088 2716
+8089 2716
+8091 2716
+8092 2716
+8093 2716
+8095 2716
+8096 2716
+8098 2716
+8099 2716
+8100 2716
+8102 2716
+8103 2716
+8105 2716
+8106 2716
+8107 2716
+8109 2716
+8110 2716
+8111 2716
+8113 2716
+8114 2716
+8116 2716
+8117 2716
+8118 2716
+8120 2716
+8121 2716
+8123 2716
+8124 2716
+8125 2716
+8127 2716
+8128 2716
+8129 2716
+8131 2716
+8132 2716
+8134 2716
+8135 2716
+8136 2716
+8138 2716
+8139 2716
+8140 2716
+8142 2716
+8143 2716
+8145 2716
+8146 2716
+8147 2716
+8149 2716
+8150 2716
+8152 2716
+8153 2716
+8154 2716
+8156 2716
+8157 2716
+8158 2716
+8160 2716
+8161 2716
+8163 2716
+8164 2716
+8165 2716
+8167 2716
+8168 2716
+8170 2716
+8171 2716
+8172 2716
+8174 2716
+8175 2716
+8176 2716
+8178 2716
+8179 2716
+8181 2716
+8182 2716
+8183 2716
+8185 2716
+8186 2716
+8187 2716
+8189 2716
+8190 2716
+8192 2716
+8193 2716
+8194 2716
+8196 2716
+8197 2716
+8199 2716
+8200 2716
+8201 2716
+8203 2716
+8204 2716
+8205 2716
+8207 2716
+8208 2716
+8210 2716
+8211 2716
+8212 2716
+8214 2716
+8215 2716
+8217 2716
+8218 2716
+8219 2716
+8221 2716
+8222 2716
+8223 2716
+8225 2716
+8226 2716
+8228 2716
+8229 2716
+8230 2716
+8232 2716
+8233 2716
+8234 2716
+8236 2716
+8237 2716
+8239 2716
+8240 2716
+8241 2716
+8243 2716
+8244 2716
+8246 2716
+8247 2716
+8248 2716
+8250 2716
+8251 2716
+8252 2716
+8254 2716
+8255 2716
+8257 2716
+8258 2716
+8259 2716
+8261 2716
+8262 2716
+8264 2716
+8265 2716
+8266 2716
+8268 2716
+8269 2716
+8270 2716
+8272 2716
+8273 2716
+8275 2716
+8276 2716
+8277 2716
+8279 2716
+8280 2716
+8281 2716
+8283 2716
+8284 2716
+8286 2716
+8287 2716
+8288 2716
+8290 2716
+8291 2716
+8293 2716
+8294 2716
+8295 2716
+8297 2716
+8298 2716
+8299 2716
+8301 2716
+8302 2716
+8304 2716
+8305 2716
+8306 2716
+8308 2716
+8309 2716
+8311 2716
+8312 2716
+8313 2716
+8315 2716
+8316 2716
+8317 2716
+8319 2716
+8320 2716
+8322 2716
+8323 2716
+8324 2716
+8326 2716
+8327 2716
+8328 2716
+8330 2716
+8331 2716
+8333 2716
+8334 2716
+8335 2716
+8337 2716
+8338 2716
+8340 2716
+8341 2716
+8342 2716
+8344 2716
+8345 2716
+8346 2716
+8348 2716
+8349 2716
+8351 2716
+8352 2716
+8353 2716
+8355 2716
+8356 2716
+8358 2716
+8359 2716
+8360 2716
+8362 2716
+8363 2716
+8364 2716
+8366 2716
+8367 2716
+8369 2716
+8370 2716
+8371 2716
+8373 2716
+8374 2716
+8376 2716
+8377 2716
+8378 2716
+8380 2716
+8381 2716
+8382 2716
+8384 2716
+8385 2716
+8387 2716
+8388 2716
+8389 2716
+8391 2716
+8392 2716
+8393 2716
+8395 2716
+8396 2716
+8398 2716
+8399 2716
+8400 2716
+8402 2716
+8403 2716
+8405 2716
+8406 2716
+8407 2716
+8409 2716
+8410 2716
+8411 2716
+8413 2716
+8414 2716
+8416 2716
+8417 2716
+8418 2716
+8420 2716
+8421 2716
+8423 2716
+8424 2716
+8425 2716
+8427 2716
+8428 2716
+8429 2716
+8431 2716
+8432 2716
+8434 2716
+8435 2716
+8436 2716
+8438 2716
+8439 2716
+8440 2716
+8442 2716
+8443 2716
+8445 2716
+8446 2716
+8447 2716
+8449 2716
+8450 2716
+8452 2716
+8453 2716
+8454 2716
+8456 2716
+8457 2716
+8458 2716
+8460 2716
+8461 2716
+8463 2716
+8464 2716
+8465 2716
+8467 2716
+8468 2716
+8470 2716
+8471 2716
+8472 2716
+8474 2716
+8475 2716
+8476 2716
+8478 2716
+8479 2716
+8481 2716
+8482 2716
+8483 2716
+8485 2716
+8486 2716
+8487 2716
+8489 2716
+8490 2716
+8492 2716
+8493 2716
+8494 2716
+8496 2716
+8497 2716
+8499 2716
+8500 2716
+8501 2716
+8503 2716
+8504 2716
+8505 2716
+8507 2716
+8508 2716
+8510 2716
+8511 2716
+8512 2716
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 119
+8512 2716
+8514 2716
+8515 2716
+8517 2716
+8518 2716
+8519 2716
+8521 2716
+8522 2716
+8523 2716
+8525 2716
+8526 2716
+8528 2716
+8529 2716
+8530 2716
+8532 2716
+8533 2716
+8534 2716
+8536 2716
+8537 2716
+8539 2716
+8540 2716
+8541 2716
+8543 2716
+8544 2716
+8546 2716
+8547 2716
+8548 2716
+8550 2716
+8551 2716
+8552 2716
+8554 2716
+8555 2716
+8557 2716
+8558 2716
+8559 2716
+8561 2716
+8562 2716
+8564 2716
+8565 2716
+8566 2716
+8568 2716
+8569 2716
+8570 2716
+8572 2716
+8573 2716
+8575 2716
+8576 2716
+8577 2716
+8579 2716
+8580 2716
+8581 2716
+8583 2716
+8584 2716
+8586 2716
+8587 2716
+8588 2716
+8590 2716
+8591 2716
+8593 2716
+8594 2716
+8595 2716
+8597 2716
+8598 2716
+8599 2716
+8601 2716
+8602 2716
+8604 2716
+8605 2716
+8606 2716
+8608 2716
+8609 2716
+8611 2716
+8612 2716
+8613 2716
+8615 2716
+8616 2716
+8617 2716
+8619 2716
+8620 2716
+8622 2716
+8623 2716
+8624 2716
+8626 2716
+8627 2716
+8628 2716
+8630 2716
+8631 2716
+8633 2716
+8634 2716
+8635 2716
+8637 2716
+8638 2716
+8640 2716
+8641 2716
+8642 2716
+8644 2716
+8645 2716
+8646 2716
+8648 2716
+8649 2716
+8651 2716
+8652 2716
+8653 2716
+8655 2716
+8656 2716
+8658 2716
+8659 2716
+8660 2716
+8662 2716
+8663 2716
+8664 2716
+8666 2716
+8667 2716
+8669 2716
+8670 2716
+8671 2716
+8673 2716
+8674 2716
+8675 2716
+119 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/ChangeLog b/gsl-1.9/doc/ChangeLog
new file mode 100644
index 0000000..09cd473
--- /dev/null
+++ b/gsl-1.9/doc/ChangeLog
@@ -0,0 +1,62 @@
+2006-02-09 Brian Gough <bjg@network-theory.co.uk>
+
+ * Makefile.am: disable pdf, as it would require maintaining a
+ separate set of figure files.
+
+Mon Apr 7 12:54:30 MDT 2003 G. Jungman
+
+ * specfunc-gamma.texi: added entry for gsl_sf_gamma_inc_(),
+ gsl_sf_gamma_inc()
+
+
+2000-10-26 Mark Galassi <rosalia@lanl.gov>
+
+ * gsl-ref.texi: small changes to update the author list.
+
+Mon Oct 23 21:49:25 2000 Brian Gough <bjg@network-theory.co.uk>
+
+ * usage.texi: added info on portability functions
+
+Sat Jul 15 23:52:59 2000 Brian Gough <bjg@network-theory.co.uk>
+
+ * Makefile.am (EXTRA_DIST): added gsl-design.texi to the
+ distributed files
+
+Thu May 18 12:11:24 2000 Brian Gough <bjg@network-theory.co.uk>
+
+ * gsl-ref.texi (Preliminaries): changed the phrase "collection of
+ routines for numerical analysis" to "... numerical computing", as
+ on the web page.
+
+Wed Apr 26 17:46:48 2000 Brian Gough <bjg@network-theory.co.uk>
+
+ * math.texi: added a chapter on the elementary functions and
+ constants in gsl_math.h
+
+Tue Apr 4 21:45:27 2000 Brian Gough <bjg@network-theory.co.uk>
+
+ * upgraded texinfo.tex to texinfo-4.0
+
+2000-04-01 Mark Galassi <rosalia@lanl.gov>
+
+ * roots.texi (Providing the function to solve): fixed a typo,
+ THANKS Dave Morrison.
+
+1999-12-03 Mark Galassi <rosalia@lanl.gov>
+
+ * gsl-ref.texi, gsl-design.texi: updated my email address.
+
+ * gsl-design.texi: minor changes.
+
+Tue Feb 16 11:36:03 1999 Brian Gough <bjg@netsci.freeserve.co.uk>
+
+ * statistics.texi: removed the multiple descriptions of double,
+ int versions of the functions. Now we just describe the double
+ versions and note the existence of the corresponding versions for
+ other types.
+
+ * ChangeLog: added a changelog file for the documentation,
+ although it is not required by the GNU Coding standards. I use the
+ Changelogs to keep track of pending changes that I need to commit
+ to repository.
+
diff --git a/gsl-1.9/doc/Makefile.am b/gsl-1.9/doc/Makefile.am
new file mode 100644
index 0000000..12095a5
--- /dev/null
+++ b/gsl-1.9/doc/Makefile.am
@@ -0,0 +1,21 @@
+## Process this file with automake to produce Makefile.in
+
+info_TEXINFOS = gsl-ref.texi
+noinst_TEXINFOS = gsl-design.texi
+gsl_ref_TEXINFOS = err.texi cblas.texi blas.texi min.texi fft.texi rng.texi randist.texi roots.texi statistics.texi specfunc.texi specfunc-airy.texi specfunc-bessel.texi specfunc-clausen.texi specfunc-coulomb.texi specfunc-coupling.texi specfunc-dawson.texi specfunc-debye.texi specfunc-dilog.texi specfunc-elementary.texi specfunc-ellint.texi specfunc-elljac.texi specfunc-erf.texi specfunc-exp.texi specfunc-expint.texi specfunc-fermi-dirac.texi specfunc-gamma.texi specfunc-gegenbauer.texi specfunc-hyperg.texi specfunc-lambert.texi specfunc-laguerre.texi specfunc-legendre.texi specfunc-log.texi specfunc-mathieu.texi specfunc-pow-int.texi specfunc-psi.texi specfunc-synchrotron.texi specfunc-transport.texi specfunc-trig.texi specfunc-zeta.texi siman.texi vectors.texi debug.texi histogram.texi ode-initval.texi integration.texi ieee754.texi montecarlo.texi sum.texi intro.texi usage.texi dwt.texi dht.texi interp.texi poly.texi linalg.texi eigen.texi multiroots.texi sort.texi permutation.texi combination.texi complex.texi math.texi fitting.texi multifit.texi const.texi ntuple.texi diff.texi qrng.texi cheb.texi multimin.texi gpl.texi fdl.texi autoconf.texi freemanuals.texi bspline.texi
+
+man_MANS = gsl.3 gsl-config.1 gsl-randist.1 gsl-histogram.1
+
+figures = multimin.eps siman-test.eps siman-energy.eps 12-cities.eps initial-route.eps final-route.eps fft-complex-radix2-f.eps fft-complex-radix2-t.eps fft-complex-radix2.eps fft-real-mixedradix.eps roots-bisection.eps roots-false-position.eps roots-newtons-method.eps roots-secant-method.eps histogram.eps histogram2d.eps min-interval.eps fit-wlinear.eps fit-wlinear2.eps fit-exp.eps ntuple.eps qrng.eps cheb.eps vdp.eps interp2.eps rand-beta.tex rand-binomial.tex rand-cauchy.tex rand-chisq.tex rand-erlang.tex rand-exponential.tex rand-fdist.tex rand-flat.tex rand-gamma.tex rand-gaussian.tex rand-geometric.tex rand-laplace.tex rand-logarithmic.tex rand-logistic.tex rand-lognormal.tex rand-pareto.tex rand-poisson.tex rand-hypergeometric.tex rand-nbinomial.tex rand-pascal.tex rand-bivariate-gaussian.tex rand-rayleigh.tex rand-rayleigh-tail.tex rand-tdist.tex rand-weibull.tex random-walk.tex randplots.gnp rand-exppow.tex rand-levy.tex rand-levyskew.tex rand-gumbel.tex rand-bernoulli.tex rand-gaussian-tail.tex rand-gumbel1.tex rand-gumbel2.tex landau.dat rand-landau.tex dwt-orig.eps dwt-samp.eps interpp2.eps bspline.eps
+
+examples_src = examples/blas.c examples/block.c examples/cblas.c examples/cdf.c examples/cheb.c examples/combination.c examples/const.c examples/demo_fn.c examples/diff.c examples/eigen.c examples/fft.c examples/fftmr.c examples/fftreal.c examples/fitting.c examples/fitting2.c examples/fitting3.c examples/histogram.c examples/histogram2d.c examples/ieee.c examples/ieeeround.c examples/integration.c examples/interp.c examples/intro.c examples/linalglu.c examples/matrix.c examples/matrixw.c examples/min.c examples/monte.c examples/ntupler.c examples/ntuplew.c examples/ode-initval.c examples/odefixed.c examples/permseq.c examples/permshuffle.c examples/polyroots.c examples/qrng.c examples/randpoisson.c examples/randwalk.c examples/rng.c examples/rngunif.c examples/rootnewt.c examples/roots.c examples/siman.c examples/sortsmall.c examples/specfun.c examples/specfun_e.c examples/stat.c examples/statsort.c examples/sum.c examples/vector.c examples/vectorr.c examples/vectorview.c examples/vectorw.c examples/demo_fn.h examples/dwt.c examples/expfit.c examples/nlfit.c examples/interpp.c examples/eigen_nonsymm.c examples/bspline.c
+
+examples_out = examples/blas.out examples/block.out examples/cblas.out examples/cdf.out examples/combination.out examples/const.out examples/diff.out examples/integration.out examples/intro.out examples/linalglu.out examples/min.out examples/polyroots.out examples/randpoisson.2.out examples/randpoisson.out examples/rng.out examples/rngunif.2.out examples/rngunif.out examples/sortsmall.out examples/specfun.out examples/specfun_e.out examples/stat.out examples/statsort.out examples/sum.out examples/vectorview.out examples/ecg.dat examples/dwt.dat
+
+noinst_DATA = $(examples_src) $(examples_out) $(figures)
+
+EXTRA_DIST = $(man_MANS) $(noinst_DATA) gsl-design.texi fftalgorithms.tex fftalgorithms.bib algorithm.sty algorithmic.sty calc.sty
+
+# pdf disabled, use postscript and ps2pdf
+.PHONY: pdf
+pdf:
diff --git a/gsl-1.9/doc/Makefile.in b/gsl-1.9/doc/Makefile.in
new file mode 100644
index 0000000..2c470b7
--- /dev/null
+++ b/gsl-1.9/doc/Makefile.in
@@ -0,0 +1,674 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = doc
+DIST_COMMON = $(gsl_ref_TEXINFOS) $(srcdir)/Makefile.am \
+ $(srcdir)/Makefile.in $(srcdir)/stamp-vti \
+ $(srcdir)/version-ref.texi ChangeLog mdate-sh texinfo.tex
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+depcomp =
+am__depfiles_maybe =
+SOURCES =
+DIST_SOURCES =
+INFO_DEPS = $(srcdir)/gsl-ref.info
+am__TEXINFO_TEX_DIR = $(srcdir)
+DVIS = gsl-ref.dvi
+PDFS = gsl-ref.pdf
+PSS = gsl-ref.ps
+HTMLS = gsl-ref.html
+TEXINFOS = gsl-ref.texi
+TEXI2DVI = texi2dvi
+TEXI2PDF = $(TEXI2DVI) --pdf --batch
+MAKEINFOHTML = $(MAKEINFO) --html
+AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS)
+DVIPS = dvips
+am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \
+ "$(DESTDIR)$(man3dir)"
+man1dir = $(mandir)/man1
+man3dir = $(mandir)/man3
+NROFF = nroff
+MANS = $(man_MANS)
+DATA = $(noinst_DATA)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMTAR = @AMTAR@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+ECHO = @ECHO@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GSL_CFLAGS = @GSL_CFLAGS@
+GSL_LIBS = @GSL_LIBS@
+GSL_LT_CBLAS_VERSION = @GSL_LT_CBLAS_VERSION@
+GSL_LT_VERSION = @GSL_LT_VERSION@
+HAVE_AIX_IEEE_INTERFACE = @HAVE_AIX_IEEE_INTERFACE@
+HAVE_DARWIN86_IEEE_INTERFACE = @HAVE_DARWIN86_IEEE_INTERFACE@
+HAVE_DARWIN_IEEE_INTERFACE = @HAVE_DARWIN_IEEE_INTERFACE@
+HAVE_EXTENDED_PRECISION_REGISTERS = @HAVE_EXTENDED_PRECISION_REGISTERS@
+HAVE_FREEBSD_IEEE_INTERFACE = @HAVE_FREEBSD_IEEE_INTERFACE@
+HAVE_GNUM68K_IEEE_INTERFACE = @HAVE_GNUM68K_IEEE_INTERFACE@
+HAVE_GNUPPC_IEEE_INTERFACE = @HAVE_GNUPPC_IEEE_INTERFACE@
+HAVE_GNUSPARC_IEEE_INTERFACE = @HAVE_GNUSPARC_IEEE_INTERFACE@
+HAVE_GNUX86_IEEE_INTERFACE = @HAVE_GNUX86_IEEE_INTERFACE@
+HAVE_HPUX11_IEEE_INTERFACE = @HAVE_HPUX11_IEEE_INTERFACE@
+HAVE_HPUX_IEEE_INTERFACE = @HAVE_HPUX_IEEE_INTERFACE@
+HAVE_IEEE_COMPARISONS = @HAVE_IEEE_COMPARISONS@
+HAVE_IEEE_DENORMALS = @HAVE_IEEE_DENORMALS@
+HAVE_INLINE = @HAVE_INLINE@
+HAVE_IRIX_IEEE_INTERFACE = @HAVE_IRIX_IEEE_INTERFACE@
+HAVE_NETBSD_IEEE_INTERFACE = @HAVE_NETBSD_IEEE_INTERFACE@
+HAVE_OPENBSD_IEEE_INTERFACE = @HAVE_OPENBSD_IEEE_INTERFACE@
+HAVE_OS2EMX_IEEE_INTERFACE = @HAVE_OS2EMX_IEEE_INTERFACE@
+HAVE_PRINTF_LONGDOUBLE = @HAVE_PRINTF_LONGDOUBLE@
+HAVE_SOLARIS_IEEE_INTERFACE = @HAVE_SOLARIS_IEEE_INTERFACE@
+HAVE_SUNOS4_IEEE_INTERFACE = @HAVE_SUNOS4_IEEE_INTERFACE@
+HAVE_TRU64_IEEE_INTERFACE = @HAVE_TRU64_IEEE_INTERFACE@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LN_S = @LN_S@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+RELEASED = @RELEASED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+VERSION = @VERSION@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__leading_dot = @am__leading_dot@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+info_TEXINFOS = gsl-ref.texi
+noinst_TEXINFOS = gsl-design.texi
+gsl_ref_TEXINFOS = err.texi cblas.texi blas.texi min.texi fft.texi \
+ rng.texi randist.texi roots.texi statistics.texi specfunc.texi \
+ specfunc-airy.texi specfunc-bessel.texi specfunc-clausen.texi \
+ specfunc-coulomb.texi specfunc-coupling.texi \
+ specfunc-dawson.texi specfunc-debye.texi specfunc-dilog.texi \
+ specfunc-elementary.texi specfunc-ellint.texi \
+ specfunc-elljac.texi specfunc-erf.texi specfunc-exp.texi \
+ specfunc-expint.texi specfunc-fermi-dirac.texi \
+ specfunc-gamma.texi specfunc-gegenbauer.texi \
+ specfunc-hyperg.texi specfunc-lambert.texi \
+ specfunc-laguerre.texi specfunc-legendre.texi \
+ specfunc-log.texi specfunc-mathieu.texi specfunc-pow-int.texi \
+ specfunc-psi.texi specfunc-synchrotron.texi \
+ specfunc-transport.texi specfunc-trig.texi specfunc-zeta.texi \
+ siman.texi vectors.texi debug.texi histogram.texi \
+ ode-initval.texi integration.texi ieee754.texi montecarlo.texi \
+ sum.texi intro.texi usage.texi dwt.texi dht.texi interp.texi \
+ poly.texi linalg.texi eigen.texi multiroots.texi sort.texi \
+ permutation.texi combination.texi complex.texi math.texi \
+ fitting.texi multifit.texi const.texi ntuple.texi diff.texi \
+ qrng.texi cheb.texi multimin.texi gpl.texi fdl.texi \
+ autoconf.texi freemanuals.texi bspline.texi
+man_MANS = gsl.3 gsl-config.1 gsl-randist.1 gsl-histogram.1
+figures = multimin.eps siman-test.eps siman-energy.eps 12-cities.eps \
+ initial-route.eps final-route.eps fft-complex-radix2-f.eps \
+ fft-complex-radix2-t.eps fft-complex-radix2.eps \
+ fft-real-mixedradix.eps roots-bisection.eps \
+ roots-false-position.eps roots-newtons-method.eps \
+ roots-secant-method.eps histogram.eps histogram2d.eps \
+ min-interval.eps fit-wlinear.eps fit-wlinear2.eps fit-exp.eps \
+ ntuple.eps qrng.eps cheb.eps vdp.eps interp2.eps rand-beta.tex \
+ rand-binomial.tex rand-cauchy.tex rand-chisq.tex \
+ rand-erlang.tex rand-exponential.tex rand-fdist.tex \
+ rand-flat.tex rand-gamma.tex rand-gaussian.tex \
+ rand-geometric.tex rand-laplace.tex rand-logarithmic.tex \
+ rand-logistic.tex rand-lognormal.tex rand-pareto.tex \
+ rand-poisson.tex rand-hypergeometric.tex rand-nbinomial.tex \
+ rand-pascal.tex rand-bivariate-gaussian.tex rand-rayleigh.tex \
+ rand-rayleigh-tail.tex rand-tdist.tex rand-weibull.tex \
+ random-walk.tex randplots.gnp rand-exppow.tex rand-levy.tex \
+ rand-levyskew.tex rand-gumbel.tex rand-bernoulli.tex \
+ rand-gaussian-tail.tex rand-gumbel1.tex rand-gumbel2.tex \
+ landau.dat rand-landau.tex dwt-orig.eps dwt-samp.eps \
+ interpp2.eps bspline.eps
+examples_src = examples/blas.c examples/block.c examples/cblas.c \
+ examples/cdf.c examples/cheb.c examples/combination.c \
+ examples/const.c examples/demo_fn.c examples/diff.c \
+ examples/eigen.c examples/fft.c examples/fftmr.c \
+ examples/fftreal.c examples/fitting.c examples/fitting2.c \
+ examples/fitting3.c examples/histogram.c \
+ examples/histogram2d.c examples/ieee.c examples/ieeeround.c \
+ examples/integration.c examples/interp.c examples/intro.c \
+ examples/linalglu.c examples/matrix.c examples/matrixw.c \
+ examples/min.c examples/monte.c examples/ntupler.c \
+ examples/ntuplew.c examples/ode-initval.c examples/odefixed.c \
+ examples/permseq.c examples/permshuffle.c examples/polyroots.c \
+ examples/qrng.c examples/randpoisson.c examples/randwalk.c \
+ examples/rng.c examples/rngunif.c examples/rootnewt.c \
+ examples/roots.c examples/siman.c examples/sortsmall.c \
+ examples/specfun.c examples/specfun_e.c examples/stat.c \
+ examples/statsort.c examples/sum.c examples/vector.c \
+ examples/vectorr.c examples/vectorview.c examples/vectorw.c \
+ examples/demo_fn.h examples/dwt.c examples/expfit.c \
+ examples/nlfit.c examples/interpp.c examples/eigen_nonsymm.c \
+ examples/bspline.c
+examples_out = examples/blas.out examples/block.out examples/cblas.out examples/cdf.out examples/combination.out examples/const.out examples/diff.out examples/integration.out examples/intro.out examples/linalglu.out examples/min.out examples/polyroots.out examples/randpoisson.2.out examples/randpoisson.out examples/rng.out examples/rngunif.2.out examples/rngunif.out examples/sortsmall.out examples/specfun.out examples/specfun_e.out examples/stat.out examples/statsort.out examples/sum.out examples/vectorview.out examples/ecg.dat examples/dwt.dat
+noinst_DATA = $(examples_src) $(examples_out) $(figures)
+EXTRA_DIST = $(man_MANS) $(noinst_DATA) gsl-design.texi fftalgorithms.tex fftalgorithms.bib algorithm.sty algorithmic.sty calc.sty
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .dvi .html .info .pdf .ps .texi
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu --ignore-deps doc/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --gnu --ignore-deps doc/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+distclean-libtool:
+ -rm -f libtool
+
+.texi.info:
+ restore=: && backupdir="$(am__leading_dot)am$$$$" && \
+ am__cwd=`pwd` && cd $(srcdir) && \
+ rm -rf $$backupdir && mkdir $$backupdir && \
+ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \
+ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \
+ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \
+ done; \
+ else :; fi && \
+ cd "$$am__cwd"; \
+ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $@ $<; \
+ then \
+ rc=0; \
+ cd $(srcdir); \
+ else \
+ rc=$$?; \
+ cd $(srcdir) && \
+ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \
+ fi; \
+ rm -rf $$backupdir; exit $$rc
+
+.texi.dvi:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2DVI) $<
+
+.texi.pdf:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \
+ $(TEXI2PDF) $<
+
+.texi.html:
+ rm -rf $(@:.html=.htp)
+ if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \
+ -o $(@:.html=.htp) $<; \
+ then \
+ rm -rf $@; \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \
+ else \
+ if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \
+ rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \
+ exit 1; \
+ fi
+$(srcdir)/gsl-ref.info: gsl-ref.texi $(srcdir)/version-ref.texi $(gsl_ref_TEXINFOS)
+gsl-ref.dvi: gsl-ref.texi $(srcdir)/version-ref.texi $(gsl_ref_TEXINFOS)
+gsl-ref.pdf: gsl-ref.texi $(srcdir)/version-ref.texi $(gsl_ref_TEXINFOS)
+gsl-ref.html: gsl-ref.texi $(srcdir)/version-ref.texi $(gsl_ref_TEXINFOS)
+$(srcdir)/version-ref.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti
+$(srcdir)/stamp-vti: gsl-ref.texi $(top_srcdir)/configure
+ @(dir=.; test -f ./gsl-ref.texi || dir=$(srcdir); \
+ set `$(SHELL) $(srcdir)/mdate-sh $$dir/gsl-ref.texi`; \
+ echo "@set UPDATED $$1 $$2 $$3"; \
+ echo "@set UPDATED-MONTH $$2 $$3"; \
+ echo "@set EDITION $(VERSION)"; \
+ echo "@set VERSION $(VERSION)") > vti.tmp
+ @cmp -s vti.tmp $(srcdir)/version-ref.texi \
+ || (echo "Updating $(srcdir)/version-ref.texi"; \
+ cp vti.tmp $(srcdir)/version-ref.texi)
+ -@rm -f vti.tmp
+ @cp $(srcdir)/version-ref.texi $@
+
+mostlyclean-vti:
+ -rm -f vti.tmp
+
+maintainer-clean-vti:
+@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version-ref.texi
+.dvi.ps:
+ TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \
+ $(DVIPS) -o $@ $<
+
+uninstall-info-am:
+ @$(PRE_UNINSTALL)
+ @if (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \
+ install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \
+ done; \
+ else :; fi
+ @$(NORMAL_UNINSTALL)
+ @list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \
+ (if cd "$(DESTDIR)$(infodir)"; then \
+ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \
+ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \
+ else :; fi); \
+ done
+
+dist-info: $(INFO_DEPS)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for base in $$list; do \
+ case $$base in \
+ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$base; then d=.; else d=$(srcdir); fi; \
+ for file in $$d/$$base*; do \
+ relfile=`expr "$$file" : "$$d/\(.*\)"`; \
+ test -f $(distdir)/$$relfile || \
+ cp -p $$file $(distdir)/$$relfile; \
+ done; \
+ done
+
+mostlyclean-aminfo:
+ -rm -rf gsl-ref.aux gsl-ref.cp gsl-ref.cps gsl-ref.fn gsl-ref.fns gsl-ref.ky \
+ gsl-ref.kys gsl-ref.log gsl-ref.pg gsl-ref.pgs gsl-ref.tmp \
+ gsl-ref.toc gsl-ref.tp gsl-ref.tps gsl-ref.vr gsl-ref.vrs \
+ gsl-ref.dvi gsl-ref.pdf gsl-ref.ps gsl-ref.html
+
+maintainer-clean-aminfo:
+ @list='$(INFO_DEPS)'; for i in $$list; do \
+ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \
+ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \
+ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \
+ done
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+install-man3: $(man3_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)"
+ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.3*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 3*) ;; \
+ *) ext='3' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \
+ done
+uninstall-man3:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.3*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 3*) ;; \
+ *) ext='3' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man3dir)/$$inst"; \
+ done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+ $(mkdir_p) $(distdir)/examples
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+ $(MAKE) $(AM_MAKEFLAGS) \
+ top_distdir="$(top_distdir)" distdir="$(distdir)" \
+ dist-info
+check-am: all-am
+check: check-am
+all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA)
+installdirs:
+ for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man3dir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool mostlyclean-am
+
+distclean: distclean-am
+ -rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-libtool
+
+dvi: dvi-am
+
+dvi-am: $(DVIS)
+
+html: html-am
+
+html-am: $(HTMLS)
+
+info: info-am
+
+info-am: $(INFO_DEPS)
+
+install-data-am: install-info-am install-man
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-info-am: $(INFO_DEPS)
+ @$(NORMAL_INSTALL)
+ test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)"
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ esac; \
+ if test -f $$file; then d=.; else d=$(srcdir); fi; \
+ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \
+ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \
+ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \
+ if test -f $$ifile; then \
+ relfile=`echo "$$ifile" | sed 's|^.*/||'`; \
+ echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \
+ $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \
+ else : ; fi; \
+ done; \
+ done
+ @$(POST_INSTALL)
+ @if (install-info --version && \
+ install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \
+ list='$(INFO_DEPS)'; \
+ for file in $$list; do \
+ relfile=`echo "$$file" | sed 's|^.*/||'`; \
+ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\
+ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\
+ done; \
+ else : ; fi
+install-man: install-man1 install-man3
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-aminfo \
+ maintainer-clean-generic maintainer-clean-vti
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \
+ mostlyclean-libtool mostlyclean-vti
+
+pdf-am: $(PDFS)
+
+ps: ps-am
+
+ps-am: $(PSS)
+
+uninstall-am: uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1 uninstall-man3
+
+.PHONY: all all-am check check-am clean clean-generic clean-libtool \
+ dist-info distclean distclean-generic distclean-libtool \
+ distdir dvi dvi-am html html-am info info-am install \
+ install-am install-data install-data-am install-exec \
+ install-exec-am install-info install-info-am install-man \
+ install-man1 install-man3 install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-aminfo maintainer-clean-generic \
+ maintainer-clean-vti mostlyclean mostlyclean-aminfo \
+ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \
+ pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \
+ uninstall-man uninstall-man1 uninstall-man3
+
+
+# pdf disabled, use postscript and ps2pdf
+.PHONY: pdf
+pdf:
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/gsl-1.9/doc/algorithm.sty b/gsl-1.9/doc/algorithm.sty
new file mode 100644
index 0000000..843e3d5
--- /dev/null
+++ b/gsl-1.9/doc/algorithm.sty
@@ -0,0 +1,79 @@
+% ALGORITHM STYLE -- Released 8 April 1996
+% for LaTeX-2e
+% Copyright -- 1994 Peter Williams
+% E-mail Peter.Williams@dsto.defence.gov.au
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{algorithm}
+\typeout{Document Style `algorithm' - floating environment}
+
+\RequirePackage{float}
+\RequirePackage{ifthen}
+\newcommand{\ALG@within}{nothing}
+\newboolean{ALG@within}
+\setboolean{ALG@within}{false}
+\newcommand{\ALG@floatstyle}{ruled}
+\newcommand{\ALG@name}{Algorithm}
+\newcommand{\listalgorithmname}{List of \ALG@name s}
+
+% Declare Options
+% first appearance
+\DeclareOption{plain}{
+ \renewcommand{\ALG@floatstyle}{plain}
+}
+\DeclareOption{ruled}{
+ \renewcommand{\ALG@floatstyle}{ruled}
+}
+\DeclareOption{boxed}{
+ \renewcommand{\ALG@floatstyle}{boxed}
+}
+% then numbering convention
+\DeclareOption{part}{
+ \renewcommand{\ALG@within}{part}
+ \setboolean{ALG@within}{true}
+}
+\DeclareOption{chapter}{
+ \renewcommand{\ALG@within}{chapter}
+ \setboolean{ALG@within}{true}
+}
+\DeclareOption{section}{
+ \renewcommand{\ALG@within}{section}
+ \setboolean{ALG@within}{true}
+}
+\DeclareOption{subsection}{
+ \renewcommand{\ALG@within}{subsection}
+ \setboolean{ALG@within}{true}
+}
+\DeclareOption{subsubsection}{
+ \renewcommand{\ALG@within}{subsubsection}
+ \setboolean{ALG@within}{true}
+}
+\DeclareOption{nothing}{
+ \renewcommand{\ALG@within}{nothing}
+ \setboolean{ALG@within}{true}
+}
+\DeclareOption*{\edef\ALG@name{\CurrentOption}}
+
+% ALGORITHM
+%
+\ProcessOptions
+\floatstyle{\ALG@floatstyle}
+\ifthenelse{\boolean{ALG@within}}{
+ \ifthenelse{\equal{\ALG@within}{part}}
+ {\newfloat{algorithm}{htbp}{loa}[part]}{}
+ \ifthenelse{\equal{\ALG@within}{chapter}}
+ {\newfloat{algorithm}{htbp}{loa}[chapter]}{}
+ \ifthenelse{\equal{\ALG@within}{section}}
+ {\newfloat{algorithm}{htbp}{loa}[section]}{}
+ \ifthenelse{\equal{\ALG@within}{subsection}}
+ {\newfloat{algorithm}{htbp}{loa}[subsection]}{}
+ \ifthenelse{\equal{\ALG@within}{subsubsection}}
+ {\newfloat{algorithm}{htbp}{loa}[subsubsection]}{}
+ \ifthenelse{\equal{\ALG@within}{nothing}}
+ {\newfloat{algorithm}{htbp}{loa}}{}
+}{
+ \newfloat{algorithm}{htbp}{loa}
+}
+\floatname{algorithm}{\ALG@name}
+
+\newcommand{\listofalgorithms}{\listof{algorithm}{\listalgorithmname}}
+
diff --git a/gsl-1.9/doc/algorithmic.sty b/gsl-1.9/doc/algorithmic.sty
new file mode 100644
index 0000000..68f18aa
--- /dev/null
+++ b/gsl-1.9/doc/algorithmic.sty
@@ -0,0 +1,158 @@
+% ALGORITHMIC STYLE -- Released 8 APRIL 1996
+% for LaTeX version 2e
+% Copyright -- 1994 Peter Williams
+% E-mail PeterWilliams@dsto.defence.gov.au
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{algorithmic}
+\typeout{Document Style `algorithmic' - environment}
+%
+\RequirePackage{ifthen}
+\RequirePackage{calc}
+\newboolean{ALC@noend}
+\setboolean{ALC@noend}{false}
+\newcounter{ALC@line}
+\newcounter{ALC@rem}
+\newlength{\ALC@tlm}
+%
+\DeclareOption{noend}{\setboolean{ALC@noend}{true}}
+%
+\ProcessOptions
+%
+% ALGORITHMIC
+\newcommand{\algorithmicrequire}{\textbf{Require:}}
+\newcommand{\algorithmicensure}{\textbf{Ensure:}}
+\newcommand{\algorithmiccomment}[1]{\{#1\}}
+\newcommand{\algorithmicend}{\textbf{end}}
+\newcommand{\algorithmicif}{\textbf{if}}
+\newcommand{\algorithmicthen}{\textbf{then}}
+\newcommand{\algorithmicelse}{\textbf{else}}
+\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+\newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+\newcommand{\algorithmicfor}{\textbf{for}}
+\newcommand{\algorithmicforall}{\textbf{for all}}
+\newcommand{\algorithmicdo}{\textbf{do}}
+\newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+\newcommand{\algorithmicwhile}{\textbf{while}}
+\newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+\newcommand{\algorithmicloop}{\textbf{loop}}
+\newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+\newcommand{\algorithmicrepeat}{\textbf{repeat}}
+\newcommand{\algorithmicuntil}{\textbf{until}}
+\def\ALC@item[#1]{%
+\if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\sbox\@tempboxa{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\ALC@tlm
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+ \hskip \ALC@tlm}\ignorespaces}
+%
+\newenvironment{algorithmic}[1][0]{
+\let\@item\ALC@item
+ \newcommand{\ALC@lno}{%
+\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
+{{\footnotesize \arabic{ALC@line}:}}{}%
+}
+\let\@listii\@listi
+\let\@listiii\@listi
+\let\@listiv\@listi
+\let\@listv\@listi
+\let\@listvi\@listi
+\let\@listvii\@listi
+ \newenvironment{ALC@g}{
+ \begin{list}{\ALC@lno}{ \itemsep\z@ \itemindent\z@
+ \listparindent\z@ \rightmargin\z@
+ \topsep\z@ \partopsep\z@ \parskip\z@\parsep\z@
+ \leftmargin 1em
+ \addtolength{\ALC@tlm}{\leftmargin}
+ }
+ }
+ {\end{list}}
+ \newcommand{\ALC@it}{\addtocounter{ALC@line}{1}\addtocounter{ALC@rem}{1}\ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}\item}
+ \newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}%
+{}{\ \algorithmiccomment{##1}}}
+ \newcommand{\REQUIRE}{\item[\algorithmicrequire]}
+ \newcommand{\ENSURE}{\item[\algorithmicensure]}
+ \newcommand{\STATE}{\ALC@it}
+ \newcommand{\COMMENT}[1]{\algorithmiccomment{##1}}
+ \newenvironment{ALC@if}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@for}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@whl}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@loop}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@rpt}{\begin{ALC@g}}{\end{ALC@g}}
+ \renewcommand{\\}{\@centercr}
+ \newcommand{\IF}[2][default]{\ALC@it\algorithmicif\ ##2\ \algorithmicthen%
+\ALC@com{##1}\begin{ALC@if}}
+ \newcommand{\ELSE}[1][default]{\end{ALC@if}\ALC@it\algorithmicelse%
+\ALC@com{##1}\begin{ALC@if}}
+ \newcommand{\ELSIF}[2][default]%
+{\end{ALC@if}\ALC@it\algorithmicelsif\ ##2\ \algorithmicthen%
+\ALC@com{##1}\begin{ALC@if}}
+ \newcommand{\FOR}[2][default]{\ALC@it\algorithmicfor\ ##2\ \algorithmicdo%
+\ALC@com{##1}\begin{ALC@for}}
+ \newcommand{\FORALL}[2][default]{\ALC@it\algorithmicforall\ ##2\ %
+\algorithmicdo%
+\ALC@com{##1}\begin{ALC@for}}
+ \newcommand{\WHILE}[2][default]{\ALC@it\algorithmicwhile\ ##2\ %
+\algorithmicdo%
+\ALC@com{##1}\begin{ALC@whl}}
+ \newcommand{\LOOP}[1][default]{\ALC@it\algorithmicloop%
+\ALC@com{##1}\begin{ALC@loop}}
+ \newcommand{\REPEAT}[1][default]{\ALC@it\algorithmicrepeat%
+\ALC@com{##1}\begin{ALC@rpt}}
+ \newcommand{\UNTIL}[1]{\end{ALC@rpt}\ALC@it\algorithmicuntil\ ##1}
+ \ifthenelse{\boolean{ALC@noend}}{
+ \newcommand{\ENDIF}{\end{ALC@if}}
+ \newcommand{\ENDFOR}{\end{ALC@for}}
+ \newcommand{\ENDWHILE}{\end{ALC@whl}}
+ \newcommand{\ENDLOOP}{\end{ALC@loop}}
+ }{
+ \newcommand{\ENDIF}{\end{ALC@if}\ALC@it\algorithmicendif}
+ \newcommand{\ENDFOR}{\end{ALC@for}\ALC@it\algorithmicendfor}
+ \newcommand{\ENDWHILE}{\end{ALC@whl}\ALC@it\algorithmicendwhile}
+ \newcommand{\ENDLOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
+ }
+ \renewcommand{\@toodeep}{}
+ \begin{list}{\ALC@lno}{\setcounter{ALC@line}{0}\setcounter{ALC@rem}{0}%
+ \itemsep\z@ \itemindent\z@ \listparindent\z@%
+ \partopsep\z@ \parskip\z@ \parsep\z@%
+ \labelsep 0.5em \topsep 0.2em%
+\ifthenelse{\equal{#1}{0}}
+ {\labelwidth 0.5em }
+ {\labelwidth 1.2em }
+\leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}
+ \ALC@tlm\labelsep
+ }
+}
+{\end{list}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gsl-1.9/doc/autoconf.texi b/gsl-1.9/doc/autoconf.texi
new file mode 100644
index 0000000..8f8344a
--- /dev/null
+++ b/gsl-1.9/doc/autoconf.texi
@@ -0,0 +1,132 @@
+@cindex autoconf, using with GSL
+
+For applications using @code{autoconf} the standard macro
+@code{AC_CHECK_LIB} can be used to link with GSL automatically
+from a @code{configure} script. The library itself depends on the
+presence of a @sc{cblas} and math library as well, so these must also be
+located before linking with the main @code{libgsl} file. The following
+commands should be placed in the @file{configure.ac} file to perform
+these tests,
+
+@example
+AC_CHECK_LIB(m,main)
+AC_CHECK_LIB(gslcblas,main)
+AC_CHECK_LIB(gsl,main)
+@end example
+
+@noindent
+It is important to check for @code{libm} and @code{libgslcblas} before
+@code{libgsl}, otherwise the tests will fail. Assuming the libraries
+are found the output during the configure stage looks like this,
+
+@example
+checking for main in -lm... yes
+checking for main in -lgslcblas... yes
+checking for main in -lgsl... yes
+@end example
+
+@noindent
+If the library is found then the tests will define the macros
+@code{HAVE_LIBGSL}, @code{HAVE_LIBGSLCBLAS}, @code{HAVE_LIBM} and add
+the options @code{-lgsl -lgslcblas -lm} to the variable @code{LIBS}.
+
+The tests above will find any version of the library. They are suitable
+for general use, where the versions of the functions are not important.
+An alternative macro is available in the file @file{gsl.m4} to test for
+a specific version of the library. To use this macro simply add the
+following line to your @file{configure.in} file instead of the tests
+above:
+
+@example
+AM_PATH_GSL(GSL_VERSION,
+ [action-if-found],
+ [action-if-not-found])
+@end example
+
+@noindent
+The argument @code{GSL_VERSION} should be the two or three digit
+@sc{major.minor} or @sc{major.minor.micro} version number of the release
+you require. A suitable choice for @code{action-if-not-found} is,
+
+@example
+AC_MSG_ERROR(could not find required version of GSL)
+@end example
+
+@noindent
+Then you can add the variables @code{GSL_LIBS} and @code{GSL_CFLAGS} to
+your Makefile.am files to obtain the correct compiler flags.
+@code{GSL_LIBS} is equal to the output of the @code{gsl-config --libs}
+command and @code{GSL_CFLAGS} is equal to @code{gsl-config --cflags}
+command. For example,
+
+@example
+libfoo_la_LDFLAGS = -lfoo $(GSL_LIBS) -lgslcblas
+@end example
+
+@noindent
+Note that the macro @code{AM_PATH_GSL} needs to use the C compiler so it
+should appear in the @file{configure.in} file before the macro
+@code{AC_LANG_CPLUSPLUS} for programs that use C++.
+
+To test for @code{inline} the following test should be placed in your
+@file{configure.in} file,
+
+@example
+AC_C_INLINE
+
+if test "$ac_cv_c_inline" != no ; then
+ AC_DEFINE(HAVE_INLINE,1)
+ AC_SUBST(HAVE_INLINE)
+fi
+@end example
+
+@noindent
+and the macro will then be defined in the compilation flags or by
+including the file @file{config.h} before any library headers.
+
+The following autoconf test will check for @code{extern inline},
+
+@smallexample
+dnl Check for "extern inline", using a modified version
+dnl of the test for AC_C_INLINE from acspecific.mt
+dnl
+AC_CACHE_CHECK([for extern inline], ac_cv_c_extern_inline,
+[ac_cv_c_extern_inline=no
+AC_TRY_COMPILE([extern $ac_cv_c_inline double foo(double x);
+extern $ac_cv_c_inline double foo(double x) @{ return x+1.0; @};
+double foo (double x) @{ return x + 1.0; @};],
+[ foo(1.0) ],
+[ac_cv_c_extern_inline="yes"])
+])
+
+if test "$ac_cv_c_extern_inline" != no ; then
+ AC_DEFINE(HAVE_INLINE,1)
+ AC_SUBST(HAVE_INLINE)
+fi
+@end smallexample
+
+The substitution of portability functions can be made automatically if
+you use @code{autoconf}. For example, to test whether the BSD function
+@code{hypot} is available you can include the following line in the
+configure file @file{configure.in} for your application,
+
+@example
+AC_CHECK_FUNCS(hypot)
+@end example
+
+@noindent
+and place the following macro definitions in the file
+@file{config.h.in},
+
+@example
+/* Substitute gsl_hypot for missing system hypot */
+
+#ifndef HAVE_HYPOT
+#define hypot gsl_hypot
+#endif
+@end example
+
+@noindent
+The application source files can then use the include command
+@code{#include <config.h>} to substitute @code{gsl_hypot} for each
+occurrence of @code{hypot} when @code{hypot} is not available.
diff --git a/gsl-1.9/doc/blas.texi b/gsl-1.9/doc/blas.texi
new file mode 100644
index 0000000..65ad95b
--- /dev/null
+++ b/gsl-1.9/doc/blas.texi
@@ -0,0 +1,686 @@
+@cindex linear algebra, BLAS
+@cindex matrix, operations
+@cindex vector, operations
+@cindex BLAS
+@cindex CBLAS
+@cindex Basic Linear Algebra Subroutines (BLAS)
+
+The Basic Linear Algebra Subprograms (@sc{blas}) define a set of fundamental
+operations on vectors and matrices which can be used to create optimized
+higher-level linear algebra functionality.
+
+The library provides a low-level layer which corresponds directly to the
+C-language @sc{blas} standard, referred to here as ``@sc{cblas}'', and a
+higher-level interface for operations on GSL vectors and matrices.
+Users who are interested in simple operations on GSL vector and matrix
+objects should use the high-level layer, which is declared in the file
+@code{gsl_blas.h}. This should satisfy the needs of most users. Note
+that GSL matrices are implemented using dense-storage so the interface
+only includes the corresponding dense-storage @sc{blas} functions. The full
+@sc{blas} functionality for band-format and packed-format matrices is
+available through the low-level @sc{cblas} interface.
+
+The interface for the @code{gsl_cblas} layer is specified in the file
+@code{gsl_cblas.h}. This interface corresponds to the @sc{blas} Technical
+Forum's draft standard for the C interface to legacy @sc{blas}
+implementations. Users who have access to other conforming @sc{cblas}
+implementations can use these in place of the version provided by the
+library. Note that users who have only a Fortran @sc{blas} library can
+use a @sc{cblas} conformant wrapper to convert it into a @sc{cblas}
+library. A reference @sc{cblas} wrapper for legacy Fortran
+implementations exists as part of the draft @sc{cblas} standard and can
+be obtained from Netlib. The complete set of @sc{cblas} functions is
+listed in an appendix (@pxref{GSL CBLAS Library}).
+
+There are three levels of @sc{blas} operations,
+
+@table @b
+@item Level 1
+Vector operations, e.g. @math{y = \alpha x + y}
+@item Level 2
+Matrix-vector operations, e.g. @math{y = \alpha A x + \beta y}
+@item Level 3
+Matrix-matrix operations, e.g. @math{C = \alpha A B + C}
+@end table
+
+@noindent
+Each routine has a name which specifies the operation, the type of
+matrices involved and their precisions. Some of the most common
+operations and their names are given below,
+
+@table @b
+@item DOT
+scalar product, @math{x^T y}
+@item AXPY
+vector sum, @math{\alpha x + y}
+@item MV
+matrix-vector product, @math{A x}
+@item SV
+matrix-vector solve, @math{inv(A) x}
+@item MM
+matrix-matrix product, @math{A B}
+@item SM
+matrix-matrix solve, @math{inv(A) B}
+@end table
+
+@noindent
+The types of matrices are,
+
+@table @b
+@item GE
+general
+@item GB
+general band
+@item SY
+symmetric
+@item SB
+symmetric band
+@item SP
+symmetric packed
+@item HE
+hermitian
+@item HB
+hermitian band
+@item HP
+hermitian packed
+@item TR
+triangular
+@item TB
+triangular band
+@item TP
+triangular packed
+@end table
+
+@noindent
+Each operation is defined for four precisions,
+
+@table @b
+@item S
+single real
+@item D
+double real
+@item C
+single complex
+@item Z
+double complex
+@end table
+
+@noindent
+Thus, for example, the name @sc{sgemm} stands for ``single-precision
+general matrix-matrix multiply'' and @sc{zgemm} stands for
+``double-precision complex matrix-matrix multiply''.
+
+@menu
+* GSL BLAS Interface::
+* BLAS Examples::
+* BLAS References and Further Reading::
+@end menu
+
+@node GSL BLAS Interface
+@section GSL BLAS Interface
+
+GSL provides dense vector and matrix objects, based on the relevant
+built-in types. The library provides an interface to the @sc{blas}
+operations which apply to these objects. The interface to this
+functionality is given in the file @code{gsl_blas.h}.
+
+@comment CblasNoTrans, CblasTrans, CblasConjTrans
+@comment CblasUpper, CblasLower
+@comment CblasNonUnit, CblasUnit
+@comment CblasLeft, CblasRight
+
+@menu
+* Level 1 GSL BLAS Interface::
+* Level 2 GSL BLAS Interface::
+* Level 3 GSL BLAS Interface::
+@end menu
+
+@node Level 1 GSL BLAS Interface
+@subsection Level 1
+
+@deftypefun int gsl_blas_sdsdot (float @var{alpha}, const gsl_vector_float * @var{x}, const gsl_vector_float * @var{y}, float * @var{result})
+@cindex DOT, Level-1 BLAS
+This function computes the sum @math{\alpha + x^T y} for the vectors
+@var{x} and @var{y}, returning the result in @var{result}.
+@end deftypefun
+
+@deftypefun int gsl_blas_sdot (const gsl_vector_float * @var{x}, const gsl_vector_float * @var{y}, float * @var{result})
+@deftypefunx int gsl_blas_dsdot (const gsl_vector_float * @var{x}, const gsl_vector_float * @var{y}, double * @var{result})
+@deftypefunx int gsl_blas_ddot (const gsl_vector * @var{x}, const gsl_vector * @var{y}, double * @var{result})
+These functions compute the scalar product @math{x^T y} for the vectors
+@var{x} and @var{y}, returning the result in @var{result}.
+@end deftypefun
+
+@deftypefun int gsl_blas_cdotu (const gsl_vector_complex_float * @var{x}, const gsl_vector_complex_float * @var{y}, gsl_complex_float * @var{dotu})
+@deftypefunx int gsl_blas_zdotu (const gsl_vector_complex * @var{x}, const gsl_vector_complex * @var{y}, gsl_complex * @var{dotu})
+These functions compute the complex scalar product @math{x^T y} for the
+vectors @var{x} and @var{y}, returning the result in @var{result}
+@end deftypefun
+
+@deftypefun int gsl_blas_cdotc (const gsl_vector_complex_float * @var{x}, const gsl_vector_complex_float * @var{y}, gsl_complex_float * @var{dotc})
+@deftypefunx int gsl_blas_zdotc (const gsl_vector_complex * @var{x}, const gsl_vector_complex * @var{y}, gsl_complex * @var{dotc})
+These functions compute the complex conjugate scalar product @math{x^H
+y} for the vectors @var{x} and @var{y}, returning the result in
+@var{result}
+@end deftypefun
+
+@deftypefun float gsl_blas_snrm2 (const gsl_vector_float * @var{x})
+@deftypefunx double gsl_blas_dnrm2 (const gsl_vector * @var{x})
+@cindex NRM2, Level-1 BLAS
+These functions compute the Euclidean norm
+@c{$||x||_2 = \sqrt{\sum x_i^2}$}
+@math{||x||_2 = \sqrt @{\sum x_i^2@}} of the vector @var{x}.
+@end deftypefun
+
+@deftypefun float gsl_blas_scnrm2 (const gsl_vector_complex_float * @var{x})
+@deftypefunx double gsl_blas_dznrm2 (const gsl_vector_complex * @var{x})
+These functions compute the Euclidean norm of the complex vector @var{x},
+@tex
+\beforedisplay
+$$
+||x||_2 = \sqrt{\sum (\Re(x_i)^2 + \Im(x_i)^2)}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+||x||_2 = \sqrt @{\sum (\Re(x_i)^2 + \Im(x_i)^2)@}.
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun float gsl_blas_sasum (const gsl_vector_float * @var{x})
+@deftypefunx double gsl_blas_dasum (const gsl_vector * @var{x})
+@cindex ASUM, Level-1 BLAS
+These functions compute the absolute sum @math{\sum |x_i|} of the
+elements of the vector @var{x}.
+@end deftypefun
+
+@deftypefun float gsl_blas_scasum (const gsl_vector_complex_float * @var{x})
+@deftypefunx double gsl_blas_dzasum (const gsl_vector_complex * @var{x})
+These functions compute the sum of the magnitudes of the real and
+imaginary parts of the complex vector @var{x},
+@c{$\sum \left( |\Re(x_i)| + |\Im(x_i)| \right)$}
+@math{\sum |\Re(x_i)| + |\Im(x_i)|}.
+@end deftypefun
+
+@deftypefun CBLAS_INDEX_t gsl_blas_isamax (const gsl_vector_float * @var{x})
+@deftypefunx CBLAS_INDEX_t gsl_blas_idamax (const gsl_vector * @var{x})
+@deftypefunx CBLAS_INDEX_t gsl_blas_icamax (const gsl_vector_complex_float * @var{x})
+@deftypefunx CBLAS_INDEX_t gsl_blas_izamax (const gsl_vector_complex * @var{x})
+@cindex AMAX, Level-1 BLAS
+These functions return the index of the largest element of the vector
+@var{x}. The largest element is determined by its absolute magnitude for
+real vectors and by the sum of the magnitudes of the real and imaginary
+parts @math{|\Re(x_i)| + |\Im(x_i)|} for complex vectors. If the
+largest value occurs several times then the index of the first
+occurrence is returned.
+@end deftypefun
+
+@deftypefun int gsl_blas_sswap (gsl_vector_float * @var{x}, gsl_vector_float * @var{y})
+@deftypefunx int gsl_blas_dswap (gsl_vector * @var{x}, gsl_vector * @var{y})
+@deftypefunx int gsl_blas_cswap (gsl_vector_complex_float * @var{x}, gsl_vector_complex_float * @var{y})
+@deftypefunx int gsl_blas_zswap (gsl_vector_complex * @var{x}, gsl_vector_complex * @var{y})
+@cindex SWAP, Level-1 BLAS
+These functions exchange the elements of the vectors @var{x} and @var{y}.
+@end deftypefun
+
+@deftypefun int gsl_blas_scopy (const gsl_vector_float * @var{x}, gsl_vector_float * @var{y})
+@deftypefunx int gsl_blas_dcopy (const gsl_vector * @var{x}, gsl_vector * @var{y})
+@deftypefunx int gsl_blas_ccopy (const gsl_vector_complex_float * @var{x}, gsl_vector_complex_float * @var{y})
+@deftypefunx int gsl_blas_zcopy (const gsl_vector_complex * @var{x}, gsl_vector_complex * @var{y})
+@cindex COPY, Level-1 BLAS
+These functions copy the elements of the vector @var{x} into the vector
+@var{y}.
+@end deftypefun
+
+
+@deftypefun int gsl_blas_saxpy (float @var{alpha}, const gsl_vector_float * @var{x}, gsl_vector_float * @var{y})
+@deftypefunx int gsl_blas_daxpy (double @var{alpha}, const gsl_vector * @var{x}, gsl_vector * @var{y})
+@deftypefunx int gsl_blas_caxpy (const gsl_complex_float @var{alpha}, const gsl_vector_complex_float * @var{x}, gsl_vector_complex_float * @var{y})
+@deftypefunx int gsl_blas_zaxpy (const gsl_complex @var{alpha}, const gsl_vector_complex * @var{x}, gsl_vector_complex * @var{y})
+@cindex AXPY, Level-1 BLAS
+@cindex DAXPY, Level-1 BLAS
+@cindex SAXPY, Level-1 BLAS
+These functions compute the sum @math{y = \alpha x + y} for the vectors
+@var{x} and @var{y}.
+@end deftypefun
+
+@deftypefun void gsl_blas_sscal (float @var{alpha}, gsl_vector_float * @var{x})
+@deftypefunx void gsl_blas_dscal (double @var{alpha}, gsl_vector * @var{x})
+@deftypefunx void gsl_blas_cscal (const gsl_complex_float @var{alpha}, gsl_vector_complex_float * @var{x})
+@deftypefunx void gsl_blas_zscal (const gsl_complex @var{alpha}, gsl_vector_complex * @var{x})
+@deftypefunx void gsl_blas_csscal (float @var{alpha}, gsl_vector_complex_float * @var{x})
+@deftypefunx void gsl_blas_zdscal (double @var{alpha}, gsl_vector_complex * @var{x})
+@cindex SCAL, Level-1 BLAS
+These functions rescale the vector @var{x} by the multiplicative factor
+@var{alpha}.
+@end deftypefun
+
+@deftypefun int gsl_blas_srotg (float @var{a}[], float @var{b}[], float @var{c}[], float @var{s}[])
+@deftypefunx int gsl_blas_drotg (double @var{a}[], double @var{b}[], double @var{c}[], double @var{s}[])
+@cindex ROTG, Level-1 BLAS
+@cindex Givens Rotation, BLAS
+These functions compute a Givens rotation @math{(c,s)} which zeroes the
+vector @math{(a,b)},
+@tex
+\beforedisplay
+$$
+\left(
+\matrix{c&s\cr
+-s&c\cr}
+\right)
+\left(
+\matrix{a\cr
+b\cr}
+\right)
+=
+\left(
+\matrix{r'\cr
+0\cr}
+\right)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+[ c s ] [ a ] = [ r ]
+[ -s c ] [ b ] [ 0 ]
+@end example
+
+@end ifinfo
+@noindent
+The variables @var{a} and @var{b} are overwritten by the routine.
+@end deftypefun
+
+@deftypefun int gsl_blas_srot (gsl_vector_float * @var{x}, gsl_vector_float * @var{y}, float @var{c}, float @var{s})
+@deftypefunx int gsl_blas_drot (gsl_vector * @var{x}, gsl_vector * @var{y}, const double @var{c}, const double @var{s})
+These functions apply a Givens rotation @math{(x', y') = (c x + s y, -s
+x + c y)} to the vectors @var{x}, @var{y}.
+@end deftypefun
+
+@deftypefun int gsl_blas_srotmg (float @var{d1}[], float @var{d2}[], float @var{b1}[], float @var{b2}, float @var{P}[])
+@deftypefunx int gsl_blas_drotmg (double @var{d1}[], double @var{d2}[], double @var{b1}[], double @var{b2}, double @var{P}[])
+@cindex Modified Givens Rotation, BLAS
+@cindex Givens Rotation, Modified, BLAS
+These functions compute a modified Givens transformation. The modified
+Givens transformation is defined in the original Level-1 @sc{blas}
+specification, given in the references.
+@end deftypefun
+
+@deftypefun int gsl_blas_srotm (gsl_vector_float * @var{x}, gsl_vector_float * @var{y}, const float @var{P}[])
+@deftypefunx int gsl_blas_drotm (gsl_vector * @var{x}, gsl_vector * @var{y}, const double @var{P}[])
+These functions apply a modified Givens transformation.
+@end deftypefun
+
+@node Level 2 GSL BLAS Interface
+@subsection Level 2
+
+@deftypefun int gsl_blas_sgemv (CBLAS_TRANSPOSE_t @var{TransA}, float @var{alpha}, const gsl_matrix_float * @var{A}, const gsl_vector_float * @var{x}, float @var{beta}, gsl_vector_float * @var{y})
+@deftypefunx int gsl_blas_dgemv (CBLAS_TRANSPOSE_t @var{TransA}, double @var{alpha}, const gsl_matrix * @var{A}, const gsl_vector * @var{x}, double @var{beta}, gsl_vector * @var{y})
+@deftypefunx int gsl_blas_cgemv (CBLAS_TRANSPOSE_t @var{TransA}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_vector_complex_float * @var{x}, const gsl_complex_float @var{beta}, gsl_vector_complex_float * @var{y})
+@deftypefunx int gsl_blas_zgemv (CBLAS_TRANSPOSE_t @var{TransA}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_vector_complex * @var{x}, const gsl_complex @var{beta}, gsl_vector_complex * @var{y})
+@cindex GEMV, Level-2 BLAS
+These functions compute the matrix-vector product and sum @math{y =
+\alpha op(A) x + \beta y}, where @math{op(A) = A},
+@math{A^T}, @math{A^H} for @var{TransA} = @code{CblasNoTrans},
+@code{CblasTrans}, @code{CblasConjTrans}.
+@end deftypefun
+
+
+@deftypefun int gsl_blas_strmv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix_float * @var{A}, gsl_vector_float * @var{x})
+@deftypefunx int gsl_blas_dtrmv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix * @var{A}, gsl_vector * @var{x})
+@deftypefunx int gsl_blas_ctrmv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix_complex_float * @var{A}, gsl_vector_complex_float * @var{x})
+@deftypefunx int gsl_blas_ztrmv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix_complex * @var{A}, gsl_vector_complex * @var{x})
+@cindex TRMV, Level-2 BLAS
+These functions compute the matrix-vector product
+@math{x = op(A) x} for the triangular matrix @var{A}, where
+@math{op(A) = A}, @math{A^T}, @math{A^H} for @var{TransA} =
+@code{CblasNoTrans}, @code{CblasTrans}, @code{CblasConjTrans}. When
+@var{Uplo} is @code{CblasUpper} then the upper triangle of @var{A} is
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+of @var{A} is used. If @var{Diag} is @code{CblasNonUnit} then the
+diagonal of the matrix is used, but if @var{Diag} is @code{CblasUnit}
+then the diagonal elements of the matrix @var{A} are taken as unity and
+are not referenced.
+@end deftypefun
+
+
+@deftypefun int gsl_blas_strsv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix_float * @var{A}, gsl_vector_float * @var{x})
+@deftypefunx int gsl_blas_dtrsv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix * @var{A}, gsl_vector * @var{x})
+@deftypefunx int gsl_blas_ctrsv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix_complex_float * @var{A}, gsl_vector_complex_float * @var{x})
+@deftypefunx int gsl_blas_ztrsv (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_matrix_complex * @var{A}, gsl_vector_complex * @var{x})
+@cindex TRSV, Level-2 BLAS
+These functions compute @math{inv(op(A)) x} for @var{x}, where
+@math{op(A) = A}, @math{A^T}, @math{A^H} for @var{TransA} =
+@code{CblasNoTrans}, @code{CblasTrans}, @code{CblasConjTrans}. When
+@var{Uplo} is @code{CblasUpper} then the upper triangle of @var{A} is
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+of @var{A} is used. If @var{Diag} is @code{CblasNonUnit} then the
+diagonal of the matrix is used, but if @var{Diag} is @code{CblasUnit}
+then the diagonal elements of the matrix @var{A} are taken as unity and
+are not referenced.
+@end deftypefun
+
+
+@deftypefun int gsl_blas_ssymv (CBLAS_UPLO_t @var{Uplo}, float @var{alpha}, const gsl_matrix_float * @var{A}, const gsl_vector_float * @var{x}, float @var{beta}, gsl_vector_float * @var{y})
+@deftypefunx int gsl_blas_dsymv (CBLAS_UPLO_t @var{Uplo}, double @var{alpha}, const gsl_matrix * @var{A}, const gsl_vector * @var{x}, double @var{beta}, gsl_vector * @var{y})
+@cindex SYMV, Level-2 BLAS
+These functions compute the matrix-vector product and sum @math{y =
+\alpha A x + \beta y} for the symmetric matrix @var{A}. Since the
+matrix @var{A} is symmetric only its upper half or lower half need to be
+stored. When @var{Uplo} is @code{CblasUpper} then the upper triangle
+and diagonal of @var{A} are used, and when @var{Uplo} is
+@code{CblasLower} then the lower triangle and diagonal of @var{A} are
+used.
+@end deftypefun
+
+@deftypefun int gsl_blas_chemv (CBLAS_UPLO_t @var{Uplo}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_vector_complex_float * @var{x}, const gsl_complex_float @var{beta}, gsl_vector_complex_float * @var{y})
+@deftypefunx int gsl_blas_zhemv (CBLAS_UPLO_t @var{Uplo}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_vector_complex * @var{x}, const gsl_complex @var{beta}, gsl_vector_complex * @var{y})
+@cindex HEMV, Level-2 BLAS
+These functions compute the matrix-vector product and sum @math{y =
+\alpha A x + \beta y} for the hermitian matrix @var{A}. Since the
+matrix @var{A} is hermitian only its upper half or lower half need to be
+stored. When @var{Uplo} is @code{CblasUpper} then the upper triangle
+and diagonal of @var{A} are used, and when @var{Uplo} is
+@code{CblasLower} then the lower triangle and diagonal of @var{A} are
+used. The imaginary elements of the diagonal are automatically assumed
+to be zero and are not referenced.
+@end deftypefun
+
+@deftypefun int gsl_blas_sger (float @var{alpha}, const gsl_vector_float * @var{x}, const gsl_vector_float * @var{y}, gsl_matrix_float * @var{A})
+@deftypefunx int gsl_blas_dger (double @var{alpha}, const gsl_vector * @var{x}, const gsl_vector * @var{y}, gsl_matrix * @var{A})
+@deftypefunx int gsl_blas_cgeru (const gsl_complex_float @var{alpha}, const gsl_vector_complex_float * @var{x}, const gsl_vector_complex_float * @var{y}, gsl_matrix_complex_float * @var{A})
+@deftypefunx int gsl_blas_zgeru (const gsl_complex @var{alpha}, const gsl_vector_complex * @var{x}, const gsl_vector_complex * @var{y}, gsl_matrix_complex * @var{A})
+@cindex GER, Level-2 BLAS
+@cindex GERU, Level-2 BLAS
+These functions compute the rank-1 update @math{A = \alpha x y^T + A} of
+the matrix @var{A}.
+@end deftypefun
+
+@deftypefun int gsl_blas_cgerc (const gsl_complex_float @var{alpha}, const gsl_vector_complex_float * @var{x}, const gsl_vector_complex_float * @var{y}, gsl_matrix_complex_float * @var{A})
+@deftypefunx int gsl_blas_zgerc (const gsl_complex @var{alpha}, const gsl_vector_complex * @var{x}, const gsl_vector_complex * @var{y}, gsl_matrix_complex * @var{A})
+@cindex GERC, Level-2 BLAS
+These functions compute the conjugate rank-1 update @math{A = \alpha x
+y^H + A} of the matrix @var{A}.
+@end deftypefun
+
+@deftypefun int gsl_blas_ssyr (CBLAS_UPLO_t @var{Uplo}, float @var{alpha}, const gsl_vector_float * @var{x}, gsl_matrix_float * @var{A})
+@deftypefunx int gsl_blas_dsyr (CBLAS_UPLO_t @var{Uplo}, double @var{alpha}, const gsl_vector * @var{x}, gsl_matrix * @var{A})
+@cindex SYR, Level-2 BLAS
+These functions compute the symmetric rank-1 update @math{A = \alpha x
+x^T + A} of the symmetric matrix @var{A}. Since the matrix @var{A} is
+symmetric only its upper half or lower half need to be stored. When
+@var{Uplo} is @code{CblasUpper} then the upper triangle and diagonal of
+@var{A} are used, and when @var{Uplo} is @code{CblasLower} then the
+lower triangle and diagonal of @var{A} are used.
+@end deftypefun
+
+@deftypefun int gsl_blas_cher (CBLAS_UPLO_t @var{Uplo}, float @var{alpha}, const gsl_vector_complex_float * @var{x}, gsl_matrix_complex_float * @var{A})
+@deftypefunx int gsl_blas_zher (CBLAS_UPLO_t @var{Uplo}, double @var{alpha}, const gsl_vector_complex * @var{x}, gsl_matrix_complex * @var{A})
+@cindex HER, Level-2 BLAS
+These functions compute the hermitian rank-1 update @math{A = \alpha x
+x^H + A} of the hermitian matrix @var{A}. Since the matrix @var{A} is
+hermitian only its upper half or lower half need to be stored. When
+@var{Uplo} is @code{CblasUpper} then the upper triangle and diagonal of
+@var{A} are used, and when @var{Uplo} is @code{CblasLower} then the
+lower triangle and diagonal of @var{A} are used. The imaginary elements
+of the diagonal are automatically set to zero.
+@end deftypefun
+
+@deftypefun int gsl_blas_ssyr2 (CBLAS_UPLO_t @var{Uplo}, float @var{alpha}, const gsl_vector_float * @var{x}, const gsl_vector_float * @var{y}, gsl_matrix_float * @var{A})
+@deftypefunx int gsl_blas_dsyr2 (CBLAS_UPLO_t @var{Uplo}, double @var{alpha}, const gsl_vector * @var{x}, const gsl_vector * @var{y}, gsl_matrix * @var{A})
+@cindex SYR2, Level-2 BLAS
+These functions compute the symmetric rank-2 update @math{A = \alpha x
+y^T + \alpha y x^T + A} of the symmetric matrix @var{A}. Since the
+matrix @var{A} is symmetric only its upper half or lower half need to be
+stored. When @var{Uplo} is @code{CblasUpper} then the upper triangle
+and diagonal of @var{A} are used, and when @var{Uplo} is
+@code{CblasLower} then the lower triangle and diagonal of @var{A} are
+used.
+@end deftypefun
+
+@deftypefun int gsl_blas_cher2 (CBLAS_UPLO_t @var{Uplo}, const gsl_complex_float @var{alpha}, const gsl_vector_complex_float * @var{x}, const gsl_vector_complex_float * @var{y}, gsl_matrix_complex_float * @var{A})
+@deftypefunx int gsl_blas_zher2 (CBLAS_UPLO_t @var{Uplo}, const gsl_complex @var{alpha}, const gsl_vector_complex * @var{x}, const gsl_vector_complex * @var{y}, gsl_matrix_complex * @var{A})
+@cindex HER2, Level-2 BLAS
+These functions compute the hermitian rank-2 update @math{A = \alpha x
+y^H + \alpha^* y x^H A} of the hermitian matrix @var{A}. Since the
+matrix @var{A} is hermitian only its upper half or lower half need to be
+stored. When @var{Uplo} is @code{CblasUpper} then the upper triangle
+and diagonal of @var{A} are used, and when @var{Uplo} is
+@code{CblasLower} then the lower triangle and diagonal of @var{A} are
+used. The imaginary elements of the diagonal are automatically set to zero.
+@end deftypefun
+
+@node Level 3 GSL BLAS Interface
+@subsection Level 3
+
+
+@deftypefun int gsl_blas_sgemm (CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_TRANSPOSE_t @var{TransB}, float @var{alpha}, const gsl_matrix_float * @var{A}, const gsl_matrix_float * @var{B}, float @var{beta}, gsl_matrix_float * @var{C})
+@deftypefunx int gsl_blas_dgemm (CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_TRANSPOSE_t @var{TransB}, double @var{alpha}, const gsl_matrix * @var{A}, const gsl_matrix * @var{B}, double @var{beta}, gsl_matrix * @var{C})
+@deftypefunx int gsl_blas_cgemm (CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_TRANSPOSE_t @var{TransB}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_matrix_complex_float * @var{B}, const gsl_complex_float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zgemm (CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_TRANSPOSE_t @var{TransB}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{B}, const gsl_complex @var{beta}, gsl_matrix_complex * @var{C})
+@cindex GEMM, Level-3 BLAS
+These functions compute the matrix-matrix product and sum @math{C =
+\alpha op(A) op(B) + \beta C} where @math{op(A) = A}, @math{A^T},
+@math{A^H} for @var{TransA} = @code{CblasNoTrans}, @code{CblasTrans},
+@code{CblasConjTrans} and similarly for the parameter @var{TransB}.
+@end deftypefun
+
+
+@deftypefun int gsl_blas_ssymm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, float @var{alpha}, const gsl_matrix_float * @var{A}, const gsl_matrix_float * @var{B}, float @var{beta}, gsl_matrix_float * @var{C})
+@deftypefunx int gsl_blas_dsymm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, double @var{alpha}, const gsl_matrix * @var{A}, const gsl_matrix * @var{B}, double @var{beta}, gsl_matrix * @var{C})
+@deftypefunx int gsl_blas_csymm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_matrix_complex_float * @var{B}, const gsl_complex_float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zsymm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{B}, const gsl_complex @var{beta}, gsl_matrix_complex * @var{C})
+@cindex SYMM, Level-3 BLAS
+These functions compute the matrix-matrix product and sum @math{C =
+\alpha A B + \beta C} for @var{Side} is @code{CblasLeft} and @math{C =
+\alpha B A + \beta C} for @var{Side} is @code{CblasRight}, where the
+matrix @var{A} is symmetric. When @var{Uplo} is @code{CblasUpper} then
+the upper triangle and diagonal of @var{A} are used, and when @var{Uplo}
+is @code{CblasLower} then the lower triangle and diagonal of @var{A} are
+used.
+@end deftypefun
+
+@deftypefun int gsl_blas_chemm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_matrix_complex_float * @var{B}, const gsl_complex_float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zhemm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{B}, const gsl_complex @var{beta}, gsl_matrix_complex * @var{C})
+@cindex HEMM, Level-3 BLAS
+These functions compute the matrix-matrix product and sum @math{C =
+\alpha A B + \beta C} for @var{Side} is @code{CblasLeft} and @math{C =
+\alpha B A + \beta C} for @var{Side} is @code{CblasRight}, where the
+matrix @var{A} is hermitian. When @var{Uplo} is @code{CblasUpper} then
+the upper triangle and diagonal of @var{A} are used, and when @var{Uplo}
+is @code{CblasLower} then the lower triangle and diagonal of @var{A} are
+used. The imaginary elements of the diagonal are automatically set to
+zero.
+@end deftypefun
+
+@deftypefun int gsl_blas_strmm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, float @var{alpha}, const gsl_matrix_float * @var{A}, gsl_matrix_float * @var{B})
+@deftypefunx int gsl_blas_dtrmm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, double @var{alpha}, const gsl_matrix * @var{A}, gsl_matrix * @var{B})
+@deftypefunx int gsl_blas_ctrmm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, gsl_matrix_complex_float * @var{B})
+@deftypefunx int gsl_blas_ztrmm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, gsl_matrix_complex * @var{B})
+@cindex TRMM, Level-3 BLAS
+These functions compute the matrix-matrix product @math{B = \alpha op(A)
+B} for @var{Side} is @code{CblasLeft} and @math{B = \alpha B op(A)} for
+@var{Side} is @code{CblasRight}. The matrix @var{A} is triangular and
+@math{op(A) = A}, @math{A^T}, @math{A^H} for @var{TransA} =
+@code{CblasNoTrans}, @code{CblasTrans}, @code{CblasConjTrans}. When
+@var{Uplo} is @code{CblasUpper} then the upper triangle of @var{A} is
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+of @var{A} is used. If @var{Diag} is @code{CblasNonUnit} then the
+diagonal of @var{A} is used, but if @var{Diag} is @code{CblasUnit} then
+the diagonal elements of the matrix @var{A} are taken as unity and are
+not referenced.
+@end deftypefun
+
+
+@deftypefun int gsl_blas_strsm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, float @var{alpha}, const gsl_matrix_float * @var{A}, gsl_matrix_float * @var{B})
+@deftypefunx int gsl_blas_dtrsm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, double @var{alpha}, const gsl_matrix * @var{A}, gsl_matrix * @var{B})
+@deftypefunx int gsl_blas_ctrsm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, gsl_matrix_complex_float * @var{B})
+@deftypefunx int gsl_blas_ztrsm (CBLAS_SIDE_t @var{Side}, CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{TransA}, CBLAS_DIAG_t @var{Diag}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, gsl_matrix_complex * @var{B})
+@cindex TRSM, Level-3 BLAS
+These functions compute the inverse-matrix matrix product
+@math{B = \alpha op(inv(A))B} for @var{Side} is
+@code{CblasLeft} and @math{B = \alpha B op(inv(A))} for
+@var{Side} is @code{CblasRight}. The matrix @var{A} is triangular and
+@math{op(A) = A}, @math{A^T}, @math{A^H} for @var{TransA} =
+@code{CblasNoTrans}, @code{CblasTrans}, @code{CblasConjTrans}. When
+@var{Uplo} is @code{CblasUpper} then the upper triangle of @var{A} is
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+of @var{A} is used. If @var{Diag} is @code{CblasNonUnit} then the
+diagonal of @var{A} is used, but if @var{Diag} is @code{CblasUnit} then
+the diagonal elements of the matrix @var{A} are taken as unity and are
+not referenced.
+@end deftypefun
+
+@deftypefun int gsl_blas_ssyrk (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, float @var{alpha}, const gsl_matrix_float * @var{A}, float @var{beta}, gsl_matrix_float * @var{C})
+@deftypefunx int gsl_blas_dsyrk (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, double @var{alpha}, const gsl_matrix * @var{A}, double @var{beta}, gsl_matrix * @var{C})
+@deftypefunx int gsl_blas_csyrk (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_complex_float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zsyrk (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_complex @var{beta}, gsl_matrix_complex * @var{C})
+@cindex SYRK, Level-3 BLAS
+These functions compute a rank-k update of the symmetric matrix @var{C},
+@math{C = \alpha A A^T + \beta C} when @var{Trans} is
+@code{CblasNoTrans} and @math{C = \alpha A^T A + \beta C} when
+@var{Trans} is @code{CblasTrans}. Since the matrix @var{C} is symmetric
+only its upper half or lower half need to be stored. When @var{Uplo} is
+@code{CblasUpper} then the upper triangle and diagonal of @var{C} are
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+and diagonal of @var{C} are used.
+@end deftypefun
+
+@deftypefun int gsl_blas_cherk (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, float @var{alpha}, const gsl_matrix_complex_float * @var{A}, float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zherk (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, double @var{alpha}, const gsl_matrix_complex * @var{A}, double @var{beta}, gsl_matrix_complex * @var{C})
+@cindex HERK, Level-3 BLAS
+These functions compute a rank-k update of the hermitian matrix @var{C},
+@math{C = \alpha A A^H + \beta C} when @var{Trans} is
+@code{CblasNoTrans} and @math{C = \alpha A^H A + \beta C} when
+@var{Trans} is @code{CblasTrans}. Since the matrix @var{C} is hermitian
+only its upper half or lower half need to be stored. When @var{Uplo} is
+@code{CblasUpper} then the upper triangle and diagonal of @var{C} are
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+and diagonal of @var{C} are used. The imaginary elements of the
+diagonal are automatically set to zero.
+@end deftypefun
+
+@deftypefun int gsl_blas_ssyr2k (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, float @var{alpha}, const gsl_matrix_float * @var{A}, const gsl_matrix_float * @var{B}, float @var{beta}, gsl_matrix_float * @var{C})
+@deftypefunx int gsl_blas_dsyr2k (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, double @var{alpha}, const gsl_matrix * @var{A}, const gsl_matrix * @var{B}, double @var{beta}, gsl_matrix * @var{C})
+@deftypefunx int gsl_blas_csyr2k (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_matrix_complex_float * @var{B}, const gsl_complex_float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zsyr2k (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{B}, const gsl_complex @var{beta}, gsl_matrix_complex * @var{C})
+@cindex SYR2K, Level-3 BLAS
+These functions compute a rank-2k update of the symmetric matrix @var{C},
+@math{C = \alpha A B^T + \alpha B A^T + \beta C} when @var{Trans} is
+@code{CblasNoTrans} and @math{C = \alpha A^T B + \alpha B^T A + \beta C} when
+@var{Trans} is @code{CblasTrans}. Since the matrix @var{C} is symmetric
+only its upper half or lower half need to be stored. When @var{Uplo} is
+@code{CblasUpper} then the upper triangle and diagonal of @var{C} are
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+and diagonal of @var{C} are used.
+@end deftypefun
+
+@deftypefun int gsl_blas_cher2k (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, const gsl_complex_float @var{alpha}, const gsl_matrix_complex_float * @var{A}, const gsl_matrix_complex_float * @var{B}, float @var{beta}, gsl_matrix_complex_float * @var{C})
+@deftypefunx int gsl_blas_zher2k (CBLAS_UPLO_t @var{Uplo}, CBLAS_TRANSPOSE_t @var{Trans}, const gsl_complex @var{alpha}, const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{B}, double @var{beta}, gsl_matrix_complex * @var{C})
+@cindex HER2K, Level-3 BLAS
+These functions compute a rank-2k update of the hermitian matrix @var{C},
+@math{C = \alpha A B^H + \alpha^* B A^H + \beta C} when @var{Trans} is
+@code{CblasNoTrans} and @math{C = \alpha A^H B + \alpha^* B^H A + \beta C} when
+@var{Trans} is @code{CblasConjTrans}. Since the matrix @var{C} is hermitian
+only its upper half or lower half need to be stored. When @var{Uplo} is
+@code{CblasUpper} then the upper triangle and diagonal of @var{C} are
+used, and when @var{Uplo} is @code{CblasLower} then the lower triangle
+and diagonal of @var{C} are used. The imaginary elements of the
+diagonal are automatically set to zero.
+@end deftypefun
+
+@node BLAS Examples
+@section Examples
+
+The following program computes the product of two matrices using the
+Level-3 @sc{blas} function @sc{dgemm},
+@tex
+\beforedisplay
+$$
+\left(
+\matrix{0.11&0.12&0.13\cr
+0.21&0.22&0.23\cr}
+\right)
+\left(
+\matrix{1011&1012\cr
+1021&1022\cr
+1031&1031\cr}
+\right)
+=
+\left(
+\matrix{367.76&368.12\cr
+674.06&674.72\cr}
+\right)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+[ 0.11 0.12 0.13 ] [ 1011 1012 ] [ 367.76 368.12 ]
+[ 0.21 0.22 0.23 ] [ 1021 1022 ] = [ 674.06 674.72 ]
+ [ 1031 1032 ]
+@end example
+
+@end ifinfo
+@noindent
+The matrices are stored in row major order, according to the C convention
+for arrays.
+
+@example
+@verbatiminclude examples/blas.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/blas.out
+@end example
+
+@node BLAS References and Further Reading
+@section References and Further Reading
+
+Information on the @sc{blas} standards, including both the legacy and
+draft interface standards, is available online from the @sc{blas}
+Homepage and @sc{blas} Technical Forum web-site.
+
+@itemize @asis
+@item
+@cite{BLAS Homepage} @*
+@uref{http://www.netlib.org/blas/}
+@item
+@cite{BLAS Technical Forum} @*
+@uref{http://www.netlib.org/cgi-bin/checkout/blast/blast.pl}
+@end itemize
+
+@noindent
+The following papers contain the specifications for Level 1, Level 2 and
+Level 3 @sc{blas}.
+
+@itemize @asis
+@item
+C. Lawson, R. Hanson, D. Kincaid, F. Krogh, ``Basic Linear Algebra
+Subprograms for Fortran Usage'', @cite{ACM Transactions on Mathematical
+Software}, Vol.@: 5 (1979), Pages 308--325.
+
+@item
+J.J. Dongarra, J. DuCroz, S. Hammarling, R. Hanson, ``An Extended Set of
+Fortran Basic Linear Algebra Subprograms'', @cite{ACM Transactions on
+Mathematical Software}, Vol.@: 14, No.@: 1 (1988), Pages 1--32.
+
+@item
+J.J. Dongarra, I. Duff, J. DuCroz, S. Hammarling, ``A Set of
+Level 3 Basic Linear Algebra Subprograms'', @cite{ACM Transactions on
+Mathematical Software}, Vol.@: 16 (1990), Pages 1--28.
+@end itemize
+
+@noindent
+Postscript versions of the latter two papers are available from
+@uref{http://www.netlib.org/blas/}. A @sc{cblas} wrapper for Fortran @sc{blas}
+libraries is available from the same location.
diff --git a/gsl-1.9/doc/bspline.eps b/gsl-1.9/doc/bspline.eps
new file mode 100644
index 0000000..899a890
--- /dev/null
+++ b/gsl-1.9/doc/bspline.eps
@@ -0,0 +1,6930 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.2
+%%Title: PostScript plot
+%%CreationDate: Tue Jan 16 12:56:43 2007
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 60 174 480 570
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.1 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.1 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 60 174 480 570
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 128.156 214.1855 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 174.236 214.1855 ] concat
+%I
+[
+(2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3226 9216
+3226 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3226 2304
+3226 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 220.316 214.1855 ] concat
+%I
+[
+(4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4147 9216
+4147 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4147 2304
+4147 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 266.396 214.1855 ] concat
+%I
+[
+(6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 312.476 214.1855 ] concat
+%I
+[
+(8)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5990 9216
+5990 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5990 2304
+5990 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 353.5119 214.1855 ] concat
+%I
+[
+(10)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 399.5919 214.1855 ] concat
+%I
+[
+(12)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 445.6719 214.1855 ] concat
+%I
+[
+(14)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8755 9216
+8755 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8755 2304
+8755 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2765 9216
+2765 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2765 2304
+2765 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3226 9216
+3226 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3226 2304
+3226 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4147 9216
+4147 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4147 2304
+4147 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5530 9216
+5530 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5530 2304
+5530 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5990 9216
+5990 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5990 2304
+5990 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7373 9216
+7373 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7373 2304
+7373 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8294 9216
+8294 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8294 2304
+8294 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8755 9216
+8755 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8755 2304
+8755 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 92.19974 229.8568 ] concat
+%I
+[
+(-1.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 92.19974 304.9872 ] concat
+%I
+[
+(-0.5)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3807
+9078 3807
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3807
+2442 3807
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 380.1176 ] concat
+%I
+[
+(0.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5309
+9078 5309
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5309
+2442 5309
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 455.2481 ] concat
+%I
+[
+(0.5)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6812
+9078 6812
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6812
+2442 6812
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 530.3785 ] concat
+%I
+[
+(1.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8314
+9078 8314
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8314
+2442 8314
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2605
+9161 2605
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2605
+2359 2605
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2905
+9161 2905
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2905
+2359 2905
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3206
+9161 3206
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3206
+2359 3206
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3506
+9161 3506
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3506
+2359 3506
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3807
+9161 3807
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3807
+2359 3807
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4107
+9161 4107
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4107
+2359 4107
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4408
+9161 4408
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4408
+2359 4408
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4708
+9161 4708
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4708
+2359 4708
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5009
+9161 5009
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5009
+2359 5009
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5309
+9161 5309
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5309
+2359 5309
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5610
+9161 5610
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5610
+2359 5610
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5910
+9161 5910
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5910
+2359 5910
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6211
+9161 6211
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6211
+2359 6211
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6511
+9161 6511
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6511
+2359 6511
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6812
+9161 6812
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6812
+2359 6812
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7112
+9161 7112
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7112
+2359 7112
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7413
+9161 7413
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7413
+2359 7413
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7713
+9161 7713
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7713
+2359 7713
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8014
+9161 8014
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8014
+2359 8014
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8314
+9161 8314
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8314
+2359 8314
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8615
+9161 8615
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8615
+2359 8615
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8915
+9161 8915
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8915
+2359 8915
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 34952
+1 0 0 [ 1.48 4.43 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5309
+9216 5309
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 301.464 191.5487 ] concat
+%I
+[
+(x)
+] Text
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 6.123032e-17 1 -1 6.123032e-17 64.69371 391.464 ] concat
+%I
+[
+(y)
+] Text
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 8355 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2339 8257 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2373 8739 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2408 8393 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2443 8393 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2478 7616 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2512 7173 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2547 7568 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2582 7628 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2617 7764 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2651 7336 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2686 6788 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2721 6805 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2756 6882 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2790 6892 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2825 6288 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2860 6068 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2894 6066 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2929 5665 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2964 5420 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2999 5657 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3033 5168 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3068 5000 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3103 4624 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3138 4542 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3172 4561 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3207 4386 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3242 3986 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3277 4015 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3311 4359 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3346 3720 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3381 3582 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3415 3507 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3450 2685 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3485 3536 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3520 3276 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3554 3157 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3589 3390 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3624 3613 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3659 2997 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3693 3459 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3728 3645 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3763 2900 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3798 2957 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3832 3808 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3867 2964 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3902 3818 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3936 3784 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3971 3337 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4006 3449 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4041 4017 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4075 3665 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4110 3849 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4145 4224 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4180 4274 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4214 4269 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4249 4787 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4284 4523 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4319 4887 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4353 4331 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4388 4877 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4423 5194 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4457 5212 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4492 5215 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4527 5101 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4562 6168 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4596 5909 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4631 6369 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4666 6238 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4701 5971 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4735 6653 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4770 6109 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4805 6687 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4840 6299 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4874 6593 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4909 7139 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4944 6869 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4978 7805 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5013 7386 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5048 7405 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5083 7102 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5117 6600 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5152 7019 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5187 7053 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5222 6198 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5256 6696 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5291 6200 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5326 6510 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5361 6625 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5395 6463 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5430 6702 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5465 6460 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5499 6002 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5534 6139 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5569 6339 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5604 6595 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5638 6718 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5673 6090 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5708 6010 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5743 6237 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5777 5921 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5812 5503 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5847 5678 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5882 6040 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5916 5976 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5951 5115 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5986 4902 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6021 4643 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6055 4515 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6090 4726 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6125 5199 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6159 4270 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6194 4277 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6229 4476 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6264 4506 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6298 5092 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6333 4441 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6368 4398 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6403 4027 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6437 4727 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6472 4070 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6507 4729 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6542 4265 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6576 3833 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6611 4219 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6646 4037 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6680 4422 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6715 4563 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6750 4431 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6785 4104 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6819 4431 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6854 4110 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6889 4187 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6924 4629 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6958 4513 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6993 4378 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7028 4726 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7063 4505 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7097 4728 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7132 4939 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7167 5710 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7201 4737 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7236 4819 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7271 5620 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7306 5621 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7340 5346 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7375 5295 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7410 5340 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7445 4740 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7479 5249 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7514 5600 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7549 5660 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7584 5695 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7618 5830 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7653 6059 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7688 5700 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7722 5933 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7757 5946 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7792 6036 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7827 6476 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7861 5687 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7896 6412 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7931 5820 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7966 6338 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8000 6261 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8035 6254 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8070 6383 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8105 6095 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8139 6208 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8174 6436 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8209 5986 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8243 5886 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8278 5670 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8313 6320 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8348 5897 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8382 5673 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8417 6298 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8452 5372 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8487 6177 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8521 5793 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8556 5846 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8591 6342 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8626 6048 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8660 5497 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8695 5352 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8730 5026 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8764 5160 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8799 5316 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8834 5032 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8869 5605 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8903 5114 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8938 4973 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8973 4843 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9008 5186 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9042 5601 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9077 5206 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9112 4806 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9147 4965 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9181 4774 10 Circ
+End
+
+Begin %I Circ
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+9216 4689 10 Circ
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 151
+2304 8656
+2350 8485
+2396 8302
+2442 8108
+2488 7904
+2534 7692
+2580 7472
+2627 7247
+2673 7016
+2719 6782
+2765 6546
+2811 6308
+2857 6071
+2903 5835
+2949 5601
+2995 5372
+3041 5148
+3087 4930
+3133 4719
+3180 4518
+3226 4326
+3272 4146
+3318 3979
+3364 3825
+3410 3686
+3456 3564
+3502 3459
+3548 3373
+3594 3307
+3640 3262
+3686 3240
+3732 3241
+3779 3264
+3825 3308
+3871 3372
+3917 3453
+3963 3551
+4009 3663
+4055 3789
+4101 3927
+4147 4075
+4193 4233
+4239 4398
+4285 4568
+4332 4744
+4378 4922
+4424 5102
+4470 5282
+4516 5461
+4562 5637
+4608 5809
+4654 5974
+4700 6133
+4746 6283
+4792 6422
+4838 6550
+4884 6665
+4931 6765
+4977 6848
+5023 6915
+5069 6962
+5115 6989
+5161 6996
+5207 6986
+5253 6958
+5299 6915
+5345 6857
+5391 6785
+5437 6702
+5484 6607
+5530 6503
+5576 6390
+5622 6270
+5668 6144
+5714 6012
+5760 5877
+5806 5739
+5852 5600
+5898 5461
+5944 5323
+5990 5187
+6036 5054
+6083 4926
+6129 4804
+6175 4689
+6221 4582
+6267 4485
+6313 4398
+6359 4323
+6405 4261
+6451 4214
+6497 4181
+6543 4163
+6589 4159
+6636 4167
+6682 4188
+6728 4219
+6774 4261
+6820 4313
+6866 4373
+6912 4441
+6958 4515
+7004 4596
+7050 4682
+7096 4772
+7142 4865
+7188 4961
+7235 5059
+7281 5158
+7327 5256
+7373 5354
+7419 5450
+7465 5544
+7511 5634
+7557 5720
+7603 5801
+7649 5876
+7695 5944
+7741 6004
+7788 6056
+7834 6098
+7880 6131
+7926 6153
+7972 6166
+8018 6171
+8064 6167
+8110 6156
+8156 6137
+8202 6111
+8248 6079
+8294 6041
+8340 5998
+8387 5949
+8433 5897
+8479 5840
+8525 5781
+8571 5718
+8617 5653
+8663 5586
+8709 5518
+8755 5448
+8801 5379
+8847 5309
+8893 5240
+8940 5172
+8986 5105
+9032 5040
+9078 4978
+9124 4919
+9170 4864
+9216 4812
+151 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/bspline.texi b/gsl-1.9/doc/bspline.texi
new file mode 100644
index 0000000..718e280
--- /dev/null
+++ b/gsl-1.9/doc/bspline.texi
@@ -0,0 +1,158 @@
+@cindex basis splines, B-splines
+@cindex splines, basis
+
+This chapter describes functions for the computation of smoothing
+basis splines (B-splines). The header file @file{gsl_bspline.h}
+contains prototypes for the bspline functions and related declarations.
+
+@menu
+* Overview of B-splines::
+* Initializing the B-splines solver::
+* Constructing the knots vector::
+* Evaluation of B-spline basis functions::
+* Example programs for B-splines::
+* References and Further Reading::
+@end menu
+
+@node Overview of B-splines
+@section Overview
+@cindex basis splines, overview
+
+B-splines are commonly used as basis functions to fit smoothing
+curves to large data sets. To do this, the abscissa axis is
+broken up into some number of intervals, where the endpoints
+of each interval are called @dfn{breakpoints}. These breakpoints
+are then converted to @dfn{knots} by imposing various continuity
+and smoothness conditions at each interface. Given a nondecreasing
+knot vector @math{t = \{t_0, t_1, \dots, t_{n+k-1}\}}, the
+@math{n} basis splines of order @math{k} are defined by
+@tex
+\beforedisplay
+$$
+B_{i,1}(x) = \left\{\matrix{1, & t_i \le x < t_{i+1}\cr
+ 0, & else}\right.
+$$
+$$
+B_{i,k}(x) = \left[(x - t_i)/(t_{i+k-1} - t_i)\right] B_{i,k-1}(x) +
+ \left[(t_{i+k} - x)/(t_{i+k} - t_{i+1})\right] B_{i+1,k-1}(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+B_(i,1)(x) = (1, t_i <= x < t_(i+1)
+ (0, else
+B_(i,k)(x) = [(x - t_i)/(t_(i+k-1) - t_i)] B_(i,k-1)(x) + [(t_(i+k) - x)/(t_(i+k) - t_(i+1))] B_(i+1,k-1)(x)
+@end example
+
+@end ifinfo
+for @math{i = 0, \dots, n-1}. The common case of cubic B-splines
+is given by @math{k = 4}. The above recurrence relation can be
+evaluated in a numerically stable way by the de Boor algorithm.
+
+If we define appropriate knots on an interval @math{[a,b]} then
+the B-spline basis functions form a complete set on that interval.
+Therefore we can expand a smoothing function as
+@tex
+\beforedisplay
+$$
+f(x) = \sum_{i=0}^{n-1} c_i B_{i,k}(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f(x) = \sum_i c_i B_(i,k)(x)
+@end example
+
+@end ifinfo
+given enough @math{(x_j, f(x_j))} data pairs. The @math{c_i} can
+be readily obtained from a least-squares fit.
+
+@node Initializing the B-splines solver
+@section Initializing the B-splines solver
+@cindex basis splines, initializing
+
+@deftypefun {gsl_bspline_workspace *} gsl_bspline_alloc (const size_t @var{k}, const size_t @var{nbreak})
+This function allocates a workspace for computing B-splines of order
+@var{k}. The number of breakpoints is given by @var{nbreak}. This
+leads to @math{n = nbreak + k - 2} basis functions. Cubic B-splines
+are specified by @math{k = 4}. The size of the workspace is
+@math{O(5k + nbreak)}.
+@end deftypefun
+
+@deftypefun void gsl_bspline_free (gsl_bspline_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@node Constructing the knots vector
+@section Constructing the knots vector
+@cindex knots
+
+@deftypefun int gsl_bspline_knots (const gsl_vector * @var{breakpts}, gsl_bspline_workspace * @var{w})
+This function computes the knots associated with the given breakpoints
+and stores them internally in @code{w->knots}.
+@end deftypefun
+
+@deftypefun int gsl_bspline_knots_uniform (const double a, const double b, gsl_bspline_workspace * @var{w})
+This function assumes uniformly spaced breakpoints on @math{[a,b]}
+and constructs the corresponding knot vector using the previously
+specified @var{nbreak} parameter. The knots are stored in
+@code{w->knots}.
+@end deftypefun
+
+@node Evaluation of B-spline basis functions
+@section Evaluation of B-splines
+@cindex basis splines, evaluation
+
+@deftypefun int gsl_bspline_eval (const double @var{x}, gsl_vector * @var{B}, gsl_bspline_workspace * @var{w})
+This function evaluates all B-spline basis functions at the position
+@var{x} and stores them in @var{B}, so that the @math{i}th element
+of @var{B} is @math{B_i(x)}. @var{B} must be of length
+@math{n = nbreak + k - 2}. This value is also stored in @code{w->n}.
+It is far more efficient to compute all of the basis functions at
+once than to compute them individually, due to the nature of the
+defining recurrence relation.
+@end deftypefun
+
+@node Example programs for B-splines
+@section Example programs for B-splines
+@cindex basis splines, examples
+
+The following program computes a linear least squares fit to data using
+cubic B-spline basis functions with uniform breakpoints. The data is
+generated from the curve @math{y(x) = \cos{(x)} \exp{(-0.1 x)}} on
+@math{[0, 15]} with gaussian noise added.
+
+@example
+@verbatiminclude examples/bspline.c
+@end example
+
+The output can be plotted with @sc{gnu} @code{graph}.
+
+@example
+$ ./a.out > bspline.dat
+$ graph -T ps -X x -Y y -x 0 15 -y -1 1.3 < bspline.dat > bspline.ps
+@end example
+
+@iftex
+@sp 1
+@center @image{bspline,3.4in}
+@end iftex
+
+@node References and Further Reading
+@section References and Further Reading
+
+Further information on the algorithms described in this section can be
+found in the following book,
+
+@itemize @asis
+C. de Boor, @cite{A Practical Guide to Splines} (1978), Springer-Verlag,
+ISBN 0-387-90356-9.
+@end itemize
+
+@noindent
+A large collection of B-spline routines is available in the
+@sc{pppack} library available at @uref{http://www.netlib.org/pppack}.
diff --git a/gsl-1.9/doc/calc.sty b/gsl-1.9/doc/calc.sty
new file mode 100644
index 0000000..086273e
--- /dev/null
+++ b/gsl-1.9/doc/calc.sty
@@ -0,0 +1,150 @@
+%%
+%% This is file `calc.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% calc.dtx (with options: `package')
+
+%% File `calc.dtx'.
+%% Copyright (C) 1992--1995 Kresten Krab Thorup and Frank Jensen.
+%% All rights reserved.
+
+\def\fileversion{v4.0c (TEST)}
+\def\filedate{1995/04/10}
+
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{calc}[\filedate\space\fileversion]
+\typeout{Package: `calc' \fileversion\space <\filedate> (KKT and FJ)}
+\def\calc@assign@generic#1#2#3#4{\let\calc@A#1\let\calc@B#2%
+ \expandafter\calc@open\expandafter(#4!%
+ \global\calc@A\calc@B\endgroup#3\calc@B}
+\def\calc@assign@count{\calc@assign@generic\calc@Acount\calc@Bcount}
+\def\calc@assign@dimen{\calc@assign@generic\calc@Adimen\calc@Bdimen}
+\def\calc@assign@skip{\calc@assign@generic\calc@Askip\calc@Bskip}
+\newcount\calc@Acount \newcount\calc@Bcount
+\newdimen\calc@Adimen \newdimen\calc@Bdimen
+\newskip\calc@Askip \newskip\calc@Bskip
+\def\setcounter#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}%
+ {\calc@assign@count{\global\csname c@#1\endcsname}{#2}}}
+\def\addtocounter#1#2{\@ifundefined{c@#1}{\@nocounterr{#1}}%
+ {\calc@assign@count{\global\advance\csname c@#1\endcsname}{#2}}}
+\DeclareRobustCommand\setlength{\calc@assign@skip}
+\DeclareRobustCommand\addtolength[1]{\calc@assign@skip{\advance#1}}
+\def\calc@pre@scan#1{%
+ \ifx(#1%
+ \let\calc@next\calc@open
+ \else
+ \let\calc@next\calc@numeric
+ \fi
+ \calc@next#1}
+\def\calc@open({\begingroup\aftergroup\calc@initB
+ \begingroup\aftergroup\calc@initB
+ \calc@pre@scan}
+\def\calc@initB{\calc@B\calc@A}
+\def\calc@numeric{\afterassignment\calc@post@scan \global\calc@A}
+\def\calc@post@scan#1{%
+ \ifx#1!\let\calc@next\endgroup \else
+ \ifx#1+\let\calc@next\calc@add \else
+ \ifx#1-\let\calc@next\calc@subtract \else
+ \ifx#1*\let\calc@next\calc@multiplyx \else
+ \ifx#1/\let\calc@next\calc@dividex \else
+ \ifx#1)\let\calc@next\calc@close \else \calc@error#1%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \calc@next}
+\def\calc@add{\calc@generic@add\calc@addAtoB}
+\def\calc@subtract{\calc@generic@add\calc@subtractAfromB}
+\def\calc@generic@add#1{\endgroup\global\calc@A\calc@B\endgroup
+ \begingroup\aftergroup#1\begingroup\aftergroup\calc@initB
+ \calc@pre@scan}
+\def\calc@addAtoB{\advance\calc@B\calc@A}
+\def\calc@subtractAfromB{\advance\calc@B-\calc@A}
+\def\calc@multiplyx#1{\def\calc@tmp{#1}%
+ \ifx\calc@tmp\calc@ratio@x \let\calc@next\calc@ratio@multiply \else
+ \ifx\calc@tmp\calc@real@x \let\calc@next\calc@real@multiply \else
+ \let\calc@next\calc@multiply
+ \fi
+ \fi
+ \calc@next#1}
+\def\calc@dividex#1{\def\calc@tmp{#1}%
+ \ifx\calc@tmp\calc@ratio@x \let\calc@next\calc@ratio@divide \else
+ \ifx\calc@tmp\calc@real@x \let\calc@next\calc@real@divide \else
+ \let\calc@next\calc@divide
+ \fi
+ \fi
+ \calc@next#1}
+\def\calc@ratio@x{\ratio}
+\def\calc@real@x{\real}
+\def\calc@multiply{\calc@generic@multiply\calc@multiplyBbyA}
+\def\calc@divide{\calc@generic@multiply\calc@divideBbyA}
+\def\calc@generic@multiply#1{\endgroup\begingroup
+ \let\calc@A\calc@Acount \let\calc@B\calc@Bcount
+ \aftergroup#1\calc@pre@scan}
+\def\calc@multiplyBbyA{\multiply\calc@B\calc@Acount}
+\def\calc@divideBbyA{\divide\calc@B\calc@Acount}
+\def\calc@close
+ {\endgroup\global\calc@A\calc@B
+ \endgroup\global\calc@A\calc@B
+ \calc@post@scan}
+\def\calc@ratio@multiply\ratio{\calc@ratio@evaluate}
+\def\calc@ratio@divide\ratio#1#2{\calc@ratio@evaluate{#2}{#1}}
+\let\calc@numerator=\calc@Bcount
+\newcount\calc@denominator
+\def\calc@ratio@evaluate#1#2{%
+ \endgroup\begingroup
+ \calc@assign@dimen\calc@numerator{#1}%
+ \calc@assign@dimen\calc@denominator{#2}%
+ \gdef\calc@the@ratio{}%
+ \ifnum\calc@numerator<0 \calc@numerator-\calc@numerator
+ \gdef\calc@the@ratio{-}%
+ \fi
+ \ifnum\calc@denominator<0 \calc@denominator-\calc@denominator
+ \xdef\calc@the@ratio{\calc@the@ratio-}%
+ \fi
+ \calc@Acount\calc@numerator
+ \divide\calc@Acount\calc@denominator
+ \xdef\calc@the@ratio{\calc@the@ratio\number\calc@Acount.}%
+ \calc@next@digit \calc@next@digit \calc@next@digit
+ \calc@next@digit \calc@next@digit \calc@next@digit
+ \endgroup
+ \calc@multiply@by@real\calc@the@ratio
+ \begingroup
+ \calc@post@scan}
+\def\calc@next@digit{%
+ \multiply\calc@Acount\calc@denominator
+ \advance\calc@numerator -\calc@Acount
+ \multiply\calc@numerator 10
+ \calc@Acount\calc@numerator
+ \divide\calc@Acount\calc@denominator
+ \xdef\calc@the@ratio{\calc@the@ratio\number\calc@Acount}}
+\def\calc@multiply@by@real#1{\calc@Bdimen #1\calc@B \calc@B\calc@Bdimen}
+\def\calc@real@multiply\real#1{\endgroup
+ \calc@multiply@by@real{#1}\begingroup
+ \calc@post@scan}
+\def\calc@real@divide\real#1{\calc@ratio@evaluate{1pt}{#1pt}}
+\def\calc@error#1{%
+ \errhelp{Calc error: I expected to see one of: + - * / )}%
+ \errmessage{Invalid character `#1' in arithmetic expression}}
+\endinput
+%%
+%% End of file `calc.sty'.
diff --git a/gsl-1.9/doc/cblas.texi b/gsl-1.9/doc/cblas.texi
new file mode 100644
index 0000000..75bf7a7
--- /dev/null
+++ b/gsl-1.9/doc/cblas.texi
@@ -0,0 +1,514 @@
+@cindex Low-level CBLAS
+@cindex CBLAS, Low-level interface
+@cindex BLAS, Low-level C interface
+@cindex Basic Linear Algebra Subroutines (BLAS)
+The prototypes for the low-level @sc{cblas} functions are declared in
+the file @code{gsl_cblas.h}. For the definition of the functions
+consult the documentation available from Netlib (@pxref{BLAS References
+and Further Reading}).
+
+@menu
+* Level 1 CBLAS Functions::
+* Level 2 CBLAS Functions::
+* Level 3 CBLAS Functions::
+* GSL CBLAS Examples::
+@end menu
+
+@node Level 1 CBLAS Functions
+@section Level 1
+
+@deftypefun float cblas_sdsdot (const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, const float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun double cblas_dsdot (const int @var{N}, const float * @var{x}, const int @var{incx}, const float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun float cblas_sdot (const int @var{N}, const float * @var{x}, const int @var{incx}, const float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun double cblas_ddot (const int @var{N}, const double * @var{x}, const int @var{incx}, const double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_cdotu_sub (const int @var{N}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{dotu})
+@end deftypefun
+
+@deftypefun void cblas_cdotc_sub (const int @var{N}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{dotc})
+@end deftypefun
+
+@deftypefun void cblas_zdotu_sub (const int @var{N}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{dotu})
+@end deftypefun
+
+@deftypefun void cblas_zdotc_sub (const int @var{N}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{dotc})
+@end deftypefun
+
+@deftypefun float cblas_snrm2 (const int @var{N}, const float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun float cblas_sasum (const int @var{N}, const float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun double cblas_dnrm2 (const int @var{N}, const double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun double cblas_dasum (const int @var{N}, const double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun float cblas_scnrm2 (const int @var{N}, const void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun float cblas_scasum (const int @var{N}, const void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun double cblas_dznrm2 (const int @var{N}, const void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun double cblas_dzasum (const int @var{N}, const void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun CBLAS_INDEX cblas_isamax (const int @var{N}, const float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun CBLAS_INDEX cblas_idamax (const int @var{N}, const double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun CBLAS_INDEX cblas_icamax (const int @var{N}, const void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun CBLAS_INDEX cblas_izamax (const int @var{N}, const void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_sswap (const int @var{N}, float * @var{x}, const int @var{incx}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_scopy (const int @var{N}, const float * @var{x}, const int @var{incx}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_saxpy (const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dswap (const int @var{N}, double * @var{x}, const int @var{incx}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dcopy (const int @var{N}, const double * @var{x}, const int @var{incx}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_daxpy (const int @var{N}, const double @var{alpha}, const double * @var{x}, const int @var{incx}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_cswap (const int @var{N}, void * @var{x}, const int @var{incx}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_ccopy (const int @var{N}, const void * @var{x}, const int @var{incx}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_caxpy (const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zswap (const int @var{N}, void * @var{x}, const int @var{incx}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zcopy (const int @var{N}, const void * @var{x}, const int @var{incx}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zaxpy (const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_srotg (float * @var{a}, float * @var{b}, float * @var{c}, float * @var{s})
+@end deftypefun
+
+@deftypefun void cblas_srotmg (float * @var{d1}, float * @var{d2}, float * @var{b1}, const float @var{b2}, float * @var{P})
+@end deftypefun
+
+@deftypefun void cblas_srot (const int @var{N}, float * @var{x}, const int @var{incx}, float * @var{y}, const int @var{incy}, const float @var{c}, const float @var{s})
+@end deftypefun
+
+@deftypefun void cblas_srotm (const int @var{N}, float * @var{x}, const int @var{incx}, float * @var{y}, const int @var{incy}, const float * @var{P})
+@end deftypefun
+
+@deftypefun void cblas_drotg (double * @var{a}, double * @var{b}, double * @var{c}, double * @var{s})
+@end deftypefun
+
+@deftypefun void cblas_drotmg (double * @var{d1}, double * @var{d2}, double * @var{b1}, const double @var{b2}, double * @var{P})
+@end deftypefun
+
+@deftypefun void cblas_drot (const int @var{N}, double * @var{x}, const int @var{incx}, double * @var{y}, const int @var{incy}, const double @var{c}, const double @var{s})
+@end deftypefun
+
+@deftypefun void cblas_drotm (const int @var{N}, double * @var{x}, const int @var{incx}, double * @var{y}, const int @var{incy}, const double * @var{P})
+@end deftypefun
+
+@deftypefun void cblas_sscal (const int @var{N}, const float @var{alpha}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dscal (const int @var{N}, const double @var{alpha}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_cscal (const int @var{N}, const void * @var{alpha}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_zscal (const int @var{N}, const void * @var{alpha}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_csscal (const int @var{N}, const float @var{alpha}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_zdscal (const int @var{N}, const double @var{alpha}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@node Level 2 CBLAS Functions
+@section Level 2
+
+@deftypefun void cblas_sgemv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{x}, const int @var{incx}, const float @var{beta}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_sgbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const int @var{KL}, const int @var{KU}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{x}, const int @var{incx}, const float @var{beta}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_strmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const float * @var{A}, const int @var{lda}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_stbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const float * @var{A}, const int @var{lda}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_stpmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const float * @var{Ap}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_strsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const float * @var{A}, const int @var{lda}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_stbsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const float * @var{A}, const int @var{lda}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_stpsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const float * @var{Ap}, float * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dgemv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{x}, const int @var{incx}, const double @var{beta}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dgbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const int @var{KL}, const int @var{KU}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{x}, const int @var{incx}, const double @var{beta}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dtrmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const double * @var{A}, const int @var{lda}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dtbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const double * @var{A}, const int @var{lda}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dtpmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const double * @var{Ap}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dtrsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const double * @var{A}, const int @var{lda}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dtbsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const double * @var{A}, const int @var{lda}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_dtpsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const double * @var{Ap}, double * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_cgemv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_cgbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const int @var{KL}, const int @var{KU}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_ctrmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ctbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ctpmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{Ap}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ctrsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ctbsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ctpsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{Ap}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_zgemv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zgbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_TRANSPOSE @var{TransA}, const int @var{M}, const int @var{N}, const int @var{KL}, const int @var{KU}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_ztrmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ztbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ztpmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{Ap}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ztrsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ztbsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const int @var{K}, const void * @var{A}, const int @var{lda}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ztpsv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{N}, const void * @var{Ap}, void * @var{x}, const int @var{incx})
+@end deftypefun
+
+@deftypefun void cblas_ssymv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{x}, const int @var{incx}, const float @var{beta}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_ssbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const int @var{K}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{x}, const int @var{incx}, const float @var{beta}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_sspmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const float * @var{Ap}, const float * @var{x}, const int @var{incx}, const float @var{beta}, float * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_sger (const enum CBLAS_ORDER @var{order}, const int @var{M}, const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, const float * @var{y}, const int @var{incy}, float * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_ssyr (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, float * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_sspr (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, float * @var{Ap})
+@end deftypefun
+
+@deftypefun void cblas_ssyr2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, const float * @var{y}, const int @var{incy}, float * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_sspr2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const float * @var{x}, const int @var{incx}, const float * @var{y}, const int @var{incy}, float * @var{A})
+@end deftypefun
+
+@deftypefun void cblas_dsymv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{x}, const int @var{incx}, const double @var{beta}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dsbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const int @var{K}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{x}, const int @var{incx}, const double @var{beta}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dspmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const double * @var{Ap}, const double * @var{x}, const int @var{incx}, const double @var{beta}, double * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_dger (const enum CBLAS_ORDER @var{order}, const int @var{M}, const int @var{N}, const double @var{alpha}, const double * @var{x}, const int @var{incx}, const double * @var{y}, const int @var{incy}, double * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_dsyr (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const double * @var{x}, const int @var{incx}, double * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_dspr (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const double * @var{x}, const int @var{incx}, double * @var{Ap})
+@end deftypefun
+
+@deftypefun void cblas_dsyr2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const double * @var{x}, const int @var{incx}, const double * @var{y}, const int @var{incy}, double * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_dspr2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const double * @var{x}, const int @var{incx}, const double * @var{y}, const int @var{incy}, double * @var{A})
+@end deftypefun
+
+@deftypefun void cblas_chemv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_chbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_chpmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{Ap}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_cgeru (const enum CBLAS_ORDER @var{order}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_cgerc (const enum CBLAS_ORDER @var{order}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_cher (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const void * @var{x}, const int @var{incx}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_chpr (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const float @var{alpha}, const void * @var{x}, const int @var{incx}, void * @var{A})
+@end deftypefun
+
+@deftypefun void cblas_cher2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_chpr2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{Ap})
+@end deftypefun
+
+@deftypefun void cblas_zhemv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zhbmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zhpmv (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{Ap}, const void * @var{x}, const int @var{incx}, const void * @var{beta}, void * @var{y}, const int @var{incy})
+@end deftypefun
+
+@deftypefun void cblas_zgeru (const enum CBLAS_ORDER @var{order}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_zgerc (const enum CBLAS_ORDER @var{order}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_zher (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const void * @var{x}, const int @var{incx}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_zhpr (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const double @var{alpha}, const void * @var{x}, const int @var{incx}, void * @var{A})
+@end deftypefun
+
+@deftypefun void cblas_zher2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{A}, const int @var{lda})
+@end deftypefun
+
+@deftypefun void cblas_zhpr2 (const enum CBLAS_ORDER @var{order}, const enum CBLAS_UPLO @var{Uplo}, const int @var{N}, const void * @var{alpha}, const void * @var{x}, const int @var{incx}, const void * @var{y}, const int @var{incy}, void * @var{Ap})
+@end deftypefun
+
+@node Level 3 CBLAS Functions
+@section Level 3
+
+
+@deftypefun void cblas_sgemm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_TRANSPOSE @var{TransB}, const int @var{M}, const int @var{N}, const int @var{K}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{B}, const int @var{ldb}, const float @var{beta}, float * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_ssymm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const int @var{M}, const int @var{N}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{B}, const int @var{ldb}, const float @var{beta}, float * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_ssyrk (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float @var{beta}, float * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_ssyr2k (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, const float * @var{B}, const int @var{ldb}, const float @var{beta}, float * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_strmm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, float * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_strsm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const float @var{alpha}, const float * @var{A}, const int @var{lda}, float * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_dgemm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_TRANSPOSE @var{TransB}, const int @var{M}, const int @var{N}, const int @var{K}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{B}, const int @var{ldb}, const double @var{beta}, double * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_dsymm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const int @var{M}, const int @var{N}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{B}, const int @var{ldb}, const double @var{beta}, double * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_dsyrk (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double @var{beta}, double * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_dsyr2k (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, const double * @var{B}, const int @var{ldb}, const double @var{beta}, double * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_dtrmm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, double * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_dtrsm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const double @var{alpha}, const double * @var{A}, const int @var{lda}, double * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_cgemm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_TRANSPOSE @var{TransB}, const int @var{M}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_csymm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_csyrk (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_csyr2k (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_ctrmm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, void * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_ctrsm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, void * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_zgemm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_TRANSPOSE @var{TransB}, const int @var{M}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_zsymm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_zsyrk (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_zsyr2k (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_ztrmm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, void * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_ztrsm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{TransA}, const enum CBLAS_DIAG @var{Diag}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, void * @var{B}, const int @var{ldb})
+@end deftypefun
+
+@deftypefun void cblas_chemm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_cherk (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const float @var{alpha}, const void * @var{A}, const int @var{lda}, const float @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_cher2k (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const float @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_zhemm (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_SIDE @var{Side}, const enum CBLAS_UPLO @var{Uplo}, const int @var{M}, const int @var{N}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const void * @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_zherk (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const double @var{alpha}, const void * @var{A}, const int @var{lda}, const double @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_zher2k (const enum CBLAS_ORDER @var{Order}, const enum CBLAS_UPLO @var{Uplo}, const enum CBLAS_TRANSPOSE @var{Trans}, const int @var{N}, const int @var{K}, const void * @var{alpha}, const void * @var{A}, const int @var{lda}, const void * @var{B}, const int @var{ldb}, const double @var{beta}, void * @var{C}, const int @var{ldc})
+@end deftypefun
+
+@deftypefun void cblas_xerbla (int @var{p}, const char * @var{rout}, const char * @var{form}, ...)
+@end deftypefun
+
+@node GSL CBLAS Examples
+@section Examples
+
+The following program computes the product of two matrices using the
+Level-3 @sc{blas} function @sc{sgemm},
+@tex
+\beforedisplay
+$$
+\left(
+\matrix{0.11&0.12&0.13\cr
+0.21&0.22&0.23\cr}
+\right)
+\left(
+\matrix{1011&1012\cr
+1021&1022\cr
+1031&1031\cr}
+\right)
+=
+\left(
+\matrix{367.76&368.12\cr
+674.06&674.72\cr}
+\right)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+[ 0.11 0.12 0.13 ] [ 1011 1012 ] [ 367.76 368.12 ]
+[ 0.21 0.22 0.23 ] [ 1021 1022 ] = [ 674.06 674.72 ]
+ [ 1031 1032 ]
+@end example
+
+@end ifinfo
+@noindent
+The matrices are stored in row major order but could be stored in column
+major order if the first argument of the call to @code{cblas_sgemm} was
+changed to @code{CblasColMajor}.
+
+@example
+@verbatiminclude examples/cblas.c
+@end example
+
+@noindent
+To compile the program use the following command line,
+
+@example
+$ gcc -Wall demo.c -lgslcblas
+@end example
+
+@noindent
+There is no need to link with the main library @code{-lgsl} in this
+case as the @sc{cblas} library is an independent unit. Here is the output
+from the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/cblas.out
+@end example
diff --git a/gsl-1.9/doc/cheb.eps b/gsl-1.9/doc/cheb.eps
new file mode 100644
index 0000000..6e868af
--- /dev/null
+++ b/gsl-1.9/doc/cheb.eps
@@ -0,0 +1,3348 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: cheb.eps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Wed Apr 25 18:48:58 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%Orientation: Portrait
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+420 280 M
+63 0 V
+6549 0 R
+-63 0 V
+336 280 M
+(0) Rshow
+420 1198 M
+63 0 V
+6549 0 R
+-63 0 V
+-6633 0 R
+(0.2) Rshow
+420 2117 M
+63 0 V
+6549 0 R
+-63 0 V
+-6633 0 R
+(0.4) Rshow
+420 3035 M
+63 0 V
+6549 0 R
+-63 0 V
+-6633 0 R
+(0.6) Rshow
+420 3954 M
+63 0 V
+6549 0 R
+-63 0 V
+-6633 0 R
+(0.8) Rshow
+420 4872 M
+63 0 V
+6549 0 R
+-63 0 V
+-6633 0 R
+(1) Rshow
+420 280 M
+0 63 V
+0 4529 R
+0 -63 V
+420 140 M
+(0) Cshow
+1742 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.2) Cshow
+3065 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.4) Cshow
+4387 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.6) Cshow
+5710 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.8) Cshow
+7032 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(1) Cshow
+1.000 UL
+LTb
+420 280 M
+6612 0 V
+0 4592 V
+-6612 0 V
+420 280 L
+1.000 UL
+LT0
+420 1428 M
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+currentpoint stroke M
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 2296 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+currentpoint stroke M
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+1.000 UL
+LT1
+420 1331 M
+7 20 V
+6 19 V
+7 17 V
+6 16 V
+7 15 V
+7 14 V
+6 12 V
+7 12 V
+7 10 V
+6 10 V
+7 8 V
+6 8 V
+7 7 V
+7 6 V
+6 5 V
+7 5 V
+6 3 V
+7 4 V
+7 2 V
+6 2 V
+7 1 V
+6 1 V
+7 1 V
+7 -1 V
+6 0 V
+7 -1 V
+7 -2 V
+6 -1 V
+7 -3 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+6 -5 V
+7 -5 V
+7 -4 V
+6 -5 V
+7 -5 V
+7 -5 V
+6 -5 V
+7 -5 V
+6 -5 V
+7 -5 V
+7 -5 V
+6 -5 V
+7 -5 V
+6 -5 V
+7 -5 V
+7 -5 V
+6 -5 V
+7 -4 V
+6 -5 V
+7 -4 V
+7 -5 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -4 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 -1 V
+7 -2 V
+6 -1 V
+7 -1 V
+7 0 V
+6 -1 V
+7 -1 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+7 1 V
+6 0 V
+7 1 V
+6 1 V
+7 1 V
+7 1 V
+6 1 V
+7 2 V
+6 1 V
+7 2 V
+7 2 V
+6 2 V
+7 1 V
+6 3 V
+7 2 V
+7 2 V
+6 2 V
+7 3 V
+7 3 V
+6 2 V
+7 3 V
+6 3 V
+7 3 V
+7 3 V
+6 3 V
+7 3 V
+6 3 V
+7 4 V
+7 3 V
+6 3 V
+7 4 V
+7 3 V
+6 4 V
+7 3 V
+6 4 V
+7 4 V
+7 3 V
+6 4 V
+7 4 V
+6 4 V
+7 4 V
+7 3 V
+6 4 V
+7 4 V
+6 4 V
+7 4 V
+7 4 V
+6 3 V
+7 4 V
+7 4 V
+6 4 V
+7 4 V
+6 3 V
+7 4 V
+7 4 V
+6 3 V
+7 4 V
+6 4 V
+7 3 V
+7 4 V
+6 3 V
+7 4 V
+6 3 V
+7 3 V
+7 4 V
+6 3 V
+7 3 V
+7 3 V
+6 3 V
+7 3 V
+6 3 V
+7 3 V
+7 3 V
+6 3 V
+7 2 V
+6 3 V
+7 2 V
+7 3 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 1 V
+7 2 V
+6 1 V
+7 2 V
+7 1 V
+6 1 V
+7 1 V
+6 1 V
+7 1 V
+7 1 V
+6 0 V
+7 1 V
+7 1 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 -1 V
+7 0 V
+6 -1 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -2 V
+7 -1 V
+6 -2 V
+7 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -3 V
+6 -2 V
+7 -2 V
+6 -3 V
+7 -2 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -3 V
+7 -3 V
+6 -4 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -4 V
+6 -3 V
+7 -4 V
+7 -3 V
+6 -4 V
+7 -4 V
+6 -3 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -5 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -5 V
+6 -4 V
+7 -4 V
+7 -5 V
+6 -4 V
+7 -5 V
+6 -4 V
+7 -4 V
+7 -5 V
+6 -4 V
+7 -5 V
+6 -4 V
+7 -5 V
+7 -4 V
+6 -4 V
+7 -5 V
+6 -4 V
+7 -5 V
+7 -4 V
+6 -4 V
+7 -5 V
+7 -4 V
+6 -4 V
+7 -5 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -4 V
+7 -3 V
+6 -3 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -3 V
+7 -3 V
+6 -2 V
+7 -3 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -3 V
+6 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 -2 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 0 V
+7 0 V
+6 -1 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 1 V
+7 0 V
+7 1 V
+6 1 V
+7 0 V
+6 1 V
+7 2 V
+7 1 V
+6 1 V
+7 2 V
+7 2 V
+6 1 V
+7 2 V
+6 2 V
+7 3 V
+7 2 V
+6 3 V
+7 2 V
+6 3 V
+7 3 V
+7 3 V
+6 3 V
+7 4 V
+6 3 V
+7 4 V
+7 4 V
+6 4 V
+7 4 V
+7 4 V
+6 5 V
+7 4 V
+6 5 V
+7 5 V
+7 5 V
+6 5 V
+7 5 V
+6 6 V
+7 5 V
+7 6 V
+6 6 V
+7 6 V
+7 6 V
+6 6 V
+7 7 V
+6 6 V
+7 7 V
+7 7 V
+6 7 V
+7 7 V
+6 8 V
+7 7 V
+7 8 V
+6 8 V
+7 7 V
+6 8 V
+7 9 V
+7 8 V
+6 8 V
+7 9 V
+7 9 V
+6 9 V
+7 9 V
+6 9 V
+7 9 V
+7 9 V
+6 10 V
+currentpoint stroke M
+7 10 V
+6 9 V
+7 10 V
+7 10 V
+6 11 V
+7 10 V
+6 10 V
+7 11 V
+7 11 V
+6 10 V
+7 11 V
+7 11 V
+6 11 V
+7 12 V
+6 11 V
+7 12 V
+7 11 V
+6 12 V
+7 12 V
+6 12 V
+7 12 V
+7 12 V
+6 12 V
+7 12 V
+6 13 V
+7 12 V
+7 13 V
+6 13 V
+7 12 V
+7 13 V
+6 13 V
+7 13 V
+6 13 V
+7 14 V
+7 13 V
+6 13 V
+7 14 V
+6 13 V
+7 14 V
+7 14 V
+6 14 V
+7 13 V
+7 14 V
+6 14 V
+7 14 V
+6 14 V
+7 15 V
+7 14 V
+6 14 V
+7 14 V
+6 15 V
+7 14 V
+7 15 V
+6 14 V
+7 15 V
+6 14 V
+7 15 V
+7 15 V
+6 14 V
+7 15 V
+7 15 V
+6 15 V
+7 15 V
+6 14 V
+7 15 V
+7 15 V
+6 15 V
+7 15 V
+6 15 V
+7 15 V
+7 15 V
+6 15 V
+7 15 V
+6 15 V
+7 15 V
+7 15 V
+6 15 V
+7 15 V
+7 15 V
+6 15 V
+7 15 V
+6 15 V
+7 15 V
+7 15 V
+6 15 V
+7 15 V
+6 15 V
+7 15 V
+7 14 V
+6 15 V
+7 15 V
+6 15 V
+7 15 V
+7 14 V
+6 15 V
+7 15 V
+7 14 V
+6 15 V
+7 14 V
+6 15 V
+7 14 V
+7 14 V
+6 15 V
+7 14 V
+6 14 V
+7 14 V
+7 14 V
+6 14 V
+7 14 V
+7 14 V
+6 14 V
+7 14 V
+6 13 V
+7 14 V
+7 14 V
+6 13 V
+7 14 V
+6 13 V
+7 13 V
+7 13 V
+6 13 V
+7 13 V
+6 13 V
+7 13 V
+7 13 V
+6 13 V
+7 12 V
+7 13 V
+6 12 V
+7 12 V
+6 13 V
+7 12 V
+7 12 V
+6 12 V
+7 11 V
+6 12 V
+7 12 V
+7 11 V
+6 12 V
+7 11 V
+6 11 V
+7 11 V
+7 11 V
+6 11 V
+7 11 V
+7 10 V
+6 11 V
+7 10 V
+6 11 V
+7 10 V
+7 10 V
+6 10 V
+7 10 V
+6 9 V
+7 10 V
+7 9 V
+6 10 V
+7 9 V
+6 9 V
+7 9 V
+7 9 V
+6 9 V
+7 8 V
+7 9 V
+6 8 V
+7 8 V
+6 8 V
+7 8 V
+7 8 V
+6 8 V
+7 8 V
+6 7 V
+7 7 V
+7 8 V
+6 7 V
+7 7 V
+7 7 V
+6 6 V
+7 7 V
+6 6 V
+7 7 V
+7 6 V
+6 6 V
+7 6 V
+6 6 V
+7 5 V
+7 6 V
+6 5 V
+7 6 V
+6 5 V
+7 5 V
+7 5 V
+6 4 V
+7 5 V
+7 5 V
+6 4 V
+7 4 V
+6 5 V
+7 4 V
+7 3 V
+6 4 V
+7 4 V
+6 3 V
+7 4 V
+7 3 V
+6 3 V
+7 3 V
+6 3 V
+7 3 V
+7 3 V
+6 2 V
+7 3 V
+7 2 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 1 V
+6 2 V
+7 1 V
+7 1 V
+6 1 V
+7 1 V
+7 1 V
+6 1 V
+7 1 V
+6 0 V
+7 1 V
+7 0 V
+6 1 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 -1 V
+7 0 V
+7 -1 V
+6 0 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 -2 V
+6 -1 V
+7 -1 V
+7 -2 V
+6 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -2 V
+7 -3 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -3 V
+7 -2 V
+6 -2 V
+7 -3 V
+7 -2 V
+6 -3 V
+7 -3 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -3 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -2 V
+6 -3 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -2 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -3 V
+7 -2 V
+7 -3 V
+6 -2 V
+7 -3 V
+6 -2 V
+7 -2 V
+7 -3 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -3 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -1 V
+7 -2 V
+6 -1 V
+7 -2 V
+7 -1 V
+6 -2 V
+7 -1 V
+6 -1 V
+7 -2 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 -1 V
+6 -1 V
+7 0 V
+7 -1 V
+6 -1 V
+7 0 V
+6 -1 V
+7 -1 V
+7 0 V
+6 0 V
+7 -1 V
+6 0 V
+7 0 V
+7 0 V
+6 0 V
+7 -1 V
+7 0 V
+6 1 V
+7 0 V
+6 0 V
+7 0 V
+7 0 V
+6 1 V
+7 0 V
+6 0 V
+7 1 V
+7 1 V
+6 0 V
+7 1 V
+6 0 V
+7 1 V
+7 1 V
+6 1 V
+7 1 V
+7 1 V
+6 1 V
+7 1 V
+6 1 V
+7 1 V
+currentpoint stroke M
+7 1 V
+6 1 V
+7 1 V
+6 2 V
+7 1 V
+7 1 V
+6 2 V
+7 1 V
+6 2 V
+7 1 V
+7 2 V
+6 1 V
+7 2 V
+7 2 V
+6 1 V
+7 2 V
+6 2 V
+7 2 V
+7 1 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 2 V
+7 1 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 3 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 1 V
+6 2 V
+7 2 V
+6 2 V
+7 2 V
+7 2 V
+6 2 V
+7 1 V
+6 2 V
+7 2 V
+7 2 V
+6 1 V
+7 2 V
+7 2 V
+6 1 V
+7 2 V
+6 1 V
+7 2 V
+7 1 V
+6 1 V
+7 2 V
+6 1 V
+7 1 V
+7 2 V
+6 1 V
+7 1 V
+7 1 V
+6 1 V
+7 1 V
+6 1 V
+7 1 V
+7 0 V
+6 1 V
+7 1 V
+6 1 V
+7 0 V
+7 1 V
+6 0 V
+7 1 V
+6 0 V
+7 0 V
+7 0 V
+6 1 V
+7 0 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 -1 V
+6 0 V
+7 0 V
+6 -1 V
+7 0 V
+7 -1 V
+6 0 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 0 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 -2 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -2 V
+7 -1 V
+6 -2 V
+7 -1 V
+7 -2 V
+6 -1 V
+7 -2 V
+6 -2 V
+7 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -3 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -1 V
+7 -2 V
+7 -2 V
+6 -1 V
+7 -2 V
+7 -1 V
+6 -1 V
+7 -2 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 0 V
+6 -1 V
+7 -1 V
+7 0 V
+6 0 V
+7 0 V
+6 0 V
+7 0 V
+7 1 V
+6 0 V
+7 1 V
+7 1 V
+6 1 V
+7 1 V
+6 2 V
+7 2 V
+7 1 V
+6 3 V
+7 2 V
+6 3 V
+7 3 V
+7 3 V
+6 3 V
+7 4 V
+6 4 V
+7 4 V
+7 5 V
+6 5 V
+7 5 V
+7 6 V
+6 6 V
+7 6 V
+6 7 V
+7 7 V
+1.000 UL
+LT2
+420 1457 M
+7 -54 V
+6 0 V
+7 19 V
+6 19 V
+7 13 V
+7 3 V
+6 -4 V
+7 -11 V
+7 -12 V
+6 -12 V
+7 -11 V
+6 -6 V
+7 -3 V
+7 1 V
+6 5 V
+7 7 V
+6 9 V
+7 9 V
+7 9 V
+6 8 V
+7 6 V
+6 5 V
+7 1 V
+7 0 V
+6 -2 V
+7 -5 V
+7 -6 V
+6 -6 V
+7 -8 V
+6 -7 V
+7 -7 V
+7 -7 V
+6 -5 V
+7 -4 V
+6 -3 V
+7 -1 V
+7 0 V
+6 2 V
+7 3 V
+6 4 V
+7 5 V
+7 6 V
+6 6 V
+7 7 V
+7 6 V
+6 6 V
+7 5 V
+6 5 V
+7 4 V
+7 2 V
+6 2 V
+7 1 V
+6 -1 V
+7 -2 V
+7 -2 V
+6 -4 V
+7 -4 V
+6 -5 V
+7 -5 V
+7 -6 V
+6 -5 V
+7 -6 V
+7 -6 V
+6 -5 V
+7 -4 V
+6 -4 V
+7 -3 V
+7 -3 V
+6 -1 V
+7 -1 V
+6 0 V
+7 1 V
+7 2 V
+6 3 V
+7 3 V
+7 4 V
+6 4 V
+7 5 V
+6 5 V
+7 5 V
+7 6 V
+6 5 V
+7 5 V
+6 4 V
+7 5 V
+7 3 V
+6 4 V
+7 2 V
+6 2 V
+7 1 V
+7 1 V
+6 0 V
+7 -1 V
+7 -2 V
+6 -2 V
+7 -3 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -5 V
+6 -5 V
+7 -5 V
+7 -5 V
+6 -5 V
+7 -5 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -2 V
+7 -2 V
+6 -1 V
+7 -1 V
+6 0 V
+7 1 V
+7 1 V
+6 2 V
+7 2 V
+6 3 V
+7 4 V
+7 3 V
+6 5 V
+7 4 V
+7 5 V
+6 4 V
+7 5 V
+6 5 V
+7 5 V
+7 5 V
+6 4 V
+7 4 V
+6 4 V
+7 3 V
+7 3 V
+6 3 V
+7 1 V
+6 2 V
+7 1 V
+7 0 V
+6 0 V
+7 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+6 -3 V
+7 -3 V
+7 -4 V
+6 -4 V
+7 -5 V
+6 -4 V
+7 -5 V
+7 -5 V
+6 -4 V
+7 -5 V
+6 -5 V
+7 -5 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 0 V
+7 0 V
+6 0 V
+7 1 V
+7 2 V
+6 2 V
+7 2 V
+6 3 V
+7 3 V
+7 4 V
+6 4 V
+7 4 V
+7 5 V
+6 5 V
+7 5 V
+6 5 V
+7 5 V
+7 4 V
+6 5 V
+7 5 V
+6 4 V
+7 5 V
+7 4 V
+6 3 V
+7 3 V
+7 3 V
+6 3 V
+7 1 V
+6 2 V
+7 1 V
+7 0 V
+6 0 V
+7 -1 V
+6 -1 V
+7 -2 V
+7 -2 V
+6 -2 V
+7 -3 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -5 V
+7 -5 V
+6 -5 V
+7 -5 V
+6 -5 V
+7 -6 V
+7 -5 V
+6 -5 V
+7 -5 V
+6 -4 V
+7 -5 V
+7 -4 V
+6 -4 V
+7 -3 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -1 V
+7 -1 V
+7 -1 V
+6 0 V
+7 0 V
+6 1 V
+7 2 V
+7 2 V
+6 2 V
+7 3 V
+6 4 V
+7 3 V
+7 5 V
+6 4 V
+7 5 V
+6 5 V
+7 5 V
+7 6 V
+6 5 V
+7 6 V
+7 5 V
+6 6 V
+7 6 V
+6 5 V
+7 5 V
+7 5 V
+6 5 V
+7 4 V
+6 4 V
+7 4 V
+7 3 V
+6 3 V
+7 2 V
+7 1 V
+6 2 V
+7 0 V
+6 0 V
+7 0 V
+7 -1 V
+6 -2 V
+7 -2 V
+6 -2 V
+7 -4 V
+7 -3 V
+6 -4 V
+7 -5 V
+6 -4 V
+7 -6 V
+7 -5 V
+6 -6 V
+7 -6 V
+7 -6 V
+6 -6 V
+7 -6 V
+6 -7 V
+7 -6 V
+7 -6 V
+6 -6 V
+7 -6 V
+6 -5 V
+7 -6 V
+7 -5 V
+6 -4 V
+7 -4 V
+6 -4 V
+7 -3 V
+7 -3 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 0 V
+7 0 V
+6 1 V
+7 2 V
+7 2 V
+6 2 V
+7 3 V
+6 4 V
+7 4 V
+7 5 V
+6 5 V
+7 6 V
+6 6 V
+7 6 V
+7 7 V
+6 7 V
+7 7 V
+7 7 V
+6 8 V
+7 7 V
+6 7 V
+7 8 V
+7 7 V
+6 6 V
+7 7 V
+6 6 V
+7 6 V
+7 6 V
+6 5 V
+7 5 V
+7 4 V
+6 3 V
+7 3 V
+6 2 V
+7 2 V
+7 1 V
+6 0 V
+7 0 V
+6 -1 V
+7 -2 V
+7 -3 V
+6 -3 V
+7 -4 V
+6 -4 V
+7 -6 V
+7 -5 V
+6 -7 V
+7 -7 V
+7 -7 V
+6 -8 V
+7 -8 V
+6 -8 V
+7 -9 V
+7 -9 V
+6 -9 V
+7 -9 V
+6 -9 V
+7 -9 V
+7 -9 V
+6 -9 V
+7 -8 V
+6 -8 V
+7 -8 V
+7 -7 V
+6 -7 V
+7 -6 V
+7 -6 V
+6 -5 V
+7 -4 V
+6 -3 V
+7 -3 V
+7 -2 V
+6 -1 V
+7 0 V
+6 1 V
+7 1 V
+7 3 V
+6 3 V
+7 4 V
+7 6 V
+6 6 V
+7 6 V
+6 8 V
+7 8 V
+7 9 V
+6 10 V
+7 10 V
+6 11 V
+7 11 V
+7 11 V
+6 12 V
+7 12 V
+6 12 V
+7 13 V
+7 12 V
+6 12 V
+7 12 V
+7 12 V
+6 12 V
+7 11 V
+6 10 V
+7 10 V
+7 9 V
+6 9 V
+currentpoint stroke M
+7 7 V
+6 7 V
+7 5 V
+7 5 V
+6 4 V
+7 2 V
+6 1 V
+7 1 V
+7 -2 V
+6 -2 V
+7 -4 V
+7 -5 V
+6 -6 V
+7 -8 V
+6 -9 V
+7 -10 V
+7 -11 V
+6 -12 V
+7 -14 V
+6 -14 V
+7 -16 V
+7 -16 V
+6 -18 V
+7 -18 V
+6 -18 V
+7 -19 V
+7 -20 V
+6 -20 V
+7 -20 V
+7 -20 V
+6 -20 V
+7 -20 V
+6 -19 V
+7 -19 V
+7 -18 V
+6 -18 V
+7 -17 V
+6 -15 V
+7 -15 V
+7 -13 V
+6 -12 V
+7 -10 V
+7 -9 V
+6 -7 V
+7 -4 V
+6 -3 V
+7 -1 V
+7 2 V
+6 4 V
+7 6 V
+6 9 V
+7 12 V
+7 14 V
+6 16 V
+7 20 V
+6 22 V
+7 25 V
+7 28 V
+6 30 V
+7 33 V
+7 36 V
+6 38 V
+7 42 V
+6 43 V
+7 46 V
+7 49 V
+6 51 V
+7 53 V
+6 55 V
+7 58 V
+7 59 V
+6 61 V
+7 62 V
+6 64 V
+7 66 V
+7 66 V
+6 68 V
+7 68 V
+7 69 V
+6 69 V
+7 70 V
+6 70 V
+7 70 V
+7 70 V
+6 69 V
+7 69 V
+6 68 V
+7 67 V
+7 66 V
+6 65 V
+7 63 V
+6 62 V
+7 60 V
+7 59 V
+6 56 V
+7 55 V
+7 52 V
+6 50 V
+7 48 V
+6 45 V
+7 43 V
+7 40 V
+6 38 V
+7 35 V
+6 32 V
+7 29 V
+7 27 V
+6 24 V
+7 22 V
+7 18 V
+6 16 V
+7 14 V
+6 10 V
+7 9 V
+7 5 V
+6 4 V
+7 1 V
+6 -1 V
+7 -3 V
+7 -6 V
+6 -7 V
+7 -8 V
+6 -11 V
+7 -12 V
+7 -13 V
+6 -15 V
+7 -16 V
+7 -16 V
+6 -18 V
+7 -18 V
+6 -19 V
+7 -19 V
+7 -20 V
+6 -20 V
+7 -19 V
+6 -20 V
+7 -20 V
+7 -19 V
+6 -19 V
+7 -18 V
+6 -18 V
+7 -17 V
+7 -16 V
+6 -15 V
+7 -15 V
+7 -13 V
+6 -12 V
+7 -11 V
+6 -10 V
+7 -9 V
+7 -7 V
+6 -7 V
+7 -5 V
+6 -4 V
+7 -2 V
+7 -1 V
+6 0 V
+7 1 V
+6 2 V
+7 3 V
+7 5 V
+6 5 V
+7 6 V
+7 8 V
+6 8 V
+7 9 V
+6 9 V
+7 10 V
+7 11 V
+6 11 V
+7 11 V
+6 12 V
+7 12 V
+7 12 V
+6 12 V
+7 12 V
+7 12 V
+6 12 V
+7 11 V
+6 11 V
+7 11 V
+7 10 V
+6 10 V
+7 9 V
+6 8 V
+7 8 V
+7 7 V
+6 6 V
+7 6 V
+6 4 V
+7 4 V
+7 3 V
+6 2 V
+7 2 V
+7 0 V
+6 0 V
+7 -2 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -4 V
+7 -5 V
+6 -6 V
+7 -6 V
+7 -7 V
+6 -7 V
+7 -7 V
+6 -8 V
+7 -8 V
+7 -9 V
+6 -9 V
+7 -8 V
+7 -9 V
+6 -9 V
+7 -9 V
+6 -8 V
+7 -9 V
+7 -8 V
+6 -8 V
+7 -7 V
+6 -7 V
+7 -7 V
+7 -6 V
+6 -6 V
+7 -5 V
+7 -5 V
+6 -4 V
+7 -3 V
+6 -3 V
+7 -2 V
+7 -1 V
+6 -1 V
+7 0 V
+6 0 V
+7 2 V
+7 2 V
+6 2 V
+7 3 V
+6 4 V
+7 4 V
+7 4 V
+6 5 V
+7 6 V
+7 6 V
+6 6 V
+7 6 V
+6 7 V
+7 7 V
+7 7 V
+6 7 V
+7 7 V
+6 7 V
+7 7 V
+7 7 V
+6 6 V
+7 7 V
+6 6 V
+7 6 V
+7 5 V
+6 5 V
+7 5 V
+7 4 V
+6 4 V
+7 3 V
+6 3 V
+7 2 V
+7 1 V
+6 1 V
+7 1 V
+6 0 V
+7 -1 V
+7 -1 V
+6 -2 V
+7 -2 V
+6 -3 V
+7 -3 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -5 V
+6 -5 V
+7 -5 V
+6 -6 V
+7 -6 V
+7 -6 V
+6 -6 V
+7 -6 V
+6 -6 V
+7 -5 V
+7 -6 V
+6 -6 V
+7 -5 V
+7 -6 V
+6 -5 V
+7 -4 V
+6 -5 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -3 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 -1 V
+7 0 V
+6 0 V
+7 1 V
+7 1 V
+6 2 V
+7 2 V
+7 3 V
+6 3 V
+7 3 V
+6 4 V
+7 4 V
+7 4 V
+6 5 V
+7 5 V
+6 5 V
+7 5 V
+7 5 V
+6 5 V
+7 6 V
+6 5 V
+7 5 V
+7 5 V
+6 5 V
+7 5 V
+7 4 V
+6 4 V
+7 4 V
+6 3 V
+7 4 V
+7 2 V
+6 2 V
+7 2 V
+6 2 V
+7 1 V
+7 0 V
+6 0 V
+7 -1 V
+6 -1 V
+7 -1 V
+7 -2 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -5 V
+6 -4 V
+7 -5 V
+6 -5 V
+7 -5 V
+7 -4 V
+6 -5 V
+7 -5 V
+7 -4 V
+6 -5 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -2 V
+6 -3 V
+7 -1 V
+7 -2 V
+6 0 V
+7 -1 V
+6 0 V
+7 1 V
+7 1 V
+6 1 V
+7 2 V
+7 2 V
+6 3 V
+7 3 V
+6 3 V
+7 3 V
+7 4 V
+6 4 V
+7 5 V
+6 4 V
+7 4 V
+7 5 V
+6 5 V
+7 4 V
+6 5 V
+7 4 V
+7 4 V
+6 4 V
+7 4 V
+7 3 V
+6 3 V
+7 3 V
+6 2 V
+7 2 V
+currentpoint stroke M
+7 1 V
+6 2 V
+7 0 V
+6 0 V
+7 0 V
+7 -1 V
+6 -1 V
+7 -2 V
+6 -2 V
+7 -2 V
+7 -3 V
+6 -3 V
+7 -4 V
+7 -3 V
+6 -4 V
+7 -4 V
+6 -5 V
+7 -4 V
+7 -4 V
+6 -5 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -4 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -2 V
+6 -2 V
+7 -1 V
+7 -1 V
+6 -1 V
+7 0 V
+6 1 V
+7 1 V
+7 1 V
+6 2 V
+7 3 V
+6 2 V
+7 3 V
+7 4 V
+6 3 V
+7 4 V
+7 4 V
+6 5 V
+7 4 V
+6 4 V
+7 5 V
+7 4 V
+6 4 V
+7 4 V
+6 3 V
+7 4 V
+7 3 V
+6 2 V
+7 3 V
+6 1 V
+7 2 V
+7 1 V
+6 0 V
+7 0 V
+7 -1 V
+6 -1 V
+7 -2 V
+6 -2 V
+7 -3 V
+7 -3 V
+6 -3 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -4 V
+6 -5 V
+7 -4 V
+7 -4 V
+6 -5 V
+7 -4 V
+6 -3 V
+7 -4 V
+7 -3 V
+6 -3 V
+7 -2 V
+6 -2 V
+7 -1 V
+7 0 V
+6 0 V
+7 0 V
+6 1 V
+7 2 V
+7 2 V
+6 3 V
+7 3 V
+7 3 V
+6 4 V
+7 4 V
+6 5 V
+7 4 V
+7 5 V
+6 4 V
+7 4 V
+6 5 V
+7 4 V
+7 3 V
+6 3 V
+7 3 V
+6 2 V
+7 2 V
+7 0 V
+6 1 V
+7 -1 V
+7 -1 V
+6 -2 V
+7 -2 V
+6 -3 V
+7 -3 V
+7 -4 V
+6 -4 V
+7 -5 V
+6 -5 V
+7 -5 V
+7 -4 V
+6 -5 V
+7 -4 V
+6 -4 V
+7 -4 V
+7 -3 V
+6 -2 V
+7 -2 V
+7 -1 V
+6 0 V
+7 1 V
+6 1 V
+7 2 V
+7 3 V
+6 4 V
+7 4 V
+6 5 V
+7 4 V
+7 6 V
+6 5 V
+7 5 V
+7 5 V
+6 4 V
+7 4 V
+6 3 V
+7 3 V
+7 1 V
+6 1 V
+7 -1 V
+6 -1 V
+7 -3 V
+7 -3 V
+6 -4 V
+7 -5 V
+6 -6 V
+7 -6 V
+7 -5 V
+6 -6 V
+7 -6 V
+7 -4 V
+6 -4 V
+7 -3 V
+6 -2 V
+7 0 V
+7 1 V
+6 3 V
+7 4 V
+6 5 V
+7 5 V
+7 7 V
+6 7 V
+7 7 V
+6 6 V
+7 5 V
+7 4 V
+6 3 V
+7 0 V
+7 -2 V
+6 -4 V
+7 -5 V
+6 -8 V
+7 -8 V
+7 -9 V
+6 -8 V
+7 -6 V
+6 -4 V
+7 -2 V
+7 3 V
+6 6 V
+7 9 V
+6 12 V
+7 11 V
+7 10 V
+6 4 V
+7 -3 V
+7 -12 V
+6 -18 V
+7 -17 V
+6 0 V
+7 50 V
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/gsl-1.9/doc/cheb.texi b/gsl-1.9/doc/cheb.texi
new file mode 100644
index 0000000..0d97a86
--- /dev/null
+++ b/gsl-1.9/doc/cheb.texi
@@ -0,0 +1,177 @@
+@cindex Chebyshev series
+@cindex fitting, using Chebyshev polynomials
+@cindex interpolation, using Chebyshev polynomials
+
+This chapter describes routines for computing Chebyshev approximations
+to univariate functions. A Chebyshev approximation is a truncation of
+the series @math{f(x) = \sum c_n T_n(x)}, where the Chebyshev
+polynomials @math{T_n(x) = \cos(n \arccos x)} provide an orthogonal
+basis of polynomials on the interval @math{[-1,1]} with the weight
+function @c{$1 / \sqrt{1-x^2}$}
+@math{1 / \sqrt@{1-x^2@}}. The first few Chebyshev polynomials are,
+@math{T_0(x) = 1}, @math{T_1(x) = x}, @math{T_2(x) = 2 x^2 - 1}.
+For further information see Abramowitz & Stegun, Chapter 22.
+
+The functions described in this chapter are declared in the header file
+@file{gsl_chebyshev.h}.
+
+@menu
+* Chebyshev Definitions::
+* Creation and Calculation of Chebyshev Series::
+* Chebyshev Series Evaluation::
+* Derivatives and Integrals::
+* Chebyshev Approximation examples::
+* Chebyshev Approximation References and Further Reading::
+@end menu
+
+@node Chebyshev Definitions
+@section Definitions
+
+A Chebyshev series is stored using the following structure,
+
+@example
+typedef struct
+@{
+ double * c; /* coefficients c[0] .. c[order] */
+ int order; /* order of expansion */
+ double a; /* lower interval point */
+ double b; /* upper interval point */
+ ...
+@} gsl_cheb_series
+@end example
+
+@noindent
+The approximation is made over the range @math{[a,b]} using
+@var{order}+1 terms, including the coefficient @math{c[0]}. The series
+is computed using the following convention,
+@tex
+\beforedisplay
+$$
+f(x) = {c_0 \over 2} + \sum_{n=1} c_n T_n(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f(x) = (c_0 / 2) + \sum_@{n=1@} c_n T_n(x)
+@end example
+
+@end ifinfo
+@noindent
+which is needed when accessing the coefficients directly.
+
+@node Creation and Calculation of Chebyshev Series
+@section Creation and Calculation of Chebyshev Series
+
+@deftypefun {gsl_cheb_series *} gsl_cheb_alloc (const size_t @var{n})
+This function allocates space for a Chebyshev series of order @var{n}
+and returns a pointer to a new @code{gsl_cheb_series} struct.
+@end deftypefun
+
+@deftypefun void gsl_cheb_free (gsl_cheb_series * @var{cs})
+This function frees a previously allocated Chebyshev series @var{cs}.
+@end deftypefun
+
+@deftypefun int gsl_cheb_init (gsl_cheb_series * @var{cs}, const gsl_function * @var{f}, const double @var{a}, const double @var{b})
+This function computes the Chebyshev approximation @var{cs} for the
+function @var{f} over the range @math{(a,b)} to the previously specified
+order. The computation of the Chebyshev approximation is an
+@math{O(n^2)} process, and requires @math{n} function evaluations.
+@end deftypefun
+
+@node Chebyshev Series Evaluation
+@section Chebyshev Series Evaluation
+
+@deftypefun double gsl_cheb_eval (const gsl_cheb_series * @var{cs}, double @var{x})
+This function evaluates the Chebyshev series @var{cs} at a given point @var{x}.
+@end deftypefun
+
+@deftypefun int gsl_cheb_eval_err (const gsl_cheb_series * @var{cs}, const double @var{x}, double * @var{result}, double * @var{abserr})
+This function computes the Chebyshev series @var{cs} at a given point
+@var{x}, estimating both the series @var{result} and its absolute error
+@var{abserr}. The error estimate is made from the first neglected term
+in the series.
+@end deftypefun
+
+@deftypefun double gsl_cheb_eval_n (const gsl_cheb_series * @var{cs}, size_t @var{order}, double @var{x})
+This function evaluates the Chebyshev series @var{cs} at a given point
+@var{n}, to (at most) the given order @var{order}.
+@end deftypefun
+
+@deftypefun int gsl_cheb_eval_n_err (const gsl_cheb_series * @var{cs}, const size_t @var{order}, const double @var{x}, double * @var{result}, double * @var{abserr})
+This function evaluates a Chebyshev series @var{cs} at a given point
+@var{x}, estimating both the series @var{result} and its absolute error
+@var{abserr}, to (at most) the given order @var{order}. The error
+estimate is made from the first neglected term in the series.
+@end deftypefun
+
+@comment @deftypefun double gsl_cheb_eval_mode (const gsl_cheb_series * @var{cs}, double @var{x}, gsl_mode_t @var{mode})
+@comment @end deftypefun
+
+@comment @deftypefun int gsl_cheb_eval_mode_err (const gsl_cheb_series * @var{cs}, const double @var{x}, gsl_mode_t @var{mode}, double * @var{result}, double * @var{abserr})
+@comment Evaluate a Chebyshev series at a given point, using the default
+@comment order for double precision mode(s) and the single precision
+@comment order for other modes.
+@comment @end deftypefun
+
+
+@node Derivatives and Integrals
+@section Derivatives and Integrals
+
+The following functions allow a Chebyshev series to be differentiated or
+integrated, producing a new Chebyshev series. Note that the error
+estimate produced by evaluating the derivative series will be
+underestimated due to the contribution of higher order terms being
+neglected.
+
+@deftypefun int gsl_cheb_calc_deriv (gsl_cheb_series * @var{deriv}, const gsl_cheb_series * @var{cs})
+This function computes the derivative of the series @var{cs}, storing
+the derivative coefficients in the previously allocated @var{deriv}.
+The two series @var{cs} and @var{deriv} must have been allocated with
+the same order.
+@end deftypefun
+
+@deftypefun int gsl_cheb_calc_integ (gsl_cheb_series * @var{integ}, const gsl_cheb_series * @var{cs})
+This function computes the integral of the series @var{cs}, storing the
+integral coefficients in the previously allocated @var{integ}. The two
+series @var{cs} and @var{integ} must have been allocated with the same
+order. The lower limit of the integration is taken to be the left hand
+end of the range @var{a}.
+@end deftypefun
+
+@node Chebyshev Approximation examples
+@section Examples
+
+The following example program computes Chebyshev approximations to a
+step function. This is an extremely difficult approximation to make,
+due to the discontinuity, and was chosen as an example where
+approximation error is visible. For smooth functions the Chebyshev
+approximation converges extremely rapidly and errors would not be
+visible.
+
+@example
+@verbatiminclude examples/cheb.c
+@end example
+
+@noindent
+The output from the program gives the original function, 10-th order
+approximation and 40-th order approximation, all sampled at intervals of
+0.001 in @math{x}.
+
+@iftex
+@sp 1
+@center @image{cheb,3.4in}
+@end iftex
+
+@node Chebyshev Approximation References and Further Reading
+@section References and Further Reading
+
+The following paper describes the use of Chebyshev series,
+
+@itemize @asis
+@item
+R. Broucke, ``Ten Subroutines for the Manipulation of Chebyshev Series
+[C1] (Algorithm 446)''. @cite{Communications of the ACM} 16(4), 254--256
+(1973)
+@end itemize
diff --git a/gsl-1.9/doc/combination.texi b/gsl-1.9/doc/combination.texi
new file mode 100644
index 0000000..d9ef7e1
--- /dev/null
+++ b/gsl-1.9/doc/combination.texi
@@ -0,0 +1,221 @@
+@cindex combinations
+
+This chapter describes functions for creating and manipulating
+combinations. A combination @math{c} is represented by an array of
+@math{k} integers in the range 0 to @math{n-1}, where each value
+@math{c_i} occurs at most once. The combination @math{c} corresponds to
+indices of @math{k} elements chosen from an @math{n} element vector.
+Combinations are useful for iterating over all @math{k}-element subsets
+of a set.
+
+The functions described in this chapter are defined in the header file
+@file{gsl_combination.h}.
+
+@menu
+* The Combination struct::
+* Combination allocation::
+* Accessing combination elements::
+* Combination properties::
+* Combination functions::
+* Reading and writing combinations::
+* Combination Examples::
+* Combination References and Further Reading::
+@end menu
+
+@node The Combination struct
+@section The Combination struct
+
+A combination is defined by a structure containing three components, the
+values of @math{n} and @math{k}, and a pointer to the combination array.
+The elements of the combination array are all of type @code{size_t}, and
+are stored in increasing order. The @code{gsl_combination} structure
+looks like this,
+
+@example
+typedef struct
+@{
+ size_t n;
+ size_t k;
+ size_t *data;
+@} gsl_combination;
+@end example
+@comment
+
+@noindent
+
+@node Combination allocation
+@section Combination allocation
+
+@deftypefun {gsl_combination *} gsl_combination_alloc (size_t @var{n}, size_t @var{k})
+This function allocates memory for a new combination with parameters
+@var{n}, @var{k}. The combination is not initialized and its elements
+are undefined. Use the function @code{gsl_combination_calloc} if you
+want to create a combination which is initialized to the
+lexicographically first combination. A null pointer is returned if
+insufficient memory is available to create the combination.
+@end deftypefun
+
+@deftypefun {gsl_combination *} gsl_combination_calloc (size_t @var{n}, size_t @var{k})
+This function allocates memory for a new combination with parameters
+@var{n}, @var{k} and initializes it to the lexicographically first
+combination. A null pointer is returned if insufficient memory is
+available to create the combination.
+@end deftypefun
+
+@deftypefun void gsl_combination_init_first (gsl_combination * @var{c})
+This function initializes the combination @var{c} to the
+lexicographically first combination, i.e. @math{(0,1,2,@dots{},k-1)}.
+@end deftypefun
+
+@deftypefun void gsl_combination_init_last (gsl_combination * @var{c})
+This function initializes the combination @var{c} to the
+lexicographically last combination, i.e. @math{(n-k,n-k+1,@dots{},n-1)}.
+@end deftypefun
+
+@deftypefun void gsl_combination_free (gsl_combination * @var{c})
+This function frees all the memory used by the combination @var{c}.
+@end deftypefun
+
+@deftypefun int gsl_combination_memcpy (gsl_combination * @var{dest}, const gsl_combination * @var{src})
+This function copies the elements of the combination @var{src} into the
+combination @var{dest}. The two combinations must have the same size.
+@end deftypefun
+
+
+@node Accessing combination elements
+@section Accessing combination elements
+
+The following function can be used to access the elements of a combination.
+
+@deftypefun size_t gsl_combination_get (const gsl_combination * @var{c}, const size_t @var{i})
+This function returns the value of the @var{i}-th element of the
+combination @var{c}. If @var{i} lies outside the allowed range of 0 to
+@math{@var{k}-1} then the error handler is invoked and 0 is returned.
+@end deftypefun
+
+@node Combination properties
+@section Combination properties
+
+@deftypefun size_t gsl_combination_n (const gsl_combination * @var{c})
+This function returns the range (@math{n}) of the combination @var{c}.
+@end deftypefun
+
+@deftypefun size_t gsl_combination_k (const gsl_combination * @var{c})
+This function returns the number of elements (@math{k}) in the combination @var{c}.
+@end deftypefun
+
+@deftypefun {size_t *} gsl_combination_data (const gsl_combination * @var{c})
+This function returns a pointer to the array of elements in the
+combination @var{c}.
+@end deftypefun
+
+@deftypefun int gsl_combination_valid (gsl_combination * @var{c})
+@cindex checking combination for validity
+@cindex testing combination for validity
+This function checks that the combination @var{c} is valid. The @var{k}
+elements should lie in the range 0 to @math{@var{n}-1}, with each
+value occurring once at most and in increasing order.
+@end deftypefun
+
+@node Combination functions
+@section Combination functions
+
+@deftypefun int gsl_combination_next (gsl_combination * @var{c})
+@cindex iterating through combinations
+This function advances the combination @var{c} to the next combination
+in lexicographic order and returns @code{GSL_SUCCESS}. If no further
+combinations are available it returns @code{GSL_FAILURE} and leaves
+@var{c} unmodified. Starting with the first combination and
+repeatedly applying this function will iterate through all possible
+combinations of a given order.
+@end deftypefun
+
+@deftypefun int gsl_combination_prev (gsl_combination * @var{c})
+This function steps backwards from the combination @var{c} to the
+previous combination in lexicographic order, returning
+@code{GSL_SUCCESS}. If no previous combination is available it returns
+@code{GSL_FAILURE} and leaves @var{c} unmodified.
+@end deftypefun
+
+
+@node Reading and writing combinations
+@section Reading and writing combinations
+
+The library provides functions for reading and writing combinations to a
+file as binary data or formatted text.
+
+@deftypefun int gsl_combination_fwrite (FILE * @var{stream}, const gsl_combination * @var{c})
+This function writes the elements of the combination @var{c} to the
+stream @var{stream} in binary format. The function returns
+@code{GSL_EFAILED} if there was a problem writing to the file. Since the
+data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_combination_fread (FILE * @var{stream}, gsl_combination * @var{c})
+This function reads elements from the open stream @var{stream} into the
+combination @var{c} in binary format. The combination @var{c} must be
+preallocated with correct values of @math{n} and @math{k} since the
+function uses the size of @var{c} to determine how many bytes to read.
+The function returns @code{GSL_EFAILED} if there was a problem reading
+from the file. The data is assumed to have been written in the native
+binary format on the same architecture.
+@end deftypefun
+
+@deftypefun int gsl_combination_fprintf (FILE * @var{stream}, const gsl_combination * @var{c}, const char * @var{format})
+This function writes the elements of the combination @var{c}
+line-by-line to the stream @var{stream} using the format specifier
+@var{format}, which should be suitable for a type of @var{size_t}. On a
+GNU system the type modifier @code{Z} represents @code{size_t}, so
+@code{"%Zu\n"} is a suitable format. The function returns
+@code{GSL_EFAILED} if there was a problem writing to the file.
+@end deftypefun
+
+@deftypefun int gsl_combination_fscanf (FILE * @var{stream}, gsl_combination * @var{c})
+This function reads formatted data from the stream @var{stream} into the
+combination @var{c}. The combination @var{c} must be preallocated with
+correct values of @math{n} and @math{k} since the function uses the size of @var{c} to
+determine how many numbers to read. The function returns
+@code{GSL_EFAILED} if there was a problem reading from the file.
+@end deftypefun
+
+
+@node Combination Examples
+@section Examples
+The example program below prints all subsets of the set
+@math{@{0,1,2,3@}} ordered by size. Subsets of the same size are
+ordered lexicographically.
+
+@example
+@verbatiminclude examples/combination.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/combination.out
+@end example
+
+@noindent
+All 16 subsets are generated, and the subsets of each size are sorted
+lexicographically.
+
+
+@node Combination References and Further Reading
+@section References and Further Reading
+
+@noindent
+Further information on combinations can be found in,
+
+@itemize @asis
+@item
+Donald L. Kreher, Douglas R. Stinson, @cite{Combinatorial Algorithms:
+Generation, Enumeration and Search}, 1998, CRC Press LLC, ISBN
+084933988X
+@end itemize
+
+@noindent
+
+
diff --git a/gsl-1.9/doc/complex.texi b/gsl-1.9/doc/complex.texi
new file mode 100644
index 0000000..b84a7ac
--- /dev/null
+++ b/gsl-1.9/doc/complex.texi
@@ -0,0 +1,493 @@
+@cindex complex numbers
+
+The functions described in this chapter provide support for complex
+numbers. The algorithms take care to avoid unnecessary intermediate
+underflows and overflows, allowing the functions to be evaluated over
+as much of the complex plane as possible.
+
+@comment FIXME: this still needs to be
+@comment done for the csc,sec,cot,csch,sech,coth functions
+
+For multiple-valued functions the branch cuts have been chosen to follow
+the conventions of Abramowitz and Stegun in the @cite{Handbook of
+Mathematical Functions}. The functions return principal values which are
+the same as those in GNU Calc, which in turn are the same as those in
+@cite{Common Lisp, The Language (Second Edition)}@footnote{Note that the
+first edition uses different definitions.} and the HP-28/48 series of
+calculators.
+
+The complex types are defined in the header file @file{gsl_complex.h},
+while the corresponding complex functions and arithmetic operations are
+defined in @file{gsl_complex_math.h}.
+
+@menu
+* Complex numbers::
+* Properties of complex numbers::
+* Complex arithmetic operators::
+* Elementary Complex Functions::
+* Complex Trigonometric Functions::
+* Inverse Complex Trigonometric Functions::
+* Complex Hyperbolic Functions::
+* Inverse Complex Hyperbolic Functions::
+* Complex Number References and Further Reading::
+@end menu
+
+@node Complex numbers
+@section Complex numbers
+@cindex representations of complex numbers
+@cindex polar form of complex numbers
+@tpindex gsl_complex
+
+Complex numbers are represented using the type @code{gsl_complex}. The
+internal representation of this type may vary across platforms and
+should not be accessed directly. The functions and macros described
+below allow complex numbers to be manipulated in a portable way.
+
+For reference, the default form of the @code{gsl_complex} type is
+given by the following struct,
+
+@example
+typedef struct
+@{
+ double dat[2];
+@} gsl_complex;
+@end example
+
+@noindent
+The real and imaginary part are stored in contiguous elements of a two
+element array. This eliminates any padding between the real and
+imaginary parts, @code{dat[0]} and @code{dat[1]}, allowing the struct to
+be mapped correctly onto packed complex arrays.
+
+@deftypefun gsl_complex gsl_complex_rect (double @var{x}, double @var{y})
+This function uses the rectangular cartesian components
+(@var{x},@var{y}) to return the complex number @math{z = x + i y}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_polar (double @var{r}, double @var{theta})
+This function returns the complex number @math{z = r \exp(i \theta) = r
+(\cos(\theta) + i \sin(\theta))} from the polar representation
+(@var{r},@var{theta}).
+@end deftypefun
+
+@defmac GSL_REAL (@var{z})
+@defmacx GSL_IMAG (@var{z})
+These macros return the real and imaginary parts of the complex number
+@var{z}.
+@end defmac
+
+@defmac GSL_SET_COMPLEX (@var{zp}, @var{x}, @var{y})
+This macro uses the cartesian components (@var{x},@var{y}) to set the
+real and imaginary parts of the complex number pointed to by @var{zp}.
+For example,
+
+@example
+GSL_SET_COMPLEX(&z, 3, 4)
+@end example
+
+@noindent
+sets @var{z} to be @math{3 + 4i}.
+@end defmac
+
+@defmac GSL_SET_REAL (@var{zp},@var{x})
+@defmacx GSL_SET_IMAG (@var{zp},@var{y})
+These macros allow the real and imaginary parts of the complex number
+pointed to by @var{zp} to be set independently.
+@end defmac
+
+@node Properties of complex numbers
+@section Properties of complex numbers
+
+@deftypefun double gsl_complex_arg (gsl_complex @var{z})
+@cindex argument of complex number
+This function returns the argument of the complex number @var{z},
+@math{\arg(z)}, where @c{$-\pi < \arg(z) \leq \pi$}
+@math{-\pi < \arg(z) <= \pi}.
+@end deftypefun
+
+@deftypefun double gsl_complex_abs (gsl_complex @var{z})
+@cindex magnitude of complex number
+This function returns the magnitude of the complex number @var{z}, @math{|z|}.
+@end deftypefun
+
+@deftypefun double gsl_complex_abs2 (gsl_complex @var{z})
+This function returns the squared magnitude of the complex number
+@var{z}, @math{|z|^2}.
+@end deftypefun
+
+@deftypefun double gsl_complex_logabs (gsl_complex @var{z})
+This function returns the natural logarithm of the magnitude of the
+complex number @var{z}, @math{\log|z|}. It allows an accurate
+evaluation of @math{\log|z|} when @math{|z|} is close to one. The direct
+evaluation of @code{log(gsl_complex_abs(z))} would lead to a loss of
+precision in this case.
+@end deftypefun
+
+
+@node Complex arithmetic operators
+@section Complex arithmetic operators
+@cindex complex arithmetic
+
+@deftypefun gsl_complex gsl_complex_add (gsl_complex @var{a}, gsl_complex @var{b})
+This function returns the sum of the complex numbers @var{a} and
+@var{b}, @math{z=a+b}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_sub (gsl_complex @var{a}, gsl_complex @var{b})
+This function returns the difference of the complex numbers @var{a} and
+@var{b}, @math{z=a-b}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_mul (gsl_complex @var{a}, gsl_complex @var{b})
+This function returns the product of the complex numbers @var{a} and
+@var{b}, @math{z=ab}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_div (gsl_complex @var{a}, gsl_complex @var{b})
+This function returns the quotient of the complex numbers @var{a} and
+@var{b}, @math{z=a/b}.
+@end deftypefun
+
+
+@deftypefun gsl_complex gsl_complex_add_real (gsl_complex @var{a}, double @var{x})
+This function returns the sum of the complex number @var{a} and the
+real number @var{x}, @math{z=a+x}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_sub_real (gsl_complex @var{a}, double @var{x})
+This function returns the difference of the complex number @var{a} and the
+real number @var{x}, @math{z=a-x}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_mul_real (gsl_complex @var{a}, double @var{x})
+This function returns the product of the complex number @var{a} and the
+real number @var{x}, @math{z=ax}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_div_real (gsl_complex @var{a}, double @var{x})
+This function returns the quotient of the complex number @var{a} and the
+real number @var{x}, @math{z=a/x}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_add_imag (gsl_complex @var{a}, double @var{y})
+This function returns the sum of the complex number @var{a} and the
+imaginary number @math{i}@var{y}, @math{z=a+iy}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_sub_imag (gsl_complex @var{a}, double @var{y})
+This function returns the difference of the complex number @var{a} and the
+imaginary number @math{i}@var{y}, @math{z=a-iy}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_mul_imag (gsl_complex @var{a}, double @var{y})
+This function returns the product of the complex number @var{a} and the
+imaginary number @math{i}@var{y}, @math{z=a*(iy)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_div_imag (gsl_complex @var{a}, double @var{y})
+This function returns the quotient of the complex number @var{a} and the
+imaginary number @math{i}@var{y}, @math{z=a/(iy)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_conjugate (gsl_complex @var{z})
+@cindex conjugate of complex number
+This function returns the complex conjugate of the complex number
+@var{z}, @math{z^* = x - i y}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_inverse (gsl_complex @var{z})
+This function returns the inverse, or reciprocal, of the complex number
+@var{z}, @math{1/z = (x - i y)/(x^2 + y^2)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_negative (gsl_complex @var{z})
+This function returns the negative of the complex number
+@var{z}, @math{-z = (-x) + i(-y)}.
+@end deftypefun
+
+
+@node Elementary Complex Functions
+@section Elementary Complex Functions
+
+@deftypefun gsl_complex gsl_complex_sqrt (gsl_complex @var{z})
+@cindex square root of complex number
+This function returns the square root of the complex number @var{z},
+@math{\sqrt z}. The branch cut is the negative real axis. The result
+always lies in the right half of the complex plane.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_sqrt_real (double @var{x})
+This function returns the complex square root of the real number
+@var{x}, where @var{x} may be negative.
+@end deftypefun
+
+
+@deftypefun gsl_complex gsl_complex_pow (gsl_complex @var{z}, gsl_complex @var{a})
+@cindex power of complex number
+@cindex exponentiation of complex number
+The function returns the complex number @var{z} raised to the complex
+power @var{a}, @math{z^a}. This is computed as @math{\exp(\log(z)*a)}
+using complex logarithms and complex exponentials.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_pow_real (gsl_complex @var{z}, double @var{x})
+This function returns the complex number @var{z} raised to the real
+power @var{x}, @math{z^x}.
+@end deftypefun
+
+
+@deftypefun gsl_complex gsl_complex_exp (gsl_complex @var{z})
+This function returns the complex exponential of the complex number
+@var{z}, @math{\exp(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_log (gsl_complex @var{z})
+@cindex logarithm of complex number
+This function returns the complex natural logarithm (base @math{e}) of
+the complex number @var{z}, @math{\log(z)}. The branch cut is the
+negative real axis.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_log10 (gsl_complex @var{z})
+This function returns the complex base-10 logarithm of
+the complex number @var{z}, @c{$\log_{10}(z)$}
+@math{\log_10 (z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_log_b (gsl_complex @var{z}, gsl_complex @var{b})
+This function returns the complex base-@var{b} logarithm of the complex
+number @var{z}, @math{\log_b(z)}. This quantity is computed as the ratio
+@math{\log(z)/\log(b)}.
+@end deftypefun
+
+
+@node Complex Trigonometric Functions
+@section Complex Trigonometric Functions
+@cindex trigonometric functions of complex numbers
+
+@deftypefun gsl_complex gsl_complex_sin (gsl_complex @var{z})
+@cindex sin, of complex number
+This function returns the complex sine of the complex number @var{z},
+@math{\sin(z) = (\exp(iz) - \exp(-iz))/(2i)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_cos (gsl_complex @var{z})
+@cindex cosine of complex number
+This function returns the complex cosine of the complex number @var{z},
+@math{\cos(z) = (\exp(iz) + \exp(-iz))/2}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_tan (gsl_complex @var{z})
+@cindex tangent of complex number
+This function returns the complex tangent of the complex number @var{z},
+@math{\tan(z) = \sin(z)/\cos(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_sec (gsl_complex @var{z})
+This function returns the complex secant of the complex number @var{z},
+@math{\sec(z) = 1/\cos(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_csc (gsl_complex @var{z})
+This function returns the complex cosecant of the complex number @var{z},
+@math{\csc(z) = 1/\sin(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_cot (gsl_complex @var{z})
+This function returns the complex cotangent of the complex number @var{z},
+@math{\cot(z) = 1/\tan(z)}.
+@end deftypefun
+
+
+@node Inverse Complex Trigonometric Functions
+@section Inverse Complex Trigonometric Functions
+@cindex inverse complex trigonometric functions
+
+@deftypefun gsl_complex gsl_complex_arcsin (gsl_complex @var{z})
+This function returns the complex arcsine of the complex number @var{z},
+@math{\arcsin(z)}. The branch cuts are on the real axis, less than @math{-1}
+and greater than @math{1}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arcsin_real (double @var{z})
+This function returns the complex arcsine of the real number @var{z},
+@math{\arcsin(z)}. For @math{z} between @math{-1} and @math{1}, the
+function returns a real value in the range @math{[-\pi/2,\pi/2]}. For
+@math{z} less than @math{-1} the result has a real part of @math{-\pi/2}
+and a positive imaginary part. For @math{z} greater than @math{1} the
+result has a real part of @math{\pi/2} and a negative imaginary part.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccos (gsl_complex @var{z})
+This function returns the complex arccosine of the complex number @var{z},
+@math{\arccos(z)}. The branch cuts are on the real axis, less than @math{-1}
+and greater than @math{1}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccos_real (double @var{z})
+This function returns the complex arccosine of the real number @var{z},
+@math{\arccos(z)}. For @math{z} between @math{-1} and @math{1}, the
+function returns a real value in the range @math{[0,\pi]}. For @math{z}
+less than @math{-1} the result has a real part of @math{\pi} and a
+negative imaginary part. For @math{z} greater than @math{1} the result
+is purely imaginary and positive.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arctan (gsl_complex @var{z})
+This function returns the complex arctangent of the complex number
+@var{z}, @math{\arctan(z)}. The branch cuts are on the imaginary axis,
+below @math{-i} and above @math{i}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arcsec (gsl_complex @var{z})
+This function returns the complex arcsecant of the complex number @var{z},
+@math{\arcsec(z) = \arccos(1/z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arcsec_real (double @var{z})
+This function returns the complex arcsecant of the real number @var{z},
+@math{\arcsec(z) = \arccos(1/z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccsc (gsl_complex @var{z})
+This function returns the complex arccosecant of the complex number @var{z},
+@math{\arccsc(z) = \arcsin(1/z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccsc_real (double @var{z})
+This function returns the complex arccosecant of the real number @var{z},
+@math{\arccsc(z) = \arcsin(1/z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccot (gsl_complex @var{z})
+This function returns the complex arccotangent of the complex number @var{z},
+@math{\arccot(z) = \arctan(1/z)}.
+@end deftypefun
+
+
+@node Complex Hyperbolic Functions
+@section Complex Hyperbolic Functions
+@cindex hyperbolic functions, complex numbers
+
+@deftypefun gsl_complex gsl_complex_sinh (gsl_complex @var{z})
+This function returns the complex hyperbolic sine of the complex number
+@var{z}, @math{\sinh(z) = (\exp(z) - \exp(-z))/2}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_cosh (gsl_complex @var{z})
+This function returns the complex hyperbolic cosine of the complex number
+@var{z}, @math{\cosh(z) = (\exp(z) + \exp(-z))/2}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_tanh (gsl_complex @var{z})
+This function returns the complex hyperbolic tangent of the complex number
+@var{z}, @math{\tanh(z) = \sinh(z)/\cosh(z)}.
+@end deftypefun
+
+
+@deftypefun gsl_complex gsl_complex_sech (gsl_complex @var{z})
+This function returns the complex hyperbolic secant of the complex
+number @var{z}, @math{\sech(z) = 1/\cosh(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_csch (gsl_complex @var{z})
+This function returns the complex hyperbolic cosecant of the complex
+number @var{z}, @math{\csch(z) = 1/\sinh(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_coth (gsl_complex @var{z})
+This function returns the complex hyperbolic cotangent of the complex
+number @var{z}, @math{\coth(z) = 1/\tanh(z)}.
+@end deftypefun
+
+
+@node Inverse Complex Hyperbolic Functions
+@section Inverse Complex Hyperbolic Functions
+@cindex inverse hyperbolic functions, complex numbers
+
+@deftypefun gsl_complex gsl_complex_arcsinh (gsl_complex @var{z})
+This function returns the complex hyperbolic arcsine of the
+complex number @var{z}, @math{\arcsinh(z)}. The branch cuts are on the
+imaginary axis, below @math{-i} and above @math{i}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccosh (gsl_complex @var{z})
+This function returns the complex hyperbolic arccosine of the complex
+number @var{z}, @math{\arccosh(z)}. The branch cut is on the real
+axis, less than @math{1}. Note that in this case we use the negative
+square root in formula 4.6.21 of Abramowitz & Stegun giving
+@c{$\arccosh(z)=\log(z-\sqrt{z^2-1})$}
+@math{\arccosh(z)=\log(z-\sqrt@{z^2-1@})}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccosh_real (double @var{z})
+This function returns the complex hyperbolic arccosine of
+the real number @var{z}, @math{\arccosh(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arctanh (gsl_complex @var{z})
+This function returns the complex hyperbolic arctangent of the complex
+number @var{z}, @math{\arctanh(z)}. The branch cuts are on the real
+axis, less than @math{-1} and greater than @math{1}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arctanh_real (double @var{z})
+This function returns the complex hyperbolic arctangent of the real
+number @var{z}, @math{\arctanh(z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arcsech (gsl_complex @var{z})
+This function returns the complex hyperbolic arcsecant of the complex
+number @var{z}, @math{\arcsech(z) = \arccosh(1/z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccsch (gsl_complex @var{z})
+This function returns the complex hyperbolic arccosecant of the complex
+number @var{z}, @math{\arccsch(z) = \arcsin(1/z)}.
+@end deftypefun
+
+@deftypefun gsl_complex gsl_complex_arccoth (gsl_complex @var{z})
+This function returns the complex hyperbolic arccotangent of the complex
+number @var{z}, @math{\arccoth(z) = \arctanh(1/z)}.
+@end deftypefun
+
+@node Complex Number References and Further Reading
+@section References and Further Reading
+
+The implementations of the elementary and trigonometric functions are
+based on the following papers,
+
+@itemize @asis
+@item
+T. E. Hull, Thomas F. Fairgrieve, Ping Tak Peter Tang,
+``Implementing Complex Elementary Functions Using Exception
+Handling'', @cite{ACM Transactions on Mathematical Software}, Volume 20
+(1994), pp 215--244, Corrigenda, p553
+
+@item
+T. E. Hull, Thomas F. Fairgrieve, Ping Tak Peter Tang,
+``Implementing the complex arcsin and arccosine functions using exception
+handling'', @cite{ACM Transactions on Mathematical Software}, Volume 23
+(1997) pp 299--335
+@end itemize
+
+@noindent
+The general formulas and details of branch cuts can be found in the
+following books,
+
+@itemize @asis
+@item
+Abramowitz and Stegun, @cite{Handbook of Mathematical Functions},
+``Circular Functions in Terms of Real and Imaginary Parts'', Formulas
+4.3.55--58,
+``Inverse Circular Functions in Terms of Real and Imaginary Parts'',
+Formulas 4.4.37--39,
+``Hyperbolic Functions in Terms of Real and Imaginary Parts'',
+Formulas 4.5.49--52,
+``Inverse Hyperbolic Functions---relation to Inverse Circular Functions'',
+Formulas 4.6.14--19.
+
+@item
+Dave Gillespie, @cite{Calc Manual}, Free Software Foundation, ISBN
+1-882114-18-3
+@end itemize
diff --git a/gsl-1.9/doc/const.texi b/gsl-1.9/doc/const.texi
new file mode 100644
index 0000000..aed2935
--- /dev/null
+++ b/gsl-1.9/doc/const.texi
@@ -0,0 +1,575 @@
+@cindex physical constants
+@cindex constants, physical
+@cindex conversion of units
+@cindex units, conversion of
+This chapter describes macros for the values of physical constants, such
+as the speed of light, @math{c}, and gravitational constant, @math{G}.
+The values are available in different unit systems, including the
+standard MKSA system (meters, kilograms, seconds, amperes) and the CGSM
+system (centimeters, grams, seconds, gauss), which is commonly used in
+Astronomy.
+
+The definitions of constants in the MKSA system are available in the file
+@file{gsl_const_mksa.h}. The constants in the CGSM system are defined in
+@file{gsl_const_cgsm.h}. Dimensionless constants, such as the fine
+structure constant, which are pure numbers are defined in
+@file{gsl_const_num.h}.
+
+@menu
+* Fundamental Constants::
+* Astronomy and Astrophysics::
+* Atomic and Nuclear Physics::
+* Measurement of Time::
+* Imperial Units ::
+* Speed and Nautical Units::
+* Printers Units::
+* Volume Area and Length::
+* Mass and Weight ::
+* Thermal Energy and Power::
+* Pressure::
+* Viscosity::
+* Light and Illumination::
+* Radioactivity::
+* Force and Energy::
+* Prefixes::
+* Physical Constant Examples::
+* Physical Constant References and Further Reading::
+@end menu
+
+The full list of constants is described briefly below. Consult the
+header files themselves for the values of the constants used in the
+library.
+
+@node Fundamental Constants
+@section Fundamental Constants
+@cindex fundamental constants
+@cindex constants, fundamental
+@table @code
+@item GSL_CONST_MKSA_SPEED_OF_LIGHT
+The speed of light in vacuum, @math{c}.
+
+@item GSL_CONST_MKSA_VACUUM_PERMEABILITY
+The permeability of free space, @math{\mu_0}. This constant is defined
+in the MKSA system only.
+
+@item GSL_CONST_MKSA_VACUUM_PERMITTIVITY
+The permittivity of free space, @math{\epsilon_0}. This constant is
+defined in the MKSA system only.
+
+@item GSL_CONST_MKSA_PLANCKS_CONSTANT_H
+Planck's constant, @math{h}.
+
+@item GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR
+Planck's constant divided by @math{2\pi}, @math{\hbar}.
+
+@item GSL_CONST_NUM_AVOGADRO
+Avogadro's number, @math{N_a}.
+
+@item GSL_CONST_MKSA_FARADAY
+The molar charge of 1 Faraday.
+
+@item GSL_CONST_MKSA_BOLTZMANN
+The Boltzmann constant, @math{k}.
+
+@item GSL_CONST_MKSA_MOLAR_GAS
+The molar gas constant, @math{R_0}.
+
+@item GSL_CONST_MKSA_STANDARD_GAS_VOLUME
+The standard gas volume, @math{V_0}.
+
+@item GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT
+The Stefan-Boltzmann radiation constant, @math{\sigma}.
+
+@item GSL_CONST_MKSA_GAUSS
+The magnetic field of 1 Gauss.
+@end table
+
+@node Astronomy and Astrophysics
+@section Astronomy and Astrophysics
+@cindex astronomical constants
+@table @code
+@item GSL_CONST_MKSA_ASTRONOMICAL_UNIT
+The length of 1 astronomical unit (mean earth-sun distance), @math{au}.
+
+@item GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT
+The gravitational constant, @math{G}.
+
+@item GSL_CONST_MKSA_LIGHT_YEAR
+The distance of 1 light-year, @math{ly}.
+
+@item GSL_CONST_MKSA_PARSEC
+The distance of 1 parsec, @math{pc}.
+
+@item GSL_CONST_MKSA_GRAV_ACCEL
+The standard gravitational acceleration on Earth, @math{g}.
+
+@item GSL_CONST_MKSA_SOLAR_MASS
+The mass of the Sun.
+@end table
+
+@node Atomic and Nuclear Physics
+@section Atomic and Nuclear Physics
+@cindex atomic physics, constants
+@cindex nuclear physics, constants
+@table @code
+@item GSL_CONST_MKSA_ELECTRON_CHARGE
+The charge of the electron, @math{e}.
+
+@item GSL_CONST_MKSA_ELECTRON_VOLT
+The energy of 1 electron volt, @math{eV}.
+
+@item GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS
+The unified atomic mass, @math{amu}.
+
+@item GSL_CONST_MKSA_MASS_ELECTRON
+The mass of the electron, @math{m_e}.
+
+@item GSL_CONST_MKSA_MASS_MUON
+The mass of the muon, @math{m_\mu}.
+
+@item GSL_CONST_MKSA_MASS_PROTON
+The mass of the proton, @math{m_p}.
+
+@item GSL_CONST_MKSA_MASS_NEUTRON
+The mass of the neutron, @math{m_n}.
+
+@item GSL_CONST_NUM_FINE_STRUCTURE
+The electromagnetic fine structure constant @math{\alpha}.
+
+@item GSL_CONST_MKSA_RYDBERG
+The Rydberg constant, @math{Ry}, in units of energy. This is related to
+the Rydberg inverse wavelength @math{R} by @math{Ry = h c R}.
+
+@item GSL_CONST_MKSA_BOHR_RADIUS
+The Bohr radius, @math{a_0}.
+
+@item GSL_CONST_MKSA_ANGSTROM
+The length of 1 angstrom.
+
+@item GSL_CONST_MKSA_BARN
+The area of 1 barn.
+
+@item GSL_CONST_MKSA_BOHR_MAGNETON
+The Bohr Magneton, @math{\mu_B}.
+
+@item GSL_CONST_MKSA_NUCLEAR_MAGNETON
+The Nuclear Magneton, @math{\mu_N}.
+
+@item GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT
+The absolute value of the magnetic moment of the electron, @math{\mu_e}.
+The physical magnetic moment of the electron is negative.
+
+@item GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT
+The magnetic moment of the proton, @math{\mu_p}.
+
+@item GSL_CONST_MKSA_THOMSON_CROSS_SECTION
+The Thomson cross section, @math{\sigma_T}.
+
+@item GSL_CONST_MKSA_DEBYE
+The electric dipole moment of 1 Debye, @math{D}.
+@end table
+
+
+@node Measurement of Time
+@section Measurement of Time
+@cindex time units
+@table @code
+@item GSL_CONST_MKSA_MINUTE
+The number of seconds in 1 minute.
+
+@item GSL_CONST_MKSA_HOUR
+The number of seconds in 1 hour.
+
+@item GSL_CONST_MKSA_DAY
+The number of seconds in 1 day.
+
+@item GSL_CONST_MKSA_WEEK
+The number of seconds in 1 week.
+@end table
+
+
+@node Imperial Units
+@section Imperial Units
+@cindex imperial units
+@cindex units, imperial
+@table @code
+@item GSL_CONST_MKSA_INCH
+The length of 1 inch.
+
+@item GSL_CONST_MKSA_FOOT
+The length of 1 foot.
+
+@item GSL_CONST_MKSA_YARD
+The length of 1 yard.
+
+@item GSL_CONST_MKSA_MILE
+The length of 1 mile.
+
+@item GSL_CONST_MKSA_MIL
+The length of 1 mil (1/1000th of an inch).
+@end table
+
+
+@node Speed and Nautical Units
+@section Speed and Nautical Units
+@cindex nautical units
+
+@table @code
+@item GSL_CONST_MKSA_KILOMETERS_PER_HOUR
+The speed of 1 kilometer per hour.
+
+@item GSL_CONST_MKSA_MILES_PER_HOUR
+The speed of 1 mile per hour.
+
+@item GSL_CONST_MKSA_NAUTICAL_MILE
+The length of 1 nautical mile.
+
+@item GSL_CONST_MKSA_FATHOM
+The length of 1 fathom.
+
+@item GSL_CONST_MKSA_KNOT
+The speed of 1 knot.
+@end table
+
+
+@node Printers Units
+@section Printers Units
+@cindex printers units
+
+@table @code
+@item GSL_CONST_MKSA_POINT
+The length of 1 printer's point (1/72 inch).
+
+@item GSL_CONST_MKSA_TEXPOINT
+The length of 1 TeX point (1/72.27 inch).
+@end table
+
+
+@node Volume Area and Length
+@section Volume, Area and Length
+@cindex volume units
+
+@table @code
+@item GSL_CONST_MKSA_MICRON
+The length of 1 micron.
+
+@item GSL_CONST_MKSA_HECTARE
+The area of 1 hectare.
+
+@item GSL_CONST_MKSA_ACRE
+The area of 1 acre.
+
+@item GSL_CONST_MKSA_LITER
+The volume of 1 liter.
+
+@item GSL_CONST_MKSA_US_GALLON
+The volume of 1 US gallon.
+
+@item GSL_CONST_MKSA_CANADIAN_GALLON
+The volume of 1 Canadian gallon.
+
+@item GSL_CONST_MKSA_UK_GALLON
+The volume of 1 UK gallon.
+
+@item GSL_CONST_MKSA_QUART
+The volume of 1 quart.
+
+@item GSL_CONST_MKSA_PINT
+The volume of 1 pint.
+@end table
+
+
+@comment @node Cookery
+@comment @section Cookery
+@comment @commentindex cookery units
+
+@comment @table @commentode
+@comment @item GSL_CONST_MKSA_CUP
+@comment The volume of 1 cup.
+
+@comment @item GSL_CONST_MKSA_FLUID_OUNCE
+@comment The volume of 1 fluid ounce.
+
+@comment @item GSL_CONST_MKSA_TABLESPOON
+@comment The volume of 1 tablespoon.
+
+@comment @item GSL_CONST_MKSA_TEASPOON
+@comment The volume of 1 teaspoon.
+@comment @end table
+
+
+@node Mass and Weight
+@section Mass and Weight
+@cindex mass, units of
+@cindex weight, units of
+@table @code
+@item GSL_CONST_MKSA_POUND_MASS
+The mass of 1 pound.
+
+@item GSL_CONST_MKSA_OUNCE_MASS
+The mass of 1 ounce.
+
+@item GSL_CONST_MKSA_TON
+The mass of 1 ton.
+
+@item GSL_CONST_MKSA_METRIC_TON
+The mass of 1 metric ton (1000 kg).
+
+@item GSL_CONST_MKSA_UK_TON
+The mass of 1 UK ton.
+
+@item GSL_CONST_MKSA_TROY_OUNCE
+The mass of 1 troy ounce.
+
+@item GSL_CONST_MKSA_CARAT
+The mass of 1 carat.
+
+@item GSL_CONST_MKSA_GRAM_FORCE
+The force of 1 gram weight.
+
+@item GSL_CONST_MKSA_POUND_FORCE
+The force of 1 pound weight.
+
+@item GSL_CONST_MKSA_KILOPOUND_FORCE
+The force of 1 kilopound weight.
+
+@item GSL_CONST_MKSA_POUNDAL
+The force of 1 poundal.
+@end table
+
+
+@node Thermal Energy and Power
+@section Thermal Energy and Power
+@cindex energy, units of
+@cindex power, units of
+@cindex thermal energy, units of
+@table @code
+@item GSL_CONST_MKSA_CALORIE
+The energy of 1 calorie.
+
+@item GSL_CONST_MKSA_BTU
+The energy of 1 British Thermal Unit, @math{btu}.
+
+@item GSL_CONST_MKSA_THERM
+The energy of 1 Therm.
+
+@item GSL_CONST_MKSA_HORSEPOWER
+The power of 1 horsepower.
+@end table
+
+
+@node Pressure
+@section Pressure
+@cindex pressure, units of
+@table @code
+@item GSL_CONST_MKSA_BAR
+The pressure of 1 bar.
+
+@item GSL_CONST_MKSA_STD_ATMOSPHERE
+The pressure of 1 standard atmosphere.
+
+@item GSL_CONST_MKSA_TORR
+The pressure of 1 torr.
+
+@item GSL_CONST_MKSA_METER_OF_MERCURY
+The pressure of 1 meter of mercury.
+
+@item GSL_CONST_MKSA_INCH_OF_MERCURY
+The pressure of 1 inch of mercury.
+
+@item GSL_CONST_MKSA_INCH_OF_WATER
+The pressure of 1 inch of water.
+
+@item GSL_CONST_MKSA_PSI
+The pressure of 1 pound per square inch.
+@end table
+
+@node Viscosity
+@section Viscosity
+@cindex viscosity, units of
+@table @code
+@item GSL_CONST_MKSA_POISE
+The dynamic viscosity of 1 poise.
+
+@item GSL_CONST_MKSA_STOKES
+The kinematic viscosity of 1 stokes.
+@end table
+
+
+@node Light and Illumination
+@section Light and Illumination
+@cindex light, units of
+@cindex illumination, units of
+
+@table @code
+@item GSL_CONST_MKSA_STILB
+The luminance of 1 stilb.
+
+@item GSL_CONST_MKSA_LUMEN
+The luminous flux of 1 lumen.
+
+@item GSL_CONST_MKSA_LUX
+The illuminance of 1 lux.
+
+@item GSL_CONST_MKSA_PHOT
+The illuminance of 1 phot.
+
+@item GSL_CONST_MKSA_FOOTCANDLE
+The illuminance of 1 footcandle.
+
+@item GSL_CONST_MKSA_LAMBERT
+The luminance of 1 lambert.
+
+@item GSL_CONST_MKSA_FOOTLAMBERT
+The luminance of 1 footlambert.
+@end table
+
+
+@node Radioactivity
+@section Radioactivity
+@cindex radioactivity, units of
+@table @code
+@item GSL_CONST_MKSA_CURIE
+The activity of 1 curie.
+
+@item GSL_CONST_MKSA_ROENTGEN
+The exposure of 1 roentgen.
+
+@item GSL_CONST_MKSA_RAD
+The absorbed dose of 1 rad.
+@end table
+
+
+@node Force and Energy
+@section Force and Energy
+@cindex force and energy, units of
+@table @code
+@item GSL_CONST_MKSA_NEWTON
+The SI unit of force, 1 Newton.
+
+@item GSL_CONST_MKSA_DYNE
+The force of 1 Dyne = @c{$10^{-5}$}
+@math{10^-5} Newton.
+
+@item GSL_CONST_MKSA_JOULE
+The SI unit of energy, 1 Joule.
+
+@item GSL_CONST_MKSA_ERG
+The energy 1 erg = @c{$10^{-7}$}
+@math{10^-7} Joule.
+@end table
+
+
+@node Prefixes
+@section Prefixes
+@cindex prefixes
+@cindex constants, prefixes
+
+These constants are dimensionless scaling factors.
+
+@table @code
+@item GSL_CONST_NUM_YOTTA
+@c{$10^{24}$}
+@math{10^24}
+
+@item GSL_CONST_NUM_ZETTA
+@c{$10^{21}$}
+@math{10^21}
+
+@item GSL_CONST_NUM_EXA
+@c{$10^{18}$}
+@math{10^18}
+
+@item GSL_CONST_NUM_PETA
+@c{$10^{15}$}
+@math{10^15}
+
+@item GSL_CONST_NUM_TERA
+@c{$10^{12}$}
+@math{10^12}
+
+@item GSL_CONST_NUM_GIGA
+@math{10^9}
+
+@item GSL_CONST_NUM_MEGA
+@math{10^6}
+
+@item GSL_CONST_NUM_KILO
+@math{10^3}
+
+@item GSL_CONST_NUM_MILLI
+@c{$10^{-3}$}
+@math{10^-3}
+
+@item GSL_CONST_NUM_MICRO
+@c{$10^{-6}$}
+@math{10^-6}
+
+@item GSL_CONST_NUM_NANO
+@c{$10^{-9}$}
+@math{10^-9}
+
+@item GSL_CONST_NUM_PICO
+@c{$10^{-12}$}
+@math{10^-12}
+
+@item GSL_CONST_NUM_FEMTO
+@c{$10^{-15}$}
+@math{10^-15}
+
+@item GSL_CONST_NUM_ATTO
+@c{$10^{-18}$}
+@math{10^-18}
+
+@item GSL_CONST_NUM_ZEPTO
+@c{$10^{-21}$}
+@math{10^-21}
+
+@item GSL_CONST_NUM_YOCTO
+@c{$10^{-24}$}
+@math{10^-24}
+@end table
+
+@node Physical Constant Examples
+@section Examples
+
+The following program demonstrates the use of the physical constants in
+a calculation. In this case, the goal is to calculate the range of
+light-travel times from Earth to Mars.
+
+The required data is the average distance of each planet from the Sun in
+astronomical units (the eccentricities and inclinations of the orbits
+will be neglected for the purposes of this calculation). The average
+radius of the orbit of Mars is 1.52 astronomical units, and for the
+orbit of Earth it is 1 astronomical unit (by definition). These values
+are combined with the MKSA values of the constants for the speed of
+light and the length of an astronomical unit to produce a result for the
+shortest and longest light-travel times in seconds. The figures are
+converted into minutes before being displayed.
+
+@example
+@verbatiminclude examples/const.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+@verbatiminclude examples/const.out
+@end example
+
+@node Physical Constant References and Further Reading
+@section References and Further Reading
+
+The authoritative sources for physical constants are the 2002 CODATA
+recommended values, published in the articles below. Further information
+on the values of physical constants is also available from the cited
+articles and the NIST website.
+
+@itemize @asis
+@item Journal of Physical and Chemical Reference Data, 28(6), 1713-1852, 1999
+@item Reviews of Modern Physics, 72(2), 351-495, 2000
+@item @uref{http://www.physics.nist.gov/cuu/Constants/index.html}
+@item @uref{http://physics.nist.gov/Pubs/SP811/appenB9.html}
+@end itemize
+
diff --git a/gsl-1.9/doc/debug.texi b/gsl-1.9/doc/debug.texi
new file mode 100644
index 0000000..2cf0065
--- /dev/null
+++ b/gsl-1.9/doc/debug.texi
@@ -0,0 +1,389 @@
+This chapter describes some tips and tricks for debugging numerical
+programs which use GSL.
+
+@menu
+* Using gdb::
+* Examining floating point registers::
+* Handling floating point exceptions::
+* GCC warning options for numerical programs::
+* Debugging References::
+@end menu
+
+@node Using gdb
+@section Using gdb
+@cindex gdb
+@cindex debugging numerical programs
+@cindex breakpoints
+Any errors reported by the library are passed to the function
+@code{gsl_error}. By running your programs under gdb and setting a
+breakpoint in this function you can automatically catch any library
+errors. You can add a breakpoint for every session by putting
+
+@example
+break gsl_error
+@end example
+@comment
+
+@noindent
+into your @file{.gdbinit} file in the directory where your program is
+started.
+
+If the breakpoint catches an error then you can use a backtrace
+(@code{bt}) to see the call-tree, and the arguments which possibly
+caused the error. By moving up into the calling function you can
+investigate the values of variables at that point. Here is an example
+from the program @code{fft/test_trap}, which contains the following
+line,
+
+@smallexample
+status = gsl_fft_complex_wavetable_alloc (0, &complex_wavetable);
+@end smallexample
+
+@noindent
+The function @code{gsl_fft_complex_wavetable_alloc} takes the length of
+an FFT as its first argument. When this line is executed an error will
+be generated because the length of an FFT is not allowed to be zero.
+
+To debug this problem we start @code{gdb}, using the file
+@file{.gdbinit} to define a breakpoint in @code{gsl_error},
+
+@smallexample
+$ gdb test_trap
+
+GDB is free software and you are welcome to distribute copies
+of it under certain conditions; type "show copying" to see
+the conditions. There is absolutely no warranty for GDB;
+type "show warranty" for details. GDB 4.16 (i586-debian-linux),
+Copyright 1996 Free Software Foundation, Inc.
+
+Breakpoint 1 at 0x8050b1e: file error.c, line 14.
+@end smallexample
+
+@noindent
+When we run the program this breakpoint catches the error and shows the
+reason for it.
+
+@smallexample
+(gdb) run
+Starting program: test_trap
+
+Breakpoint 1, gsl_error (reason=0x8052b0d
+ "length n must be positive integer",
+ file=0x8052b04 "c_init.c", line=108, gsl_errno=1)
+ at error.c:14
+14 if (gsl_error_handler)
+@end smallexample
+@comment
+
+@noindent
+The first argument of @code{gsl_error} is always a string describing the
+error. Now we can look at the backtrace to see what caused the problem,
+
+@smallexample
+(gdb) bt
+#0 gsl_error (reason=0x8052b0d
+ "length n must be positive integer",
+ file=0x8052b04 "c_init.c", line=108, gsl_errno=1)
+ at error.c:14
+#1 0x8049376 in gsl_fft_complex_wavetable_alloc (n=0,
+ wavetable=0xbffff778) at c_init.c:108
+#2 0x8048a00 in main (argc=1, argv=0xbffff9bc)
+ at test_trap.c:94
+#3 0x80488be in ___crt_dummy__ ()
+@end smallexample
+@comment
+
+@noindent
+We can see that the error was generated in the function
+@code{gsl_fft_complex_wavetable_alloc} when it was called with an
+argument of @var{n=0}. The original call came from line 94 in the
+file @file{test_trap.c}.
+
+By moving up to the level of the original call we can find the line that
+caused the error,
+
+@smallexample
+(gdb) up
+#1 0x8049376 in gsl_fft_complex_wavetable_alloc (n=0,
+ wavetable=0xbffff778) at c_init.c:108
+108 GSL_ERROR ("length n must be positive integer", GSL_EDOM);
+(gdb) up
+#2 0x8048a00 in main (argc=1, argv=0xbffff9bc)
+ at test_trap.c:94
+94 status = gsl_fft_complex_wavetable_alloc (0,
+ &complex_wavetable);
+@end smallexample
+@comment
+
+@noindent
+Thus we have found the line that caused the problem. From this point we
+could also print out the values of other variables such as
+@code{complex_wavetable}.
+
+@node Examining floating point registers
+@section Examining floating point registers
+
+The contents of floating point registers can be examined using the
+command @code{info float} (on supported platforms).
+
+@smallexample
+(gdb) info float
+ st0: 0xc4018b895aa17a945000 Valid Normal -7.838871e+308
+ st1: 0x3ff9ea3f50e4d7275000 Valid Normal 0.0285946
+ st2: 0x3fe790c64ce27dad4800 Valid Normal 6.7415931e-08
+ st3: 0x3ffaa3ef0df6607d7800 Spec Normal 0.0400229
+ st4: 0x3c028000000000000000 Valid Normal 4.4501477e-308
+ st5: 0x3ffef5412c22219d9000 Zero Normal 0.9580257
+ st6: 0x3fff8000000000000000 Valid Normal 1
+ st7: 0xc4028b65a1f6d243c800 Valid Normal -1.566206e+309
+ fctrl: 0x0272 53 bit; NEAR; mask DENOR UNDER LOS;
+ fstat: 0xb9ba flags 0001; top 7; excep DENOR OVERF UNDER LOS
+ ftag: 0x3fff
+ fip: 0x08048b5c
+ fcs: 0x051a0023
+ fopoff: 0x08086820
+ fopsel: 0x002b
+@end smallexample
+
+@noindent
+Individual registers can be examined using the variables @var{$reg},
+where @var{reg} is the register name.
+
+@smallexample
+(gdb) p $st1
+$1 = 0.02859464454261210347719
+@end smallexample
+
+@node Handling floating point exceptions
+@section Handling floating point exceptions
+
+It is possible to stop the program whenever a @code{SIGFPE} floating
+point exception occurs. This can be useful for finding the cause of an
+unexpected infinity or @code{NaN}. The current handler settings can be
+shown with the command @code{info signal SIGFPE}.
+
+@smallexample
+(gdb) info signal SIGFPE
+Signal Stop Print Pass to program Description
+SIGFPE Yes Yes Yes Arithmetic exception
+@end smallexample
+
+@noindent
+Unless the program uses a signal handler the default setting should be
+changed so that SIGFPE is not passed to the program, as this would cause
+it to exit. The command @code{handle SIGFPE stop nopass} prevents this.
+
+@smallexample
+(gdb) handle SIGFPE stop nopass
+Signal Stop Print Pass to program Description
+SIGFPE Yes Yes No Arithmetic exception
+@end smallexample
+
+@noindent
+Depending on the platform it may be necessary to instruct the kernel to
+generate signals for floating point exceptions. For programs using GSL
+this can be achieved using the @code{GSL_IEEE_MODE} environment variable
+in conjunction with the function @code{gsl_ieee_env_setup} as described
+in @pxref{IEEE floating-point arithmetic}.
+
+@example
+(gdb) set env GSL_IEEE_MODE=double-precision
+@end example
+
+
+@node GCC warning options for numerical programs
+@section GCC warning options for numerical programs
+@cindex warning options
+@cindex gcc warning options
+
+Writing reliable numerical programs in C requires great care. The
+following GCC warning options are recommended when compiling numerical
+programs:
+
+@comment Uninitialized variables, conversions to and from integers or from
+@comment signed to unsigned integers can all cause hard-to-find problems. For
+@comment many non-numerical programs compiling with @code{gcc}'s warning option
+@comment @code{-Wall} provides a good check against common errors. However, for
+@comment numerical programs @code{-Wall} is not enough.
+
+@comment If you are unconvinced take a look at this program which contains an
+@comment error that can occur in numerical code,
+
+@comment @example
+@comment #include <math.h>
+@comment #include <stdio.h>
+
+@comment double f (int x);
+
+@comment int main ()
+@comment @{
+@comment double a = 1.5;
+@comment double y = f(a);
+@comment printf("a = %g, sqrt(a) = %g\n", a, y);
+@comment return 0;
+@comment @}
+
+@comment double f(x) @{
+@comment return sqrt(x);
+@comment @}
+@comment @end example
+
+@comment @noindent
+@comment This code compiles cleanly with @code{-Wall} but produces some strange
+@comment output,
+
+@comment @example
+@comment bash$ gcc -Wall tmp.c -lm
+@comment bash$ ./a.out
+@comment a = 1.5, sqrt(a) = 1
+@comment @end example
+
+@comment @noindent
+@comment Note that adding @code{-ansi} does not help here, since the program does
+@comment not contain any invalid constructs. What is happening is that the
+@comment prototype for the function @code{f(int x)} is not consistent with the
+@comment function call @code{f(y)}, where @code{y} is a floating point
+@comment number. This results in the argument being silently converted to an
+@comment integer. This is valid C, but in a numerical program it also likely to
+@comment be a programming error so we would like to be warned about it. (If we
+@comment genuinely wanted to convert @code{y} to an integer then we could use an
+@comment explicit cast, @code{(int)y}).
+
+@comment Fortunately GCC provides many additional warnings which can alert you to
+@comment problems such as this. You just have to remember to use them. Here is a
+@comment set of recommended warning options for numerical programs.
+
+@example
+gcc -ansi -pedantic -Werror -Wall -W
+ -Wmissing-prototypes -Wstrict-prototypes
+ -Wtraditional -Wconversion -Wshadow
+ -Wpointer-arith -Wcast-qual -Wcast-align
+ -Wwrite-strings -Wnested-externs
+ -fshort-enums -fno-common -Dinline= -g -O2
+@end example
+
+@noindent
+For details of each option consult the manual @cite{Using and Porting
+GCC}. The following table gives a brief explanation of what types of
+errors these options catch.
+
+@table @code
+@item -ansi -pedantic
+Use ANSI C, and reject any non-ANSI extensions. These flags help in
+writing portable programs that will compile on other systems.
+@item -Werror
+Consider warnings to be errors, so that compilation stops. This prevents
+warnings from scrolling off the top of the screen and being lost. You
+won't be able to compile the program until it is completely
+warning-free.
+@item -Wall
+This turns on a set of warnings for common programming problems. You
+need @code{-Wall}, but it is not enough on its own.
+@item -O2
+Turn on optimization. The warnings for uninitialized variables in
+@code{-Wall} rely on the optimizer to analyze the code. If there is no
+optimization then these warnings aren't generated.
+@item -W
+This turns on some extra warnings not included in @code{-Wall}, such as
+missing return values and comparisons between signed and unsigned
+integers.
+@item -Wmissing-prototypes -Wstrict-prototypes
+Warn if there are any missing or inconsistent prototypes. Without
+prototypes it is harder to detect problems with incorrect arguments.
+@item -Wtraditional
+This warns about certain constructs that behave differently in
+traditional and ANSI C. Whether the traditional or ANSI interpretation
+is used might be unpredictable on other compilers.
+@item -Wconversion
+The main use of this option is to warn about conversions from signed to
+unsigned integers. For example, @code{unsigned int x = -1}. If you need
+to perform such a conversion you can use an explicit cast.
+@item -Wshadow
+This warns whenever a local variable shadows another local variable. If
+two variables have the same name then it is a potential source of
+confusion.
+@item -Wpointer-arith -Wcast-qual -Wcast-align
+These options warn if you try to do pointer arithmetic for types which
+don't have a size, such as @code{void}, if you remove a @code{const}
+cast from a pointer, or if you cast a pointer to a type which has a
+different size, causing an invalid alignment.
+@item -Wwrite-strings
+This option gives string constants a @code{const} qualifier so that it
+will be a compile-time error to attempt to overwrite them.
+@item -fshort-enums
+This option makes the type of @code{enum} as short as possible. Normally
+this makes an @code{enum} different from an @code{int}. Consequently any
+attempts to assign a pointer-to-int to a pointer-to-enum will generate a
+cast-alignment warning.
+@item -fno-common
+This option prevents global variables being simultaneously defined in
+different object files (you get an error at link time). Such a variable
+should be defined in one file and referred to in other files with an
+@code{extern} declaration.
+@item -Wnested-externs
+This warns if an @code{extern} declaration is encountered within a
+function.
+@item -Dinline=
+The @code{inline} keyword is not part of ANSI C. Thus if you want to use
+@code{-ansi} with a program which uses inline functions you can use this
+preprocessor definition to remove the @code{inline} keywords.
+@item -g
+It always makes sense to put debugging symbols in the executable so that
+you can debug it using @code{gdb}. The only effect of debugging symbols
+is to increase the size of the file, and you can use the @code{strip}
+command to remove them later if necessary.
+@end table
+
+@comment For comparison, this is what happens when the test program above is
+@comment compiled with these options.
+
+@comment @example
+@comment bash$ gcc -ansi -pedantic -Werror -W -Wall -Wtraditional
+@comment -Wconversion -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align
+@comment -Wwrite-strings -Waggregate-return -Wstrict-prototypes -fshort-enums
+@comment -fno-common -Wmissing-prototypes -Wnested-externs -Dinline=
+@comment -g -O4 tmp.c
+@comment cc1: warnings being treated as errors
+@comment tmp.c:7: warning: function declaration isn't a prototype
+@comment tmp.c: In function `main':
+@comment tmp.c:9: warning: passing arg 1 of `f' as integer rather than floating
+@comment due to prototype
+@comment tmp.c: In function `f':
+@comment tmp.c:14: warning: type of `x' defaults to `int'
+@comment tmp.c:15: warning: passing arg 1 of `sqrt' as floating rather than integer
+@comment due to prototype
+@comment make: *** [tmp] Error 1
+@comment @end example
+
+@comment @noindent
+@comment The error in the prototype is flagged, plus the fact that we should have
+@comment defined main as @code{int main (void)} in ANSI C. Clearly there is some
+@comment work to do before this program is ready to run.
+
+@node Debugging References
+@section References and Further Reading
+
+The following books are essential reading for anyone writing and
+debugging numerical programs with @sc{gcc} and @sc{gdb}.
+
+@itemize @asis
+@item
+R.M. Stallman, @cite{Using and Porting GNU CC}, Free Software
+Foundation, ISBN 1882114388
+
+@item
+R.M. Stallman, R.H. Pesch, @cite{Debugging with GDB: The GNU
+Source-Level Debugger}, Free Software Foundation, ISBN 1882114779
+@end itemize
+
+@noindent
+For a tutorial introduction to the GNU C Compiler and related programs,
+see
+
+@itemize @asis
+@item
+B.J. Gough, @cite{An Introduction to GCC}, Network Theory Ltd, ISBN
+0954161793
+@end itemize
+
+
diff --git a/gsl-1.9/doc/dht.texi b/gsl-1.9/doc/dht.texi
new file mode 100644
index 0000000..7f9f25f
--- /dev/null
+++ b/gsl-1.9/doc/dht.texi
@@ -0,0 +1,152 @@
+@cindex discrete Hankel transforms
+@cindex Hankel transforms, discrete
+@cindex transforms, Hankel
+This chapter describes functions for performing Discrete Hankel
+Transforms (DHTs). The functions are declared in the header file
+@file{gsl_dht.h}.
+
+@menu
+* Discrete Hankel Transform Definition::
+* Discrete Hankel Transform Functions::
+* Discrete Hankel Transform References::
+@end menu
+
+@node Discrete Hankel Transform Definition
+@section Definitions
+
+The discrete Hankel transform acts on a vector of sampled data, where
+the samples are assumed to have been taken at points related to the
+zeroes of a Bessel function of fixed order; compare this to the case of
+the discrete Fourier transform, where samples are taken at points
+related to the zeroes of the sine or cosine function.
+
+Specifically, let @math{f(t)} be a function on the unit interval.
+Then the finite @math{\nu}-Hankel transform of @math{f(t)} is defined
+to be the set of numbers @math{g_m} given by,
+@tex
+\beforedisplay
+$$
+g_m = \int_0^1 t dt\, J_\nu(j_{\nu,m}t) f(t),
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@example
+g_m = \int_0^1 t dt J_\nu(j_(\nu,m)t) f(t),
+@end example
+
+@end ifinfo
+@noindent
+so that,
+@tex
+\beforedisplay
+$$
+f(t) = \sum_{m=1}^\infty {{2 J_\nu(j_{\nu,m}x)}\over{J_{\nu+1}(j_{\nu,m})^2}} g_m.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@example
+f(t) = \sum_@{m=1@}^\infty (2 J_\nu(j_(\nu,m)x) / J_(\nu+1)(j_(\nu,m))^2) g_m.
+@end example
+
+@end ifinfo
+@noindent
+Suppose that @math{f} is band-limited in the sense that
+@math{g_m=0} for @math{m > M}. Then we have the following
+fundamental sampling theorem.
+@tex
+\beforedisplay
+$$
+g_m = {{2}\over{j_{\nu,M}^2}}
+ \sum_{k=1}^{M-1} f\left({{j_{\nu,k}}\over{j_{\nu,M}}}\right)
+ {{J_\nu(j_{\nu,m} j_{\nu,k} / j_{\nu,M})}\over{J_{\nu+1}(j_{\nu,k})^2}}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@example
+g_m = (2 / j_(\nu,M)^2)
+ \sum_@{k=1@}^@{M-1@} f(j_(\nu,k)/j_(\nu,M))
+ (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2).
+@end example
+
+@end ifinfo
+@noindent
+It is this discrete expression which defines the discrete Hankel
+transform. The kernel in the summation above defines the matrix of the
+@math{\nu}-Hankel transform of size @math{M-1}. The coefficients of
+this matrix, being dependent on @math{\nu} and @math{M}, must be
+precomputed and stored; the @code{gsl_dht} object encapsulates this
+data. The allocation function @code{gsl_dht_alloc} returns a
+@code{gsl_dht} object which must be properly initialized with
+@code{gsl_dht_init} before it can be used to perform transforms on data
+sample vectors, for fixed @math{\nu} and @math{M}, using the
+@code{gsl_dht_apply} function. The implementation allows a scaling of
+the fundamental interval, for convenience, so that one can assume the
+function is defined on the interval @math{[0,X]}, rather than the unit
+interval.
+
+Notice that by assumption @math{f(t)} vanishes at the endpoints
+of the interval, consistent with the inversion formula
+and the sampling formula given above. Therefore, this transform
+corresponds to an orthogonal expansion in eigenfunctions
+of the Dirichlet problem for the Bessel differential equation.
+
+
+@node Discrete Hankel Transform Functions
+@section Functions
+
+@deftypefun {gsl_dht *} gsl_dht_alloc (size_t @var{size})
+This function allocates a Discrete Hankel transform object of size
+@var{size}.
+@end deftypefun
+
+@deftypefun int gsl_dht_init (gsl_dht * @var{t}, double @var{nu}, double @var{xmax})
+This function initializes the transform @var{t} for the given values of
+@var{nu} and @var{x}.
+@end deftypefun
+
+@deftypefun {gsl_dht *} gsl_dht_new (size_t @var{size}, double @var{nu}, double @var{xmax})
+This function allocates a Discrete Hankel transform object of size
+@var{size} and initializes it for the given values of @var{nu} and
+@var{x}.
+@end deftypefun
+
+@deftypefun void gsl_dht_free (gsl_dht * @var{t})
+This function frees the transform @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_dht_apply (const gsl_dht * @var{t}, double * @var{f_in}, double * @var{f_out})
+This function applies the transform @var{t} to the array @var{f_in}
+whose size is equal to the size of the transform. The result is stored
+in the array @var{f_out} which must be of the same length.
+@end deftypefun
+
+@deftypefun double gsl_dht_x_sample (const gsl_dht * @var{t}, int @var{n})
+This function returns the value of the @var{n}-th sample point in the unit interval,
+@c{${({j_{\nu,n+1}} / {j_{\nu,M}}}) X$}
+@math{(j_@{\nu,n+1@}/j_@{\nu,M@}) X}. These are the
+points where the function @math{f(t)} is assumed to be sampled.
+@end deftypefun
+
+@deftypefun double gsl_dht_k_sample (const gsl_dht * @var{t}, int @var{n})
+This function returns the value of the @var{n}-th sample point in ``k-space'',
+@c{${{j_{\nu,n+1}} / X}$}
+@math{j_@{\nu,n+1@}/X}.
+@end deftypefun
+
+@node Discrete Hankel Transform References
+@section References and Further Reading
+
+The algorithms used by these functions are described in the following papers,
+
+@itemize @asis
+@item
+H. Fisk Johnson, Comp.@: Phys.@: Comm.@: 43, 181 (1987).
+@end itemize
+
+@itemize @asis
+@item
+D. Lemoine, J. Chem.@: Phys.@: 101, 3936 (1994).
+@end itemize
diff --git a/gsl-1.9/doc/diff.texi b/gsl-1.9/doc/diff.texi
new file mode 100644
index 0000000..ba11ebc
--- /dev/null
+++ b/gsl-1.9/doc/diff.texi
@@ -0,0 +1,105 @@
+@cindex differentiation of functions, numeric
+@cindex functions, numerical differentiation
+@cindex derivatives, calculating numerically
+@cindex numerical derivatives
+@cindex slope, see numerical derivative
+
+The functions described in this chapter compute numerical derivatives by
+finite differencing. An adaptive algorithm is used to find the best
+choice of finite difference and to estimate the error in the derivative.
+These functions are declared in the header file @file{gsl_deriv.h}.
+
+@menu
+* Numerical Differentiation functions::
+* Numerical Differentiation Examples::
+* Numerical Differentiation References::
+@end menu
+
+@node Numerical Differentiation functions
+@section Functions
+
+@deftypefun int gsl_deriv_central (const gsl_function * @var{f}, double @var{x}, double @var{h}, double * @var{result}, double * @var{abserr})
+This function computes the numerical derivative of the function @var{f}
+at the point @var{x} using an adaptive central difference algorithm with
+a step-size of @var{h}. The derivative is returned in @var{result} and an
+estimate of its absolute error is returned in @var{abserr}.
+
+The initial value of @var{h} is used to estimate an optimal step-size,
+based on the scaling of the truncation error and round-off error in the
+derivative calculation. The derivative is computed using a 5-point rule
+for equally spaced abscissae at @math{x-h}, @math{x-h/2}, @math{x},
+@math{x+h/2}, @math{x+h}, with an error estimate taken from the difference
+between the 5-point rule and the corresponding 3-point rule @math{x-h},
+@math{x}, @math{x+h}. Note that the value of the function at @math{x}
+does not contribute to the derivative calculation, so only 4-points are
+actually used.
+@end deftypefun
+
+@deftypefun int gsl_deriv_forward (const gsl_function * @var{f}, double @var{x}, double @var{h}, double * @var{result}, double * @var{abserr})
+This function computes the numerical derivative of the function @var{f}
+at the point @var{x} using an adaptive forward difference algorithm with
+a step-size of @var{h}. The function is evaluated only at points greater
+than @var{x}, and never at @var{x} itself. The derivative is returned in
+@var{result} and an estimate of its absolute error is returned in
+@var{abserr}. This function should be used if @math{f(x)} has a
+discontinuity at @var{x}, or is undefined for values less than @var{x}.
+
+The initial value of @var{h} is used to estimate an optimal step-size,
+based on the scaling of the truncation error and round-off error in the
+derivative calculation. The derivative at @math{x} is computed using an
+``open'' 4-point rule for equally spaced abscissae at @math{x+h/4},
+@math{x+h/2}, @math{x+3h/4}, @math{x+h}, with an error estimate taken
+from the difference between the 4-point rule and the corresponding
+2-point rule @math{x+h/2}, @math{x+h}.
+@end deftypefun
+
+@deftypefun int gsl_deriv_backward (const gsl_function * @var{f}, double @var{x}, double @var{h}, double * @var{result}, double * @var{abserr})
+This function computes the numerical derivative of the function @var{f}
+at the point @var{x} using an adaptive backward difference algorithm
+with a step-size of @var{h}. The function is evaluated only at points
+less than @var{x}, and never at @var{x} itself. The derivative is
+returned in @var{result} and an estimate of its absolute error is
+returned in @var{abserr}. This function should be used if @math{f(x)}
+has a discontinuity at @var{x}, or is undefined for values greater than
+@var{x}.
+
+This function is equivalent to calling @code{gsl_deriv_forward} with a
+negative step-size.
+@end deftypefun
+
+@node Numerical Differentiation Examples
+@section Examples
+
+The following code estimates the derivative of the function
+@c{$f(x) = x^{3/2}$}
+@math{f(x) = x^@{3/2@}}
+at @math{x=2} and at @math{x=0}. The function @math{f(x)} is
+undefined for @math{x<0} so the derivative at @math{x=0} is computed
+using @code{gsl_deriv_forward}.
+
+@example
+@verbatiminclude examples/diff.c
+@end example
+
+@noindent
+Here is the output of the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/diff.out
+@end example
+
+@node Numerical Differentiation References
+@section References and Further Reading
+
+The algorithms used by these functions are described in the following sources:
+
+@itemize @asis
+@item
+Abramowitz and Stegun, @cite{Handbook of Mathematical Functions},
+Section 25.3.4, and Table 25.5 (Coefficients for Differentiation).
+
+@item
+S.D. Conte and Carl de Boor, @cite{Elementary Numerical Analysis: An
+Algorithmic Approach}, McGraw-Hill, 1972.
+@end itemize
diff --git a/gsl-1.9/doc/dwt-orig.eps b/gsl-1.9/doc/dwt-orig.eps
new file mode 100644
index 0000000..2bf4de7
--- /dev/null
+++ b/gsl-1.9/doc/dwt-orig.eps
@@ -0,0 +1,2657 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Thu Jul 22 17:12:05 2004
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 112 210 487 402
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 112 210 487 402
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 5760 Rect
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 130.678 218.1928 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2304 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 171.356 218.1928 ] concat
+%I
+[
+(32)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3168 5760
+3168 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3168 2304
+3168 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 214.556 218.1928 ] concat
+%I
+[
+(64)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 5760
+4032 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 2304
+4032 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 257.756 218.1928 ] concat
+%I
+[
+(96)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4896 5760
+4896 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4896 2304
+4896 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 298.434 218.1928 ] concat
+%I
+[
+(128)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 5760
+5760 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 341.634 218.1928 ] concat
+%I
+[
+(160)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6624 5760
+6624 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6624 2304
+6624 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 384.834 218.1928 ] concat
+%I
+[
+(192)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 5760
+7488 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 2304
+7488 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 428.034 218.1928 ] concat
+%I
+[
+(224)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8352 5760
+8352 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8352 2304
+8352 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 471.234 218.1928 ] concat
+%I
+[
+(256)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9216 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 112.6999 226.0284 ] concat
+%I
+[
+(-0.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9147 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2373 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 112.6999 245.2284 ] concat
+%I
+[
+(-0.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2688
+9147 2688
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2688
+2373 2688
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 264.4284 ] concat
+%I
+[
+(0.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3072
+9147 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3072
+2373 3072
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 283.6284 ] concat
+%I
+[
+(0.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9147 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2373 3456
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 302.8284 ] concat
+%I
+[
+(0.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3840
+9147 3840
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3840
+2373 3840
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 322.0284 ] concat
+%I
+[
+(0.6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4224
+9147 4224
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4224
+2373 4224
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 341.2284 ] concat
+%I
+[
+(0.8)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9147 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2373 4608
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 360.4284 ] concat
+%I
+[
+(1.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4992
+9147 4992
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4992
+2373 4992
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 379.6284 ] concat
+%I
+[
+(1.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5376
+9147 5376
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5376
+2373 5376
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 398.8284 ] concat
+%I
+[
+(1.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9147 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2373 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9188 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2332 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2496
+9188 2496
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2496
+2332 2496
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2688
+9188 2688
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2688
+2332 2688
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2880
+9188 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2880
+2332 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3072
+9188 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3072
+2332 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3264
+9188 3264
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3264
+2332 3264
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9188 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2332 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3648
+9188 3648
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3648
+2332 3648
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3840
+9188 3840
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3840
+2332 3840
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9188 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2332 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4224
+9188 4224
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4224
+2332 4224
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4416
+9188 4416
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4416
+2332 4416
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9188 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2332 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4800
+9188 4800
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4800
+2332 4800
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4992
+9188 4992
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4992
+2332 4992
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5184
+9188 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5184
+2332 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5376
+9188 5376
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5376
+2332 5376
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5568
+9188 5568
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5568
+2332 5568
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9188 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2332 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 34952
+1 0 0 [ 1.48 4.43 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3072
+9216 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 256
+2304 3161
+2331 3161
+2358 3170
+2385 3209
+2412 3209
+2439 3199
+2466 3257
+2493 3266
+2520 3295
+2547 3305
+2574 3295
+2601 3276
+2628 3247
+2655 3266
+2682 3257
+2709 3257
+2736 3257
+2763 3247
+2790 3238
+2817 3228
+2844 3238
+2871 3266
+2898 3286
+2925 3295
+2952 3218
+2979 3142
+3006 3142
+3033 3113
+3060 3094
+3087 3055
+3114 3055
+3141 3065
+3168 3084
+3195 3074
+3222 3084
+3249 3065
+3276 3036
+3303 3026
+3330 3036
+3357 3036
+3384 3017
+3411 3026
+3438 3007
+3465 3055
+3492 3046
+3519 3055
+3546 3074
+3573 3026
+3600 3007
+3627 3036
+3654 3055
+3681 3065
+3708 3055
+3735 3017
+3762 2988
+3789 2998
+3816 2959
+3843 2873
+3870 2834
+3897 2777
+3924 2710
+3951 2662
+3978 2719
+4005 2892
+4032 3113
+4059 3382
+4086 3660
+4113 4140
+4140 4630
+4167 5071
+4194 5369
+4221 5494
+4248 5426
+4275 5138
+4302 4630
+4329 4006
+4356 3478
+4383 3170
+4410 2940
+4437 2825
+4464 2777
+4491 2815
+4518 2873
+4545 2940
+4572 2940
+4599 2950
+4626 2940
+4653 2959
+4680 2959
+4707 2959
+4734 2930
+4761 2950
+4788 2950
+4815 2950
+4842 2969
+4869 2930
+4896 2902
+4923 2902
+4950 2921
+4977 2930
+5004 2940
+5031 2911
+5058 2930
+5085 2950
+5112 2969
+5139 2940
+5166 2940
+5193 2911
+5220 2902
+5247 2902
+5274 2940
+5301 2940
+5328 2930
+5355 2911
+5382 2892
+5409 2921
+5436 2902
+5463 2911
+5490 2902
+5517 2892
+5544 2902
+5571 2921
+5598 2921
+5625 2930
+5652 2940
+5679 2911
+5706 2902
+5733 2940
+5760 2940
+5787 2950
+5814 2950
+5841 2902
+5868 2911
+5895 2930
+5922 2940
+5949 2969
+5976 2940
+6003 2930
+6030 2902
+6057 2921
+6084 2940
+6111 2940
+6138 2950
+6165 2911
+6192 2892
+6219 2892
+6246 2921
+6273 2930
+6300 2911
+6327 2892
+6354 2882
+6381 2882
+6408 2902
+6435 2892
+6462 2873
+6489 2882
+6516 2854
+6543 2863
+6570 2863
+6597 2882
+6624 2863
+6651 2825
+6678 2815
+6705 2825
+6732 2854
+6759 2834
+6786 2825
+6813 2815
+6840 2786
+6867 2806
+6894 2815
+6921 2825
+6948 2815
+6975 2786
+7002 2777
+7029 2806
+7056 2825
+7083 2834
+7110 2844
+7137 2854
+7164 2844
+7191 2902
+7218 2930
+7245 2978
+7272 2988
+7299 2998
+7326 2988
+7353 3036
+7380 3065
+7407 3084
+7434 3074
+7461 3055
+7488 3055
+7515 3074
+7542 3094
+7569 3113
+7596 3113
+7623 3074
+7650 3074
+7677 3084
+7704 3103
+7731 3103
+7758 3122
+7785 3074
+7812 3055
+7839 3103
+7866 3094
+7893 3113
+7920 3113
+7947 3074
+7974 3065
+8001 3094
+8028 3103
+8055 3084
+8082 3103
+8109 3084
+8136 3084
+8163 3094
+8190 3122
+8217 3132
+8244 3103
+8271 3094
+8298 3074
+8325 3084
+8352 3113
+8379 3084
+8406 3084
+8433 3084
+8460 3055
+8487 3084
+8514 3074
+8541 3084
+8568 3065
+8595 3046
+8622 3036
+8649 3046
+8676 3046
+8703 3055
+8730 3065
+8757 3026
+8784 3017
+8811 3026
+8838 3046
+8865 3055
+8892 3055
+8919 3026
+8946 3026
+8973 3026
+9000 3074
+9027 3055
+9054 3046
+9081 3036
+9108 3007
+9135 3046
+9162 3055
+9189 3055
+256 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/dwt-samp.eps b/gsl-1.9/doc/dwt-samp.eps
new file mode 100644
index 0000000..14fd3a8
--- /dev/null
+++ b/gsl-1.9/doc/dwt-samp.eps
@@ -0,0 +1,2657 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Thu Jul 22 17:12:13 2004
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 112 210 487 402
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 112 210 487 402
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 5760 Rect
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 130.678 218.1928 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2304 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 171.356 218.1928 ] concat
+%I
+[
+(32)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3168 5760
+3168 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3168 2304
+3168 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 214.556 218.1928 ] concat
+%I
+[
+(64)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 5760
+4032 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 2304
+4032 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 257.756 218.1928 ] concat
+%I
+[
+(96)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4896 5760
+4896 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4896 2304
+4896 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 298.434 218.1928 ] concat
+%I
+[
+(128)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 5760
+5760 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 341.634 218.1928 ] concat
+%I
+[
+(160)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6624 5760
+6624 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6624 2304
+6624 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 384.834 218.1928 ] concat
+%I
+[
+(192)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 5760
+7488 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 2304
+7488 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 428.034 218.1928 ] concat
+%I
+[
+(224)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8352 5760
+8352 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8352 2304
+8352 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 471.234 218.1928 ] concat
+%I
+[
+(256)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9216 5691
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2373
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 112.6999 226.0284 ] concat
+%I
+[
+(-0.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9147 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2373 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 112.6999 245.2284 ] concat
+%I
+[
+(-0.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2688
+9147 2688
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2688
+2373 2688
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 264.4284 ] concat
+%I
+[
+(0.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3072
+9147 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3072
+2373 3072
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 283.6284 ] concat
+%I
+[
+(0.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9147 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2373 3456
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 302.8284 ] concat
+%I
+[
+(0.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3840
+9147 3840
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3840
+2373 3840
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 322.0284 ] concat
+%I
+[
+(0.6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4224
+9147 4224
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4224
+2373 4224
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 341.2284 ] concat
+%I
+[
+(0.8)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9147 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2373 4608
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 360.4284 ] concat
+%I
+[
+(1.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4992
+9147 4992
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4992
+2373 4992
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 379.6284 ] concat
+%I
+[
+(1.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5376
+9147 5376
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5376
+2373 5376
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-9-*-*-*-*-*-*-*
+/Helvetica 9.072000 SetF
+%I t
+[ 1 0 0 1 117.9979 398.8284 ] concat
+%I
+[
+(1.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9147 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2373 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9188 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2332 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2496
+9188 2496
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2496
+2332 2496
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2688
+9188 2688
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2688
+2332 2688
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2880
+9188 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2880
+2332 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3072
+9188 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3072
+2332 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3264
+9188 3264
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3264
+2332 3264
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9188 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2332 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3648
+9188 3648
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3648
+2332 3648
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3840
+9188 3840
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3840
+2332 3840
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9188 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2332 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4224
+9188 4224
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4224
+2332 4224
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4416
+9188 4416
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4416
+2332 4416
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9188 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2332 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4800
+9188 4800
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4800
+2332 4800
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4992
+9188 4992
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4992
+2332 4992
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5184
+9188 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5184
+2332 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5376
+9188 5376
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5376
+2332 5376
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5568
+9188 5568
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5568
+2332 5568
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9188 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2332 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 34952
+1 0 0 [ 1.48 4.43 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3072
+9216 3072
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 256
+2304 3104
+2331 3133
+2358 3151
+2385 3172
+2412 3182
+2439 3195
+2466 3211
+2493 3226
+2520 3230
+2547 3238
+2574 3248
+2601 3257
+2628 3269
+2655 3280
+2682 3291
+2709 3302
+2736 3272
+2763 3253
+2790 3244
+2817 3233
+2844 3233
+2871 3230
+2898 3224
+2925 3219
+2952 3170
+2979 3133
+3006 3107
+3033 3079
+3060 3062
+3087 3042
+3114 3018
+3141 2996
+3168 3041
+3195 3068
+3222 3077
+3249 3091
+3276 3087
+3303 3088
+3330 3093
+3357 3097
+3384 3083
+3411 3074
+3438 3070
+3465 3064
+3492 3064
+3519 3062
+3546 3059
+3573 3056
+3600 3044
+3627 3036
+3654 3029
+3681 3022
+3708 3016
+3735 3011
+3762 3004
+3789 2998
+3816 2918
+3843 2858
+3870 2817
+3897 2771
+3924 2760
+3951 2739
+3978 2709
+4005 2681
+4032 3062
+4059 3334
+4086 3727
+4113 4088
+4140 4611
+4167 5091
+4194 5289
+4221 5563
+4248 5317
+4275 5210
+4302 4533
+4329 4009
+4356 3548
+4383 3070
+4410 2955
+4437 2743
+4464 2875
+4491 2915
+4518 2863
+4545 2836
+4572 2893
+4599 2928
+4626 2940
+4653 2958
+4680 2933
+4707 2920
+4734 2918
+4761 2913
+4788 2920
+4815 2924
+4842 2924
+4869 2925
+4896 2920
+4923 2917
+4950 2916
+4977 2913
+5004 2913
+5031 2912
+5058 2911
+5085 2910
+5112 2910
+5139 2910
+5166 2910
+5193 2910
+5220 2909
+5247 2908
+5274 2908
+5301 2907
+5328 2907
+5355 2907
+5382 2907
+5409 2906
+5436 2906
+5463 2905
+5490 2905
+5517 2905
+5544 2904
+5571 2904
+5598 2903
+5625 2903
+5652 2902
+5679 2902
+5706 2902
+5733 2901
+5760 2901
+5787 2901
+5814 2900
+5841 2900
+5868 2900
+5895 2900
+5922 2899
+5949 2899
+5976 2899
+6003 2898
+6030 2898
+6057 2898
+6084 2897
+6111 2897
+6138 2897
+6165 2896
+6192 2896
+6219 2895
+6246 2895
+6273 2895
+6300 2894
+6327 2894
+6354 2894
+6381 2893
+6408 2893
+6435 2892
+6462 2892
+6489 2892
+6516 2891
+6543 2891
+6570 2891
+6597 2890
+6624 2873
+6651 2860
+6678 2852
+6705 2843
+6732 2838
+6759 2832
+6786 2824
+6813 2817
+6840 2815
+6867 2811
+6894 2806
+6921 2802
+6948 2796
+6975 2791
+7002 2785
+7029 2780
+7056 2839
+7083 2881
+7110 2906
+7137 2935
+7164 2947
+7191 2964
+7218 2985
+7245 3005
+7272 3008
+7299 3015
+7326 3027
+7353 3038
+7380 3053
+7407 3067
+7434 3080
+7461 3093
+7488 3068
+7515 3052
+7542 3048
+7569 3040
+7596 3043
+7623 3043
+7650 3040
+7677 3038
+7704 3046
+7731 3052
+7758 3055
+7785 3058
+7812 3059
+7839 3061
+7866 3063
+7893 3065
+7920 3077
+7947 3087
+7974 3094
+8001 3102
+8028 3106
+8055 3112
+8082 3118
+8109 3125
+8136 3128
+8163 3132
+8190 3137
+8217 3142
+8244 3147
+8271 3152
+8298 3157
+8325 3162
+8352 3139
+8379 3123
+8406 3115
+8433 3105
+8460 3102
+8487 3097
+8514 3091
+8541 3085
+8568 3086
+8595 3086
+8622 3083
+8649 3081
+8676 3077
+8703 3073
+8730 3070
+8757 3067
+8784 3072
+8811 3074
+8838 3075
+8865 3076
+8892 3074
+8919 3074
+8946 3074
+8973 3074
+9000 3072
+9027 3070
+9054 3069
+9081 3068
+9108 3067
+9135 3066
+9162 3065
+9189 3064
+256 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/dwt.texi b/gsl-1.9/doc/dwt.texi
new file mode 100644
index 0000000..fa80b19
--- /dev/null
+++ b/gsl-1.9/doc/dwt.texi
@@ -0,0 +1,449 @@
+@cindex DWT, see wavelet transforms
+@cindex wavelet transforms
+@cindex transforms, wavelet
+
+This chapter describes functions for performing Discrete Wavelet
+Transforms (DWTs). The library includes wavelets for real data in both
+one and two dimensions. The wavelet functions are declared in the header
+files @file{gsl_wavelet.h} and @file{gsl_wavelet2d.h}.
+
+@menu
+* DWT Definitions::
+* DWT Initialization::
+* DWT Transform Functions::
+* DWT Examples::
+* DWT References::
+@end menu
+
+@node DWT Definitions
+@section Definitions
+@cindex DWT, mathematical definition
+
+The continuous wavelet transform and its inverse are defined by
+the relations,
+@iftex
+@tex
+\beforedisplay
+$$
+w(s, \tau) = \int_{-\infty}^\infty f(t) * \psi^*_{s,\tau}(t) dt
+$$
+\afterdisplay
+@end tex
+@end iftex
+@ifinfo
+
+@example
+w(s,\tau) = \int f(t) * \psi^*_@{s,\tau@}(t) dt
+@end example
+
+@end ifinfo
+@noindent
+and,
+@tex
+\beforedisplay
+$$
+f(t) = \int_0^\infty ds \int_{-\infty}^\infty w(s, \tau) * \psi_{s,\tau}(t) d\tau
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f(t) = \int \int_@{-\infty@}^\infty w(s, \tau) * \psi_@{s,\tau@}(t) d\tau ds
+@end example
+
+@end ifinfo
+@noindent
+where the basis functions @c{$\psi_{s,\tau}$}
+@math{\psi_@{s,\tau@}} are obtained by scaling
+and translation from a single function, referred to as the @dfn{mother
+wavelet}.
+
+The discrete version of the wavelet transform acts on equally-spaced
+samples, with fixed scaling and translation steps (@math{s},
+@math{\tau}). The frequency and time axes are sampled @dfn{dyadically}
+on scales of @math{2^j} through a level parameter @math{j}.
+@c The wavelet @math{\psi}
+@c can be expressed in terms of a scaling function @math{\varphi},
+@c
+@c @tex
+@c \beforedisplay
+@c $$
+@c \psi(2^{j-1},t) = \sum_{k=0}^{2^j-1} g_j(k) * \bar{\varphi}(2^j t-k)
+@c $$
+@c \afterdisplay
+@c @end tex
+@c @ifinfo
+@c @example
+@c \psi(2^@{j-1@},t) = \sum_@{k=0@}^@{2^j-1@} g_j(k) * \bar@{\varphi@}(2^j t-k)
+@c @end example
+@c @end ifinfo
+@c @noindent
+@c and
+@c
+@c @tex
+@c \beforedisplay
+@c $$
+@c \varphi(2^{j-1},t) = \sum_{k=0}^{2^j-1} h_j(k) * \bar{\varphi}(2^j t-k)
+@c $$
+@c \afterdisplay
+@c @end tex
+@c @ifinfo
+@c @example
+@c \varphi(2^@{j-1@},t) = \sum_@{k=0@}^@{2^j-1@} h_j(k) * \bar@{\varphi@}(2^j t-k)
+@c @end example
+@c @end ifinfo
+@c @noindent
+@c The functions @math{\psi} and @math{\varphi} are related through the
+@c coefficients
+@c @c{$g_{n} = (-1)^n h_{L-1-n}$}
+@c @math{g_@{n@} = (-1)^n h_@{L-1-n@}}
+@c for @c{$n=0 \dots L-1$}
+@c @math{n=0 ... L-1},
+@c where @math{L} is the total number of coefficients. The two sets of
+@c coefficients @math{h_j} and @math{g_i} define the scaling function and
+@c the wavelet.
+The resulting family of functions @c{$\{\psi_{j,n}\}$}
+@math{@{\psi_@{j,n@}@}}
+constitutes an orthonormal
+basis for square-integrable signals.
+
+The discrete wavelet transform is an @math{O(N)} algorithm, and is also
+referred to as the @dfn{fast wavelet transform}.
+
+@node DWT Initialization
+@section Initialization
+@cindex DWT initialization
+
+The @code{gsl_wavelet} structure contains the filter coefficients
+defining the wavelet and any associated offset parameters.
+
+@deftypefun {gsl_wavelet *} gsl_wavelet_alloc (const gsl_wavelet_type * @var{T}, size_t @var{k})
+This function allocates and initializes a wavelet object of type
+@var{T}. The parameter @var{k} selects the specific member of the
+wavelet family. A null pointer is returned if insufficient memory is
+available or if a unsupported member is selected.
+@end deftypefun
+
+The following wavelet types are implemented:
+
+@deffn {Wavelet} gsl_wavelet_daubechies
+@deffnx {Wavelet} gsl_wavelet_daubechies_centered
+@cindex Daubechies wavelets
+@cindex maximal phase, Daubechies wavelets
+The is the Daubechies wavelet family of maximum phase with @math{k/2}
+vanishing moments. The implemented wavelets are
+@c{$k=4, 6, \dots, 20$}
+@math{k=4, 6, @dots{}, 20}, with @var{k} even.
+@end deffn
+
+@deffn {Wavelet} gsl_wavelet_haar
+@deffnx {Wavelet} gsl_wavelet_haar_centered
+@cindex Haar wavelets
+This is the Haar wavelet. The only valid choice of @math{k} for the
+Haar wavelet is @math{k=2}.
+@end deffn
+
+@deffn {Wavelet} gsl_wavelet_bspline
+@deffnx {Wavelet} gsl_wavelet_bspline_centered
+@cindex biorthogonal wavelets
+@cindex B-spline wavelets
+This is the biorthogonal B-spline wavelet family of order @math{(i,j)}.
+The implemented values of @math{k = 100*i + j} are 103, 105, 202, 204,
+206, 208, 301, 303, 305 307, 309.
+@end deffn
+
+@noindent
+The centered forms of the wavelets align the coefficients of the various
+sub-bands on edges. Thus the resulting visualization of the
+coefficients of the wavelet transform in the phase plane is easier to
+understand.
+
+@deftypefun {const char *} gsl_wavelet_name (const gsl_wavelet * @var{w})
+This function returns a pointer to the name of the wavelet family for
+@var{w}.
+@end deftypefun
+
+@c @deftypefun {void} gsl_wavelet_print (const gsl_wavelet * @var{w})
+@c This function prints the filter coefficients (@code{**h1}, @code{**g1}, @code{**h2}, @code{**g2}) of the wavelet object @var{w}.
+@c @end deftypefun
+
+@deftypefun {void} gsl_wavelet_free (gsl_wavelet * @var{w})
+This function frees the wavelet object @var{w}.
+@end deftypefun
+
+The @code{gsl_wavelet_workspace} structure contains scratch space of the
+same size as the input data and is used to hold intermediate results
+during the transform.
+
+@deftypefun {gsl_wavelet_workspace *} gsl_wavelet_workspace_alloc (size_t @var{n})
+This function allocates a workspace for the discrete wavelet transform.
+To perform a one-dimensional transform on @var{n} elements, a workspace
+of size @var{n} must be provided. For two-dimensional transforms of
+@var{n}-by-@var{n} matrices it is sufficient to allocate a workspace of
+size @var{n}, since the transform operates on individual rows and
+columns.
+@end deftypefun
+
+@deftypefun {void} gsl_wavelet_workspace_free (gsl_wavelet_workspace * @var{work})
+This function frees the allocated workspace @var{work}.
+@end deftypefun
+
+@node DWT Transform Functions
+@section Transform Functions
+
+This sections describes the actual functions performing the discrete
+wavelet transform. Note that the transforms use periodic boundary
+conditions. If the signal is not periodic in the sample length then
+spurious coefficients will appear at the beginning and end of each level
+of the transform.
+
+@menu
+* DWT in one dimension::
+* DWT in two dimension::
+@end menu
+
+@node DWT in one dimension
+@subsection Wavelet transforms in one dimension
+@cindex DWT, one dimensional
+
+@deftypefun int gsl_wavelet_transform (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{stride}, size_t @var{n}, gsl_wavelet_direction @var{dir}, gsl_wavelet_workspace * @var{work})
+@deftypefunx int gsl_wavelet_transform_forward (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{stride}, size_t @var{n}, gsl_wavelet_workspace * @var{work})
+@deftypefunx int gsl_wavelet_transform_inverse (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{stride}, size_t @var{n}, gsl_wavelet_workspace * @var{work})
+
+These functions compute in-place forward and inverse discrete wavelet
+transforms of length @var{n} with stride @var{stride} on the array
+@var{data}. The length of the transform @var{n} is restricted to powers
+of two. For the @code{transform} version of the function the argument
+@var{dir} can be either @code{forward} (@math{+1}) or @code{backward}
+(@math{-1}). A workspace @var{work} of length @var{n} must be provided.
+
+For the forward transform, the elements of the original array are
+replaced by the discrete wavelet
+transform @c{$f_i \rightarrow w_{j,k}$}
+@math{f_i -> w_@{j,k@}}
+in a packed triangular storage layout,
+where @var{j} is the index of the level
+@c{$j = 0 \dots J-1$}
+@math{j = 0 ... J-1}
+and
+@var{k} is the index of the coefficient within each level,
+@c{$k = 0 \dots 2^j - 1$}
+@math{k = 0 ... (2^j)-1}.
+The total number of levels is @math{J = \log_2(n)}. The output data
+has the following form,
+@tex
+\beforedisplay
+$$
+(s_{-1,0}, d_{0,0}, d_{1,0}, d_{1,1}, d_{2,0},\cdots, d_{j,k},\cdots, d_{J-1,2^{J-1} - 1})
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+(s_@{-1,0@}, d_@{0,0@}, d_@{1,0@}, d_@{1,1@}, d_@{2,0@}, ...,
+ d_@{j,k@}, ..., d_@{J-1,2^@{J-1@}-1@})
+@end example
+
+@end ifinfo
+@noindent
+where the first element is the smoothing coefficient @c{$s_{-1,0}$}
+@math{s_@{-1,0@}}, followed by the detail coefficients @c{$d_{j,k}$}
+@math{d_@{j,k@}} for each level
+@math{j}. The backward transform inverts these coefficients to obtain
+the original data.
+
+These functions return a status of @code{GSL_SUCCESS} upon successful
+completion. @code{GSL_EINVAL} is returned if @var{n} is not an integer
+power of 2 or if insufficient workspace is provided.
+@end deftypefun
+
+@node DWT in two dimension
+@subsection Wavelet transforms in two dimension
+@cindex DWT, two dimensional
+
+The library provides functions to perform two-dimensional discrete
+wavelet transforms on square matrices. The matrix dimensions must be an
+integer power of two. There are two possible orderings of the rows and
+columns in the two-dimensional wavelet transform, referred to as the
+``standard'' and ``non-standard'' forms.
+
+The ``standard'' transform performs a complete discrete wavelet
+transform on the rows of the matrix, followed by a separate complete
+discrete wavelet transform on the columns of the resulting
+row-transformed matrix. This procedure uses the same ordering as a
+two-dimensional fourier transform.
+
+The ``non-standard'' transform is performed in interleaved passes on the
+rows and columns of the matrix for each level of the transform. The
+first level of the transform is applied to the matrix rows, and then to
+the matrix columns. This procedure is then repeated across the rows and
+columns of the data for the subsequent levels of the transform, until
+the full discrete wavelet transform is complete. The non-standard form
+of the discrete wavelet transform is typically used in image analysis.
+
+The functions described in this section are declared in the header file
+@file{gsl_wavelet2d.h}.
+
+@deftypefun {int} gsl_wavelet2d_transform (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{tda}, size_t @var{size1}, size_t @var{size2}, gsl_wavelet_direction @var{dir}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_transform_forward (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{tda}, size_t @var{size1}, size_t @var{size2}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_transform_inverse (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{tda}, size_t @var{size1}, size_t @var{size2}, gsl_wavelet_workspace * @var{work})
+
+These functions compute two-dimensional in-place forward and inverse
+discrete wavelet transforms in standard and non-standard forms on the
+array @var{data} stored in row-major form with dimensions @var{size1}
+and @var{size2} and physical row length @var{tda}. The dimensions must
+be equal (square matrix) and are restricted to powers of two. For the
+@code{transform} version of the function the argument @var{dir} can be
+either @code{forward} (@math{+1}) or @code{backward} (@math{-1}). A
+workspace @var{work} of the appropriate size must be provided. On exit,
+the appropriate elements of the array @var{data} are replaced by their
+two-dimensional wavelet transform.
+
+The functions return a status of @code{GSL_SUCCESS} upon successful
+completion. @code{GSL_EINVAL} is returned if @var{size1} and
+@var{size2} are not equal and integer powers of 2, or if insufficient
+workspace is provided.
+@end deftypefun
+
+@deftypefun {int} gsl_wavelet2d_transform_matrix (const gsl_wavelet * @var{w}, gsl_matrix * @var{m}, gsl_wavelet_direction @var{dir}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_transform_matrix_forward (const gsl_wavelet * @var{w}, gsl_matrix * @var{m}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_transform_matrix_inverse (const gsl_wavelet * @var{w}, gsl_matrix * @var{m}, gsl_wavelet_workspace * @var{work})
+These functions compute the two-dimensional in-place wavelet transform
+on a matrix @var{a}.
+@end deftypefun
+
+@deftypefun {int} gsl_wavelet2d_nstransform (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{tda}, size_t @var{size1}, size_t @var{size2}, gsl_wavelet_direction @var{dir}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_nstransform_forward (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{tda}, size_t @var{size1}, size_t @var{size2}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_nstransform_inverse (const gsl_wavelet * @var{w}, double * @var{data}, size_t @var{tda}, size_t @var{size1}, size_t @var{size2}, gsl_wavelet_workspace * @var{work})
+These functions compute the two-dimensional wavelet transform in
+non-standard form.
+@end deftypefun
+
+@deftypefun {int} gsl_wavelet2d_nstransform_matrix (const gsl_wavelet * @var{w}, gsl_matrix * @var{m}, gsl_wavelet_direction @var{dir}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_nstransform_matrix_forward (const gsl_wavelet * @var{w}, gsl_matrix * @var{m}, gsl_wavelet_workspace * @var{work})
+@deftypefunx {int} gsl_wavelet2d_nstransform_matrix_inverse (const gsl_wavelet * @var{w}, gsl_matrix * @var{m}, gsl_wavelet_workspace * @var{work})
+These functions compute the non-standard form of the two-dimensional
+in-place wavelet transform on a matrix @var{a}.
+@end deftypefun
+
+@node DWT Examples
+@section Examples
+
+The following program demonstrates the use of the one-dimensional
+wavelet transform functions. It computes an approximation to an input
+signal (of length 256) using the 20 largest components of the wavelet
+transform, while setting the others to zero.
+
+@example
+@verbatiminclude examples/dwt.c
+@end example
+
+@noindent
+The output can be used with the @sc{gnu} plotutils @code{graph} program,
+
+@example
+$ ./a.out ecg.dat > dwt.dat
+$ graph -T ps -x 0 256 32 -h 0.3 -a dwt.dat > dwt.ps
+@end example
+
+@iftex
+The graphs below show an original and compressed version of a sample ECG
+recording from the MIT-BIH Arrhythmia Database, part of the PhysioNet
+archive of public-domain of medical datasets.
+
+@sp 1
+@center @image{dwt-orig,3.4in}
+@center @image{dwt-samp,3.4in}
+@quotation
+Original (upper) and wavelet-compressed (lower) ECG signals, using the
+20 largest components of the Daubechies(4) discrete wavelet transform.
+@end quotation
+@end iftex
+
+@node DWT References
+@section References and Further Reading
+
+The mathematical background to wavelet transforms is covered in the
+original lectures by Daubechies,
+
+@itemize @asis
+@item
+Ingrid Daubechies.
+Ten Lectures on Wavelets.
+@cite{CBMS-NSF Regional Conference Series in Applied Mathematics} (1992),
+SIAM, ISBN 0898712742.
+@end itemize
+
+@noindent
+An easy to read introduction to the subject with an emphasis on the
+application of the wavelet transform in various branches of science is,
+
+@itemize @asis
+@item
+Paul S. Addison. @cite{The Illustrated Wavelet Transform Handbook}.
+Institute of Physics Publishing (2002), ISBN 0750306920.
+@end itemize
+
+@noindent
+For extensive coverage of signal analysis by wavelets, wavelet packets
+and local cosine bases see,
+
+@itemize @asis
+@item
+S. G. Mallat. @cite{A wavelet tour of signal processing} (Second
+edition). Academic Press (1999), ISBN 012466606X.
+@end itemize
+
+@noindent
+The concept of multiresolution analysis underlying the wavelet transform
+is described in,
+
+@itemize @asis
+@item
+S. G. Mallat.
+Multiresolution Approximations and Wavelet Orthonormal Bases of L@math{^2}(R).
+@cite{Transactions of the American Mathematical Society}, 315(1), 1989, 69--87.
+@end itemize
+
+@itemize @asis
+@item
+S. G. Mallat.
+A Theory for Multiresolution Signal Decomposition---The Wavelet Representation.
+@cite{IEEE Transactions on Pattern Analysis and Machine Intelligence}, 11, 1989,
+674--693.
+@end itemize
+
+@noindent
+The coefficients for the individual wavelet families implemented by the
+library can be found in the following papers,
+
+@itemize @asis
+@item
+I. Daubechies.
+Orthonormal Bases of Compactly Supported Wavelets.
+@cite{Communications on Pure and Applied Mathematics}, 41 (1988) 909--996.
+@end itemize
+
+@itemize @asis
+@item
+A. Cohen, I. Daubechies, and J.-C. Feauveau.
+Biorthogonal Bases of Compactly Supported Wavelets.
+@cite{Communications on Pure and Applied Mathematics}, 45 (1992)
+485--560.
+@end itemize
+
+@noindent
+The PhysioNet archive of physiological datasets can be found online at
+@uref{http://www.physionet.org/} and is described in the following
+paper,
+
+@itemize @asis
+@item
+Goldberger et al.
+PhysioBank, PhysioToolkit, and PhysioNet: Components
+of a New Research Resource for Complex Physiologic
+Signals.
+@cite{Circulation} 101(23):e215-e220 2000.
+@end itemize
diff --git a/gsl-1.9/doc/eigen.texi b/gsl-1.9/doc/eigen.texi
new file mode 100644
index 0000000..e2c291a
--- /dev/null
+++ b/gsl-1.9/doc/eigen.texi
@@ -0,0 +1,462 @@
+@cindex eigenvalues and eigenvectors
+This chapter describes functions for computing eigenvalues and
+eigenvectors of matrices. There are routines for real symmetric,
+real nonsymmetric, and complex hermitian matrices. Eigenvalues can
+be computed with or without eigenvectors. The hermitian matrix algorithms
+used are symmetric bidiagonalization followed by QR reduction. The
+nonsymmetric algorithm is the Francis QR double-shift.
+
+@cindex LAPACK, recommended for linear algebra
+These routines are intended for ``small'' systems where simple algorithms are
+acceptable. Anyone interested in finding eigenvalues and eigenvectors of
+large matrices will want to use the sophisticated routines found in
+@sc{lapack}. The Fortran version of @sc{lapack} is recommended as the
+standard package for large-scale linear algebra.
+
+The functions described in this chapter are declared in the header file
+@file{gsl_eigen.h}.
+
+@menu
+* Real Symmetric Matrices::
+* Complex Hermitian Matrices::
+* Real Nonsymmetric Matrices::
+* Sorting Eigenvalues and Eigenvectors::
+* Eigenvalue and Eigenvector Examples::
+* Eigenvalue and Eigenvector References::
+@end menu
+
+@node Real Symmetric Matrices
+@section Real Symmetric Matrices
+@cindex symmetric matrix, real, eigensystem
+@cindex real symmetric matrix, eigensystem
+
+@deftypefun {gsl_eigen_symm_workspace *} gsl_eigen_symm_alloc (const size_t @var{n})
+This function allocates a workspace for computing eigenvalues of
+@var{n}-by-@var{n} real symmetric matrices. The size of the workspace
+is @math{O(2n)}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_symm_free (gsl_eigen_symm_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_eigen_symm (gsl_matrix * @var{A}, gsl_vector * @var{eval}, gsl_eigen_symm_workspace * @var{w})
+This function computes the eigenvalues of the real symmetric matrix
+@var{A}. Additional workspace of the appropriate size must be provided
+in @var{w}. The diagonal and lower triangular part of @var{A} are
+destroyed during the computation, but the strict upper triangular part
+is not referenced. The eigenvalues are stored in the vector @var{eval}
+and are unordered.
+@end deftypefun
+
+@deftypefun {gsl_eigen_symmv_workspace *} gsl_eigen_symmv_alloc (const size_t @var{n})
+This function allocates a workspace for computing eigenvalues and
+eigenvectors of @var{n}-by-@var{n} real symmetric matrices. The size of
+the workspace is @math{O(4n)}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_symmv_free (gsl_eigen_symmv_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_eigen_symmv (gsl_matrix * @var{A}, gsl_vector * @var{eval}, gsl_matrix * @var{evec}, gsl_eigen_symmv_workspace * @var{w})
+This function computes the eigenvalues and eigenvectors of the real
+symmetric matrix @var{A}. Additional workspace of the appropriate size
+must be provided in @var{w}. The diagonal and lower triangular part of
+@var{A} are destroyed during the computation, but the strict upper
+triangular part is not referenced. The eigenvalues are stored in the
+vector @var{eval} and are unordered. The corresponding eigenvectors are
+stored in the columns of the matrix @var{evec}. For example, the
+eigenvector in the first column corresponds to the first eigenvalue.
+The eigenvectors are guaranteed to be mutually orthogonal and normalised
+to unit magnitude.
+@end deftypefun
+
+@node Complex Hermitian Matrices
+@section Complex Hermitian Matrices
+
+@cindex hermitian matrix, complex, eigensystem
+@cindex complex hermitian matrix, eigensystem
+
+@deftypefun {gsl_eigen_herm_workspace *} gsl_eigen_herm_alloc (const size_t @var{n})
+This function allocates a workspace for computing eigenvalues of
+@var{n}-by-@var{n} complex hermitian matrices. The size of the workspace
+is @math{O(3n)}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_herm_free (gsl_eigen_herm_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_eigen_herm (gsl_matrix_complex * @var{A}, gsl_vector * @var{eval}, gsl_eigen_herm_workspace * @var{w})
+This function computes the eigenvalues of the complex hermitian matrix
+@var{A}. Additional workspace of the appropriate size must be provided
+in @var{w}. The diagonal and lower triangular part of @var{A} are
+destroyed during the computation, but the strict upper triangular part
+is not referenced. The imaginary parts of the diagonal are assumed to be
+zero and are not referenced. The eigenvalues are stored in the vector
+@var{eval} and are unordered.
+@end deftypefun
+
+@deftypefun {gsl_eigen_hermv_workspace *} gsl_eigen_hermv_alloc (const size_t @var{n})
+This function allocates a workspace for computing eigenvalues and
+eigenvectors of @var{n}-by-@var{n} complex hermitian matrices. The size of
+the workspace is @math{O(5n)}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_hermv_free (gsl_eigen_hermv_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_eigen_hermv (gsl_matrix_complex * @var{A}, gsl_vector * @var{eval}, gsl_matrix_complex * @var{evec}, gsl_eigen_hermv_workspace * @var{w})
+This function computes the eigenvalues and eigenvectors of the complex
+hermitian matrix @var{A}. Additional workspace of the appropriate size
+must be provided in @var{w}. The diagonal and lower triangular part of
+@var{A} are destroyed during the computation, but the strict upper
+triangular part is not referenced. The imaginary parts of the diagonal
+are assumed to be zero and are not referenced. The eigenvalues are
+stored in the vector @var{eval} and are unordered. The corresponding
+complex eigenvectors are stored in the columns of the matrix @var{evec}.
+For example, the eigenvector in the first column corresponds to the
+first eigenvalue. The eigenvectors are guaranteed to be mutually
+orthogonal and normalised to unit magnitude.
+@end deftypefun
+
+@node Real Nonsymmetric Matrices
+@section Real Nonsymmetric Matrices
+@cindex nonsymmetric matrix, real, eigensystem
+@cindex real nonsymmetric matrix, eigensystem
+
+The solution of the real nonsymmetric eigensystem problem for a
+matrix @math{A} involves computing the Schur decomposition
+@tex
+\beforedisplay
+$$
+A = Z T Z^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = Z T Z^T
+@end example
+
+@end ifinfo
+where @math{Z} is an orthogonal matrix of Schur vectors and @math{T},
+the Schur form, is quasi upper triangular with diagonal
+@math{1}-by-@math{1} blocks which are real eigenvalues of @math{A}, and
+diagonal @math{2}-by-@math{2} blocks whose eigenvalues are complex
+conjugate eigenvalues of @math{A}. The algorithm used is the double
+shift Francis method.
+
+@deftypefun {gsl_eigen_nonsymm_workspace *} gsl_eigen_nonsymm_alloc (const size_t @var{n})
+This function allocates a workspace for computing eigenvalues of
+@var{n}-by-@var{n} real nonsymmetric matrices. The size of the workspace
+is @math{O(2n)}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_nonsymm_free (gsl_eigen_nonsymm_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_nonsymm_params (const int @var{compute_t}, const int @var{balance}, gsl_eigen_nonsymm_workspace * @var{w})
+This function sets some parameters which determine how the eigenvalue
+problem is solved in subsequent calls to @code{gsl_eigen_nonsymm}.
+
+If @var{compute_t} is set to 1, the full Schur form @math{T} will be
+computed by @code{gsl_eigen_nonsymm}. If it is set to 0,
+@math{T} will not be computed (this is the default setting). Computing
+the full Schur form @math{T} requires approximately 1.5-2 times the
+number of flops.
+
+If @var{balance} is set to 1, a balancing transformation is applied
+to the matrix prior to computing eigenvalues. This transformation is
+designed to make the rows and columns of the matrix have comparable
+norms, and can result in more accurate eigenvalues for matrices
+whose entries vary widely in magnitude. See @ref{Balancing} for more
+information. Note that the balancing transformation does not preserve
+the orthogonality of the Schur vectors, so if you wish to compute the
+Schur vectors with @code{gsl_eigen_nonsymm_Z} you will obtain the Schur
+vectors of the balanced matrix instead of the original matrix. The
+relationship will be
+@tex
+\beforedisplay
+$$
+T = Q^t D^{-1} A D Q
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+T = Q^t D^(-1) A D Q
+@end example
+
+@end ifinfo
+@noindent
+where @var{Q} is the matrix of Schur vectors for the balanced matrix, and
+@var{D} is the balancing transformation. Then @code{gsl_eigen_nonsymm_Z}
+will compute a matrix @var{Z} which satisfies
+@tex
+\beforedisplay
+$$
+T = Z^{-1} A Z
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+T = Z^(-1) A Z
+@end example
+
+@end ifinfo
+@noindent
+with @math{Z = D Q}. Note that @var{Z} will not be orthogonal. For
+this reason, balancing is not performed by default.
+@end deftypefun
+
+@deftypefun int gsl_eigen_nonsymm (gsl_matrix * @var{A}, gsl_vector_complex * @var{eval}, gsl_eigen_nonsymm_workspace * @var{w})
+This function computes the eigenvalues of the real nonsymmetric matrix
+@var{A} and stores them in the vector @var{eval}. If @math{T} is
+desired, it is stored in the upper portion of @var{A} on output.
+Otherwise, on output, the diagonal of @var{A} will contain the
+@math{1}-by-@math{1} real eigenvalues and @math{2}-by-@math{2}
+complex conjugate eigenvalue systems, and the rest of @var{A} is
+destroyed. In rare cases, this function will fail to find all
+eigenvalues. If this happens, an error code is returned
+and the number of converged eigenvalues is stored in @code{w->n_evals}.
+The converged eigenvalues are stored in the beginning of @var{eval}.
+@end deftypefun
+
+@deftypefun int gsl_eigen_nonsymm_Z (gsl_matrix * @var{A}, gsl_vector_complex * @var{eval}, gsl_matrix * @var{Z}, gsl_eigen_nonsymm_workspace * @var{w})
+This function is identical to @code{gsl_eigen_nonsymm} except it also
+computes the Schur vectors and stores them into @var{Z}.
+@end deftypefun
+
+@deftypefun {gsl_eigen_nonsymmv_workspace *} gsl_eigen_nonsymmv_alloc (const size_t @var{n})
+This function allocates a workspace for computing eigenvalues and
+eigenvectors of @var{n}-by-@var{n} real nonsymmetric matrices. The
+size of the workspace is @math{O(5n)}.
+@end deftypefun
+
+@deftypefun void gsl_eigen_nonsymmv_free (gsl_eigen_nonsymmv_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_eigen_nonsymmv (gsl_matrix * @var{A}, gsl_vector_complex * @var{eval}, gsl_matrix_complex * @var{evec}, gsl_eigen_nonsymmv_workspace * @var{w})
+This function computes eigenvalues and right eigenvectors of the
+@var{n}-by-@var{n} real nonsymmetric matrix @var{A}. It first calls
+@code{gsl_eigen_nonsymm} to compute the eigenvalues, Schur form @math{T}, and
+Schur vectors. Then it finds eigenvectors of @math{T} and backtransforms
+them using the Schur vectors. The Schur vectors are destroyed in the
+process, but can be saved by using @code{gsl_eigen_nonsymmv_Z}. The
+computed eigenvectors are normalized to have Euclidean norm 1. On
+output, the upper portion of @var{A} contains the Schur form
+@math{T}. If @code{gsl_eigen_nonsymm} fails, no eigenvectors are
+computed, and an error code is returned.
+@end deftypefun
+
+@deftypefun int gsl_eigen_nonsymmv_Z (gsl_matrix * @var{A}, gsl_vector_complex * @var{eval}, gsl_matrix_complex * @var{evec}, gsl_matrix * @var{Z}, gsl_eigen_nonsymmv_workspace * @var{w})
+This function is identical to @code{gsl_eigen_nonsymmv} except it also saves
+the Schur vectors into @var{Z}.
+@end deftypefun
+
+@node Sorting Eigenvalues and Eigenvectors
+@section Sorting Eigenvalues and Eigenvectors
+@cindex sorting eigenvalues and eigenvectors
+
+@deftypefun int gsl_eigen_symmv_sort (gsl_vector * @var{eval}, gsl_matrix * @var{evec}, gsl_eigen_sort_t @var{sort_type})
+This function simultaneously sorts the eigenvalues stored in the vector
+@var{eval} and the corresponding real eigenvectors stored in the columns
+of the matrix @var{evec} into ascending or descending order according to
+the value of the parameter @var{sort_type},
+
+@table @code
+@item GSL_EIGEN_SORT_VAL_ASC
+ascending order in numerical value
+@item GSL_EIGEN_SORT_VAL_DESC
+descending order in numerical value
+@item GSL_EIGEN_SORT_ABS_ASC
+ascending order in magnitude
+@item GSL_EIGEN_SORT_ABS_DESC
+descending order in magnitude
+@end table
+
+@end deftypefun
+
+@deftypefun int gsl_eigen_hermv_sort (gsl_vector * @var{eval}, gsl_matrix_complex * @var{evec}, gsl_eigen_sort_t @var{sort_type})
+This function simultaneously sorts the eigenvalues stored in the vector
+@var{eval} and the corresponding complex eigenvectors stored in the
+columns of the matrix @var{evec} into ascending or descending order
+according to the value of the parameter @var{sort_type} as shown above.
+@end deftypefun
+
+@deftypefun int gsl_eigen_nonsymmv_sort (gsl_vector_complex * @var{eval}, gsl_matrix_complex * @var{evec}, gsl_eigen_sort_t @var{sort_type})
+This function simultaneously sorts the eigenvalues stored in the vector
+@var{eval} and the corresponding complex eigenvectors stored in the
+columns of the matrix @var{evec} into ascending or descending order
+according to the value of the parameter @var{sort_type} as shown above.
+Only GSL_EIGEN_SORT_ABS_ASC and GSL_EIGEN_SORT_ABS_DESC are supported
+due to the eigenvalues being complex.
+@end deftypefun
+
+
+@comment @deftypefun int gsl_eigen_jacobi (gsl_matrix * @var{matrix}, gsl_vector * @var{eval}, gsl_matrix * @var{evec}, unsigned int @var{max_rot}, unsigned int * @var{nrot})
+@comment This function finds the eigenvectors and eigenvalues of a real symmetric
+@comment matrix by Jacobi iteration. The data in the input matrix is destroyed.
+@comment @end deftypefun
+
+@comment @deftypefun int gsl_la_invert_jacobi (const gsl_matrix * @var{matrix}, gsl_matrix * @var{ainv}, unsigned int @var{max_rot})
+@comment Invert a matrix by Jacobi iteration.
+@comment @end deftypefun
+
+@comment @deftypefun int gsl_eigen_sort (gsl_vector * @var{eval}, gsl_matrix * @var{evec}, gsl_eigen_sort_t @var{sort_type})
+@comment This functions sorts the eigensystem results based on eigenvalues.
+@comment Sorts in order of increasing value or increasing
+@comment absolute value, depending on the value of
+@comment @var{sort_type}, which can be @code{GSL_EIGEN_SORT_VALUE}
+@comment or @code{GSL_EIGEN_SORT_ABSVALUE}.
+@comment @end deftypefun
+
+@node Eigenvalue and Eigenvector Examples
+@section Examples
+
+The following program computes the eigenvalues and eigenvectors of the 4-th order Hilbert matrix, @math{H(i,j) = 1/(i + j + 1)}.
+
+@example
+@verbatiminclude examples/eigen.c
+@end example
+
+@noindent
+Here is the beginning of the output from the program,
+
+@example
+$ ./a.out
+eigenvalue = 9.67023e-05
+eigenvector =
+-0.0291933
+0.328712
+-0.791411
+0.514553
+...
+@end example
+
+@noindent
+This can be compared with the corresponding output from @sc{gnu octave},
+
+@example
+octave> [v,d] = eig(hilb(4));
+octave> diag(d)
+ans =
+
+ 9.6702e-05
+ 6.7383e-03
+ 1.6914e-01
+ 1.5002e+00
+
+octave> v
+v =
+
+ 0.029193 0.179186 -0.582076 0.792608
+ -0.328712 -0.741918 0.370502 0.451923
+ 0.791411 0.100228 0.509579 0.322416
+ -0.514553 0.638283 0.514048 0.252161
+@end example
+
+@noindent
+Note that the eigenvectors can differ by a change of sign, since the
+sign of an eigenvector is arbitrary.
+
+The following program illustrates the use of the nonsymmetric
+eigensolver, by computing the eigenvalues and eigenvectors of
+the Vandermonde matrix @math{V(x;i,j) = x_i^{n - j}} with
+@math{x = (-1,-2,3,4)}.
+
+@example
+@verbatiminclude examples/eigen_nonsymm.c
+@end example
+
+@noindent
+Here is the beginning of the output from the program,
+
+@example
+$ ./a.out
+eigenvalue = -6.41391 + 0i
+eigenvector =
+-0.0998822 + 0i
+-0.111251 + 0i
+0.292501 + 0i
+0.944505 + 0i
+eigenvalue = 5.54555 + 3.08545i
+eigenvector =
+-0.043487 + -0.0076308i
+0.0642377 + -0.142127i
+-0.515253 + 0.0405118i
+-0.840592 + -0.00148565i
+...
+@end example
+
+@noindent
+This can be compared with the corresponding output from @sc{gnu octave},
+
+@example
+octave> [v,d] = eig(vander([-1 -2 3 4]));
+octave> diag(d)
+ans =
+
+ -6.4139 + 0.0000i
+ 5.5456 + 3.0854i
+ 5.5456 - 3.0854i
+ 2.3228 + 0.0000i
+
+octave> v
+v =
+
+ Columns 1 through 3:
+
+ -0.09988 + 0.00000i -0.04350 - 0.00755i -0.04350 + 0.00755i
+ -0.11125 + 0.00000i 0.06399 - 0.14224i 0.06399 + 0.14224i
+ 0.29250 + 0.00000i -0.51518 + 0.04142i -0.51518 - 0.04142i
+ 0.94451 + 0.00000i -0.84059 + 0.00000i -0.84059 - 0.00000i
+
+ Column 4:
+
+ -0.14493 + 0.00000i
+ 0.35660 + 0.00000i
+ 0.91937 + 0.00000i
+ 0.08118 + 0.00000i
+
+@end example
+Note that the eigenvectors corresponding to the eigenvalue
+@math{5.54555 + 3.08545i} are slightly different. This is because
+they differ by the multiplicative constant
+@math{0.9999984 + 0.0017674i} which has magnitude 1.
+
+@node Eigenvalue and Eigenvector References
+@section References and Further Reading
+
+Further information on the algorithms described in this section can be
+found in the following book,
+
+@itemize @asis
+@item
+G. H. Golub, C. F. Van Loan, @cite{Matrix Computations} (3rd Ed, 1996),
+Johns Hopkins University Press, ISBN 0-8018-5414-8.
+@end itemize
+
+@noindent
+The @sc{lapack} library is described in,
+
+@itemize @asis
+@item
+@cite{LAPACK Users' Guide} (Third Edition, 1999), Published by SIAM,
+ISBN 0-89871-447-8.
+
+@uref{http://www.netlib.org/lapack}
+@end itemize
+
+@noindent
+The @sc{lapack} source code can be found at the website above along with
+an online copy of the users guide.
diff --git a/gsl-1.9/doc/err.texi b/gsl-1.9/doc/err.texi
new file mode 100644
index 0000000..a687120
--- /dev/null
+++ b/gsl-1.9/doc/err.texi
@@ -0,0 +1,306 @@
+@cindex error handling
+This chapter describes the way that GSL functions report and handle
+errors. By examining the status information returned by every function
+you can determine whether it succeeded or failed, and if it failed you
+can find out what the precise cause of failure was. You can also define
+your own error handling functions to modify the default behavior of the
+library.
+
+The functions described in this section are declared in the header file
+@file{gsl_errno.h}.
+
+@menu
+* Error Reporting::
+* Error Codes::
+* Error Handlers::
+* Using GSL error reporting in your own functions::
+* Error Reporting Examples::
+@end menu
+
+@node Error Reporting
+@section Error Reporting
+
+The library follows the thread-safe error reporting conventions of the
+@sc{posix} Threads library. Functions return a non-zero error code to
+indicate an error and @code{0} to indicate success.
+
+@example
+int status = gsl_function (...)
+
+if (status) @{ /* an error occurred */
+ .....
+ /* status value specifies the type of error */
+@}
+@end example
+
+The routines report an error whenever they cannot perform the task
+requested of them. For example, a root-finding function would return a
+non-zero error code if could not converge to the requested accuracy, or
+exceeded a limit on the number of iterations. Situations like this are
+a normal occurrence when using any mathematical library and you should
+check the return status of the functions that you call.
+
+Whenever a routine reports an error the return value specifies the type
+of error. The return value is analogous to the value of the variable
+@code{errno} in the C library. The caller can examine the return code
+and decide what action to take, including ignoring the error if it is
+not considered serious.
+
+In addition to reporting errors by return codes the library also has an
+error handler function @code{gsl_error}. This function is called by
+other library functions when they report an error, just before they
+return to the caller. The default behavior of the error handler is to
+print a message and abort the program,
+
+@example
+gsl: file.c:67: ERROR: invalid argument supplied by user
+Default GSL error handler invoked.
+Aborted
+@end example
+
+The purpose of the @code{gsl_error} handler is to provide a function
+where a breakpoint can be set that will catch library errors when
+running under the debugger. It is not intended for use in production
+programs, which should handle any errors using the return codes.
+
+@node Error Codes
+@section Error Codes
+@cindex error codes, reserved
+The error code numbers returned by library functions are defined in
+the file @file{gsl_errno.h}. They all have the prefix @code{GSL_} and
+expand to non-zero constant integer values. Error codes above 1024 are
+reserved for applications, and are not used by the library. Many of
+the error codes use the same base name as the corresponding error code
+in the C library. Here are some of the most common error codes,
+
+@cindex error codes
+@deftypefn {Macro} int GSL_EDOM
+Domain error; used by mathematical functions when an argument value does
+not fall into the domain over which the function is defined (like
+EDOM in the C library)
+@end deftypefn
+
+@deftypefn {Macro} int GSL_ERANGE
+Range error; used by mathematical functions when the result value is not
+representable because of overflow or underflow (like ERANGE in the C
+library)
+@end deftypefn
+
+@deftypefn {Macro} int GSL_ENOMEM
+No memory available. The system cannot allocate more virtual memory
+because its capacity is full (like ENOMEM in the C library). This error
+is reported when a GSL routine encounters problems when trying to
+allocate memory with @code{malloc}.
+@end deftypefn
+
+@deftypefn {Macro} int GSL_EINVAL
+Invalid argument. This is used to indicate various kinds of problems
+with passing the wrong argument to a library function (like EINVAL in the C
+library).
+@end deftypefn
+
+The error codes can be converted into an error message using the
+function @code{gsl_strerror}.
+
+@deftypefun {const char *} gsl_strerror (const int @var{gsl_errno})
+This function returns a pointer to a string describing the error code
+@var{gsl_errno}. For example,
+
+@example
+printf ("error: %s\n", gsl_strerror (status));
+@end example
+
+@noindent
+would print an error message like @code{error: output range error} for a
+status value of @code{GSL_ERANGE}.
+@end deftypefun
+
+@node Error Handlers
+@section Error Handlers
+@cindex Error handlers
+
+The default behavior of the GSL error handler is to print a short
+message and call @code{abort}. When this default is in use programs
+will stop with a core-dump whenever a library routine reports an error.
+This is intended as a fail-safe default for programs which do not check
+the return status of library routines (we don't encourage you to write
+programs this way).
+
+If you turn off the default error handler it is your responsibility to
+check the return values of routines and handle them yourself. You can
+also customize the error behavior by providing a new error handler. For
+example, an alternative error handler could log all errors to a file,
+ignore certain error conditions (such as underflows), or start the
+debugger and attach it to the current process when an error occurs.
+
+All GSL error handlers have the type @code{gsl_error_handler_t}, which is
+defined in @file{gsl_errno.h},
+
+@deftp {Data Type} gsl_error_handler_t
+
+This is the type of GSL error handler functions. An error handler will
+be passed four arguments which specify the reason for the error (a
+string), the name of the source file in which it occurred (also a
+string), the line number in that file (an integer) and the error number
+(an integer). The source file and line number are set at compile time
+using the @code{__FILE__} and @code{__LINE__} directives in the
+preprocessor. An error handler function returns type @code{void}.
+Error handler functions should be defined like this,
+
+@example
+void handler (const char * reason,
+ const char * file,
+ int line,
+ int gsl_errno)
+@end example
+@end deftp
+@comment
+
+@noindent
+To request the use of your own error handler you need to call the
+function @code{gsl_set_error_handler} which is also declared in
+@file{gsl_errno.h},
+
+@deftypefun {gsl_error_handler_t *} gsl_set_error_handler (gsl_error_handler_t @var{new_handler})
+
+This function sets a new error handler, @var{new_handler}, for the GSL
+library routines. The previous handler is returned (so that you can
+restore it later). Note that the pointer to a user defined error
+handler function is stored in a static variable, so there can be only
+one error handler per program. This function should be not be used in
+multi-threaded programs except to set up a program-wide error handler
+from a master thread. The following example shows how to set and
+restore a new error handler,
+
+@example
+/* save original handler, install new handler */
+old_handler = gsl_set_error_handler (&my_handler);
+
+/* code uses new handler */
+.....
+
+/* restore original handler */
+gsl_set_error_handler (old_handler);
+@end example
+
+@noindent
+To use the default behavior (@code{abort} on error) set the error
+handler to @code{NULL},
+
+@example
+old_handler = gsl_set_error_handler (NULL);
+@end example
+@end deftypefun
+
+@deftypefun {gsl_error_handler_t *} gsl_set_error_handler_off ()
+This function turns off the error handler by defining an error handler
+which does nothing. This will cause the program to continue after any
+error, so the return values from any library routines must be checked.
+This is the recommended behavior for production programs. The previous
+handler is returned (so that you can restore it later).
+@end deftypefun
+
+The error behavior can be changed for specific applications by
+recompiling the library with a customized definition of the
+@code{GSL_ERROR} macro in the file @file{gsl_errno.h}.
+
+@node Using GSL error reporting in your own functions
+@section Using GSL error reporting in your own functions
+@cindex error handling macros
+If you are writing numerical functions in a program which also uses GSL
+code you may find it convenient to adopt the same error reporting
+conventions as in the library.
+
+To report an error you need to call the function @code{gsl_error} with a
+string describing the error and then return an appropriate error code
+from @code{gsl_errno.h}, or a special value, such as @code{NaN}. For
+convenience the file @file{gsl_errno.h} defines two macros which carry
+out these steps:
+
+@deffn {Macro} GSL_ERROR (@var{reason}, @var{gsl_errno})
+
+This macro reports an error using the GSL conventions and returns a
+status value of @code{gsl_errno}. It expands to the following code fragment,
+
+@example
+gsl_error (reason, __FILE__, __LINE__, gsl_errno);
+return gsl_errno;
+@end example
+
+@noindent
+The macro definition in @file{gsl_errno.h} actually wraps the code
+in a @code{do @{ ... @} while (0)} block to prevent possible
+parsing problems.
+@end deffn
+
+Here is an example of how the macro could be used to report that a
+routine did not achieve a requested tolerance. To report the error the
+routine needs to return the error code @code{GSL_ETOL}.
+
+@example
+if (residual > tolerance)
+ @{
+ GSL_ERROR("residual exceeds tolerance", GSL_ETOL);
+ @}
+@end example
+
+@deffn {Macro} GSL_ERROR_VAL (@var{reason}, @var{gsl_errno}, @var{value})
+
+This macro is the same as @code{GSL_ERROR} but returns a user-defined
+value of @var{value} instead of an error code. It can be used for
+mathematical functions that return a floating point value.
+@end deffn
+
+The following example shows how to return a @code{NaN} at a mathematical
+singularity using the @code{GSL_ERROR_VAL} macro,
+
+@example
+if (x == 0)
+ @{
+ GSL_ERROR_VAL("argument lies on singularity",
+ GSL_ERANGE, GSL_NAN);
+ @}
+@end example
+
+
+@node Error Reporting Examples
+@section Examples
+
+Here is an example of some code which checks the return value of a
+function where an error might be reported,
+
+@example
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_fft_complex.h>
+
+...
+ int status;
+ size_t n = 37;
+
+ gsl_set_error_handler_off();
+
+ status = gsl_fft_complex_radix2_forward (data, n);
+
+ if (status) @{
+ if (status == GSL_EINVAL) @{
+ fprintf (stderr, "invalid argument, n=%d\n", n);
+ @} else @{
+ fprintf (stderr, "failed, gsl_errno=%d\n",
+ status);
+ @}
+ exit (-1);
+ @}
+...
+@end example
+@comment
+
+@noindent
+The function @code{gsl_fft_complex_radix2} only accepts integer lengths
+which are a power of two. If the variable @code{n} is not a power of
+two then the call to the library function will return @code{GSL_EINVAL},
+indicating that the length argument is invalid. The function call to
+@code{gsl_set_error_handler_off} stops the default error handler from
+aborting the program. The @code{else} clause catches any other possible
+errors.
+
diff --git a/gsl-1.9/doc/examples/blas.c b/gsl-1.9/doc/examples/blas.c
new file mode 100644
index 0000000..ab4b39b
--- /dev/null
+++ b/gsl-1.9/doc/examples/blas.c
@@ -0,0 +1,31 @@
+#include <stdio.h>
+#include <gsl/gsl_blas.h>
+
+int
+main (void)
+{
+ double a[] = { 0.11, 0.12, 0.13,
+ 0.21, 0.22, 0.23 };
+
+ double b[] = { 1011, 1012,
+ 1021, 1022,
+ 1031, 1032 };
+
+ double c[] = { 0.00, 0.00,
+ 0.00, 0.00 };
+
+ gsl_matrix_view A = gsl_matrix_view_array(a, 2, 3);
+ gsl_matrix_view B = gsl_matrix_view_array(b, 3, 2);
+ gsl_matrix_view C = gsl_matrix_view_array(c, 2, 2);
+
+ /* Compute C = A B */
+
+ gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,
+ 1.0, &A.matrix, &B.matrix,
+ 0.0, &C.matrix);
+
+ printf ("[ %g, %g\n", c[0], c[1]);
+ printf (" %g, %g ]\n", c[2], c[3]);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/blas.out b/gsl-1.9/doc/examples/blas.out
new file mode 100644
index 0000000..e8ec960
--- /dev/null
+++ b/gsl-1.9/doc/examples/blas.out
@@ -0,0 +1,2 @@
+[ 367.76, 368.12
+ 674.06, 674.72 ] \ No newline at end of file
diff --git a/gsl-1.9/doc/examples/block.c b/gsl-1.9/doc/examples/block.c
new file mode 100644
index 0000000..53f62a1
--- /dev/null
+++ b/gsl-1.9/doc/examples/block.c
@@ -0,0 +1,14 @@
+#include <stdio.h>
+#include <gsl/gsl_block.h>
+
+int
+main (void)
+{
+ gsl_block * b = gsl_block_alloc (100);
+
+ printf ("length of block = %u\n", b->size);
+ printf ("block data address = %#x\n", b->data);
+
+ gsl_block_free (b);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/block.out b/gsl-1.9/doc/examples/block.out
new file mode 100644
index 0000000..1f84cd0
--- /dev/null
+++ b/gsl-1.9/doc/examples/block.out
@@ -0,0 +1,2 @@
+length of block = 100
+block data address = 0x804b0d8
diff --git a/gsl-1.9/doc/examples/bspline.c b/gsl-1.9/doc/examples/bspline.c
new file mode 100644
index 0000000..0d6a584
--- /dev/null
+++ b/gsl-1.9/doc/examples/bspline.c
@@ -0,0 +1,116 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <gsl/gsl_bspline.h>
+#include <gsl/gsl_multifit.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_randist.h>
+
+/* number of data points to fit */
+#define N 200
+
+/* number of fit coefficients */
+#define NCOEFFS 8
+
+/* nbreak = ncoeffs + 2 - k = ncoeffs - 2 since k = 4 */
+#define NBREAK (NCOEFFS - 2)
+
+int
+main (void)
+{
+ const size_t n = N;
+ const size_t ncoeffs = NCOEFFS;
+ const size_t nbreak = NBREAK;
+ size_t i, j;
+ gsl_bspline_workspace *bw;
+ gsl_vector *B;
+ double dy;
+ gsl_rng *r;
+ gsl_vector *c, *w;
+ gsl_vector *x, *y;
+ gsl_matrix *X, *cov;
+ gsl_multifit_linear_workspace *mw;
+ double chisq;
+
+ gsl_rng_env_setup();
+ r = gsl_rng_alloc(gsl_rng_default);
+
+ /* allocate a cubic bspline workspace (k = 4) */
+ bw = gsl_bspline_alloc(4, nbreak);
+ B = gsl_vector_alloc(ncoeffs);
+
+ x = gsl_vector_alloc(n);
+ y = gsl_vector_alloc(n);
+ X = gsl_matrix_alloc(n, ncoeffs);
+ c = gsl_vector_alloc(ncoeffs);
+ w = gsl_vector_alloc(n);
+ cov = gsl_matrix_alloc(ncoeffs, ncoeffs);
+ mw = gsl_multifit_linear_alloc(n, ncoeffs);
+
+ printf("#m=0,S=0\n");
+ /* this is the data to be fitted */
+ for (i = 0; i < n; ++i)
+ {
+ double sigma;
+ double xi = (15.0/(N-1)) * i;
+ double yi = cos(xi) * exp(-0.1 * xi);
+
+ sigma = 0.1;
+ dy = gsl_ran_gaussian(r, sigma);
+ yi += dy;
+
+ gsl_vector_set(x, i, xi);
+ gsl_vector_set(y, i, yi);
+ gsl_vector_set(w, i, 1.0 / (sigma*sigma));
+
+ printf("%f %f\n", xi, yi);
+ }
+
+ /* use uniform breakpoints on [0, 15] */
+ gsl_bspline_knots_uniform(0.0, 15.0, bw);
+
+ /* construct the fit matrix X */
+ for (i = 0; i < n; ++i)
+ {
+ double xi = gsl_vector_get(x, i);
+
+ /* compute B_j(xi) for all j */
+ gsl_bspline_eval(xi, B, bw);
+
+ /* fill in row i of X */
+ for (j = 0; j < ncoeffs; ++j)
+ {
+ double Bj = gsl_vector_get(B, j);
+ gsl_matrix_set(X, i, j, Bj);
+ }
+ }
+
+ /* do the fit */
+ gsl_multifit_wlinear(X, w, y, c, cov, &chisq, mw);
+
+ /* output the smoothed curve */
+ {
+ double xi, yi, yerr;
+
+ printf("#m=1,S=0\n");
+ for (xi = 0.0; xi < 15.0; xi += 0.1)
+ {
+ gsl_bspline_eval(xi, B, bw);
+ gsl_multifit_linear_est(B, c, cov, &yi, &yerr);
+ printf("%f %f\n", xi, yi);
+ }
+ }
+
+ gsl_rng_free(r);
+ gsl_bspline_free(bw);
+ gsl_vector_free(B);
+ gsl_vector_free(x);
+ gsl_vector_free(y);
+ gsl_matrix_free(X);
+ gsl_vector_free(c);
+ gsl_vector_free(w);
+ gsl_matrix_free(cov);
+ gsl_multifit_linear_free(mw);
+
+ return 0;
+} /* main() */
diff --git a/gsl-1.9/doc/examples/cblas.c b/gsl-1.9/doc/examples/cblas.c
new file mode 100644
index 0000000..cb6b31a
--- /dev/null
+++ b/gsl-1.9/doc/examples/cblas.c
@@ -0,0 +1,33 @@
+#include <stdio.h>
+#include <gsl/gsl_cblas.h>
+
+int
+main (void)
+{
+ int lda = 3;
+
+ float A[] = { 0.11, 0.12, 0.13,
+ 0.21, 0.22, 0.23 };
+
+ int ldb = 2;
+
+ float B[] = { 1011, 1012,
+ 1021, 1022,
+ 1031, 1032 };
+
+ int ldc = 2;
+
+ float C[] = { 0.00, 0.00,
+ 0.00, 0.00 };
+
+ /* Compute C = A B */
+
+ cblas_sgemm (CblasRowMajor,
+ CblasNoTrans, CblasNoTrans, 2, 2, 3,
+ 1.0, A, lda, B, ldb, 0.0, C, ldc);
+
+ printf ("[ %g, %g\n", C[0], C[1]);
+ printf (" %g, %g ]\n", C[2], C[3]);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/cblas.out b/gsl-1.9/doc/examples/cblas.out
new file mode 100644
index 0000000..a0f51d7
--- /dev/null
+++ b/gsl-1.9/doc/examples/cblas.out
@@ -0,0 +1,2 @@
+[ 367.76, 368.12
+ 674.06, 674.72 ]
diff --git a/gsl-1.9/doc/examples/cdf.c b/gsl-1.9/doc/examples/cdf.c
new file mode 100644
index 0000000..968eb96
--- /dev/null
+++ b/gsl-1.9/doc/examples/cdf.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <gsl/gsl_cdf.h>
+
+int
+main (void)
+{
+ double P, Q;
+ double x = 2.0;
+
+ P = gsl_cdf_ugaussian_P (x);
+ printf ("prob(x < %f) = %f\n", x, P);
+
+ Q = gsl_cdf_ugaussian_Q (x);
+ printf ("prob(x > %f) = %f\n", x, Q);
+
+ x = gsl_cdf_ugaussian_Pinv (P);
+ printf ("Pinv(%f) = %f\n", P, x);
+
+ x = gsl_cdf_ugaussian_Qinv (Q);
+ printf ("Qinv(%f) = %f\n", Q, x);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/cdf.out b/gsl-1.9/doc/examples/cdf.out
new file mode 100644
index 0000000..f04b75b
--- /dev/null
+++ b/gsl-1.9/doc/examples/cdf.out
@@ -0,0 +1,4 @@
+prob(x < 2.000000) = 0.977250
+prob(x > 2.000000) = 0.022750
+Pinv(0.977250) = 2.000000
+Qinv(0.022750) = 2.000000
diff --git a/gsl-1.9/doc/examples/cheb.c b/gsl-1.9/doc/examples/cheb.c
new file mode 100644
index 0000000..58a0c54
--- /dev/null
+++ b/gsl-1.9/doc/examples/cheb.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_chebyshev.h>
+
+double
+f (double x, void *p)
+{
+ if (x < 0.5)
+ return 0.25;
+ else
+ return 0.75;
+}
+
+int
+main (void)
+{
+ int i, n = 10000;
+
+ gsl_cheb_series *cs = gsl_cheb_alloc (40);
+
+ gsl_function F;
+
+ F.function = f;
+ F.params = 0;
+
+ gsl_cheb_init (cs, &F, 0.0, 1.0);
+
+ for (i = 0; i < n; i++)
+ {
+ double x = i / (double)n;
+ double r10 = gsl_cheb_eval_n (cs, 10, x);
+ double r40 = gsl_cheb_eval (cs, x);
+ printf ("%g %g %g %g\n",
+ x, GSL_FN_EVAL (&F, x), r10, r40);
+ }
+
+ gsl_cheb_free (cs);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/combination.c b/gsl-1.9/doc/examples/combination.c
new file mode 100644
index 0000000..708174f
--- /dev/null
+++ b/gsl-1.9/doc/examples/combination.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <gsl/gsl_combination.h>
+
+int
+main (void)
+{
+ gsl_combination * c;
+ size_t i;
+
+ printf ("All subsets of {0,1,2,3} by size:\n") ;
+ for (i = 0; i <= 4; i++)
+ {
+ c = gsl_combination_calloc (4, i);
+ do
+ {
+ printf ("{");
+ gsl_combination_fprintf (stdout, c, " %u");
+ printf (" }\n");
+ }
+ while (gsl_combination_next (c) == GSL_SUCCESS);
+ gsl_combination_free (c);
+ }
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/combination.out b/gsl-1.9/doc/examples/combination.out
new file mode 100644
index 0000000..a9050ab
--- /dev/null
+++ b/gsl-1.9/doc/examples/combination.out
@@ -0,0 +1,17 @@
+All subsets of {0,1,2,3} by size:
+{ }
+{ 0 }
+{ 1 }
+{ 2 }
+{ 3 }
+{ 0 1 }
+{ 0 2 }
+{ 0 3 }
+{ 1 2 }
+{ 1 3 }
+{ 2 3 }
+{ 0 1 2 }
+{ 0 1 3 }
+{ 0 2 3 }
+{ 1 2 3 }
+{ 0 1 2 3 }
diff --git a/gsl-1.9/doc/examples/const.c b/gsl-1.9/doc/examples/const.c
new file mode 100644
index 0000000..47718c5
--- /dev/null
+++ b/gsl-1.9/doc/examples/const.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include <gsl/gsl_const_mksa.h>
+
+int
+main (void)
+{
+ double c = GSL_CONST_MKSA_SPEED_OF_LIGHT;
+ double au = GSL_CONST_MKSA_ASTRONOMICAL_UNIT;
+ double minutes = GSL_CONST_MKSA_MINUTE;
+
+ /* distance stored in meters */
+ double r_earth = 1.00 * au;
+ double r_mars = 1.52 * au;
+
+ double t_min, t_max;
+
+ t_min = (r_mars - r_earth) / c;
+ t_max = (r_mars + r_earth) / c;
+
+ printf ("light travel time from Earth to Mars:\n");
+ printf ("minimum = %.1f minutes\n", t_min / minutes);
+ printf ("maximum = %.1f minutes\n", t_max / minutes);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/const.out b/gsl-1.9/doc/examples/const.out
new file mode 100644
index 0000000..6552a3d
--- /dev/null
+++ b/gsl-1.9/doc/examples/const.out
@@ -0,0 +1,3 @@
+light travel time from Earth to Mars:
+minimum = 4.3 minutes
+maximum = 21.0 minutes
diff --git a/gsl-1.9/doc/examples/demo_fn.c b/gsl-1.9/doc/examples/demo_fn.c
new file mode 100644
index 0000000..4d8a552
--- /dev/null
+++ b/gsl-1.9/doc/examples/demo_fn.c
@@ -0,0 +1,40 @@
+double
+quadratic (double x, void *params)
+{
+ struct quadratic_params *p
+ = (struct quadratic_params *) params;
+
+ double a = p->a;
+ double b = p->b;
+ double c = p->c;
+
+ return (a * x + b) * x + c;
+}
+
+double
+quadratic_deriv (double x, void *params)
+{
+ struct quadratic_params *p
+ = (struct quadratic_params *) params;
+
+ double a = p->a;
+ double b = p->b;
+ double c = p->c;
+
+ return 2.0 * a * x + b;
+}
+
+void
+quadratic_fdf (double x, void *params,
+ double *y, double *dy)
+{
+ struct quadratic_params *p
+ = (struct quadratic_params *) params;
+
+ double a = p->a;
+ double b = p->b;
+ double c = p->c;
+
+ *y = (a * x + b) * x + c;
+ *dy = 2.0 * a * x + b;
+}
diff --git a/gsl-1.9/doc/examples/demo_fn.h b/gsl-1.9/doc/examples/demo_fn.h
new file mode 100644
index 0000000..77aeea1
--- /dev/null
+++ b/gsl-1.9/doc/examples/demo_fn.h
@@ -0,0 +1,9 @@
+struct quadratic_params
+ {
+ double a, b, c;
+ };
+
+double quadratic (double x, void *params);
+double quadratic_deriv (double x, void *params);
+void quadratic_fdf (double x, void *params,
+ double *y, double *dy);
diff --git a/gsl-1.9/doc/examples/diff.c b/gsl-1.9/doc/examples/diff.c
new file mode 100644
index 0000000..b32e193
--- /dev/null
+++ b/gsl-1.9/doc/examples/diff.c
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_deriv.h>
+
+double f (double x, void * params)
+{
+ return pow (x, 1.5);
+}
+
+int
+main (void)
+{
+ gsl_function F;
+ double result, abserr;
+
+ F.function = &f;
+ F.params = 0;
+
+ printf ("f(x) = x^(3/2)\n");
+
+ gsl_deriv_central (&F, 2.0, 1e-8, &result, &abserr);
+ printf ("x = 2.0\n");
+ printf ("f'(x) = %.10f +/- %.10f\n", result, abserr);
+ printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0));
+
+ gsl_deriv_forward (&F, 0.0, 1e-8, &result, &abserr);
+ printf ("x = 0.0\n");
+ printf ("f'(x) = %.10f +/- %.10f\n", result, abserr);
+ printf ("exact = %.10f\n", 0.0);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/diff.out b/gsl-1.9/doc/examples/diff.out
new file mode 100644
index 0000000..dab42d5
--- /dev/null
+++ b/gsl-1.9/doc/examples/diff.out
@@ -0,0 +1,8 @@
+f(x) = x^(3/2)
+x = 2.0
+f'(x) = 2.1213203120 +/- 0.0000004064
+exact = 2.1213203436
+
+x = 0.0
+f'(x) = 0.0000000160 +/- 0.0000000339
+exact = 0.0000000000
diff --git a/gsl-1.9/doc/examples/dwt.c b/gsl-1.9/doc/examples/dwt.c
new file mode 100644
index 0000000..062b2c6
--- /dev/null
+++ b/gsl-1.9/doc/examples/dwt.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_sort.h>
+#include <gsl/gsl_wavelet.h>
+
+int
+main (int argc, char **argv)
+{
+ int i, n = 256, nc = 20;
+ double *data = malloc (n * sizeof (double));
+ double *abscoeff = malloc (n * sizeof (double));
+ size_t *p = malloc (n * sizeof (size_t));
+
+ FILE * f;
+ gsl_wavelet *w;
+ gsl_wavelet_workspace *work;
+
+ w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4);
+ work = gsl_wavelet_workspace_alloc (n);
+
+ f = fopen (argv[1], "r");
+ for (i = 0; i < n; i++)
+ {
+ fscanf (f, "%lg", &data[i]);
+ }
+ fclose (f);
+
+ gsl_wavelet_transform_forward (w, data, 1, n, work);
+
+ for (i = 0; i < n; i++)
+ {
+ abscoeff[i] = fabs (data[i]);
+ }
+
+ gsl_sort_index (p, abscoeff, 1, n);
+
+ for (i = 0; (i + nc) < n; i++)
+ data[p[i]] = 0;
+
+ gsl_wavelet_transform_inverse (w, data, 1, n, work);
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%g\n", data[i]);
+ }
+
+ gsl_wavelet_free (w);
+ gsl_wavelet_workspace_free (work);
+
+ free (data);
+ free (abscoeff);
+ free (p);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/dwt.dat b/gsl-1.9/doc/examples/dwt.dat
new file mode 100644
index 0000000..e7ff47b
--- /dev/null
+++ b/gsl-1.9/doc/examples/dwt.dat
@@ -0,0 +1,256 @@
+0.0167729
+0.031888
+0.0412921
+0.0522264
+0.0574496
+0.0642031
+0.0724869
+0.0803607
+0.0825233
+0.0862162
+0.0914394
+0.0962525
+0.102596
+0.108529
+0.114053
+0.119686
+0.104007
+0.094039
+0.0897813
+0.0839935
+0.0839162
+0.0823088
+0.0791713
+0.0764437
+0.0509741
+0.0315983
+0.0183161
+0.00340114
+-0.00542012
+-0.0158742
+-0.0279611
+-0.0396104
+-0.0160286
+-0.00188697
+0.00281451
+0.0100455
+0.00783627
+0.00815656
+0.0110063
+0.0131783
+0.00591016
+0.00117148
+-0.00103772
+-0.00392469
+-0.00428218
+-0.00531744
+-0.00703047
+-0.0085619
+-0.014332
+-0.0189663
+-0.0224649
+-0.0262678
+-0.0289349
+-0.0319064
+-0.0351822
+-0.0383765
+-0.0801973
+-0.111668
+-0.132789
+-0.156683
+-0.162696
+-0.1735
+-0.189095
+-0.203407
+-0.00510083
+0.136235
+0.341101
+0.528945
+0.801527
+1.0514
+1.15485
+1.29754
+1.16912
+1.11335
+0.760921
+0.487984
+0.24772
+-0.00129903
+-0.0610099
+-0.171446
+-0.102442
+-0.081519
+-0.108677
+-0.122951
+-0.0931296
+-0.0751235
+-0.0689329
+-0.0595764
+-0.0723311
+-0.0791611
+-0.0800665
+-0.0825593
+-0.0791275
+-0.0772832
+-0.0770263
+-0.0763442
+-0.078946
+-0.080668
+-0.0815099
+-0.0825877
+-0.0827855
+-0.083219
+-0.0838884
+-0.0844945
+-0.0842208
+-0.0841828
+-0.0843805
+-0.0845151
+-0.0848855
+-0.0851927
+-0.0854368
+-0.0856977
+-0.0858204
+-0.0859801
+-0.0861769
+-0.0863638
+-0.0865877
+-0.0868017
+-0.0870057
+-0.0872124
+-0.0874562
+-0.08769
+-0.0879139
+-0.0881405
+-0.0883571
+-0.0885764
+-0.0887984
+-0.0890196
+-0.0890797
+-0.0891829
+-0.0893293
+-0.0894642
+-0.0896423
+-0.0898087
+-0.0899636
+-0.0901216
+-0.0903228
+-0.0905125
+-0.0906905
+-0.0908717
+-0.0910413
+-0.0912139
+-0.0913897
+-0.0915647
+-0.0917828
+-0.0919894
+-0.0921844
+-0.0923825
+-0.092569
+-0.0927586
+-0.0929514
+-0.0931433
+-0.0933236
+-0.093507
+-0.0936935
+-0.0938792
+-0.094068
+-0.094256
+-0.0944431
+-0.0946305
+-0.103627
+-0.110264
+-0.11454
+-0.119448
+-0.121996
+-0.125177
+-0.12899
+-0.132633
+-0.133916
+-0.135831
+-0.138379
+-0.140758
+-0.143768
+-0.14661
+-0.149282
+-0.151999
+-0.121242
+-0.0994544
+-0.0866362
+-0.0714146
+-0.0651625
+-0.056507
+-0.0454482
+-0.0350333
+-0.033588
+-0.0297392
+-0.0234871
+-0.017879
+-0.00986753
+-0.00250002
+0.00422351
+0.0111196
+-0.00226639
+-0.0102178
+-0.0127347
+-0.0167077
+-0.0152462
+-0.0152409
+-0.0166917
+-0.0177524
+-0.0133785
+-0.0104608
+-0.00899926
+-0.00714755
+-0.00675204
+-0.00596633
+-0.00479045
+-0.00371911
+0.00278678
+0.00783649
+0.01143
+0.0154137
+0.0179412
+0.0208589
+0.0241668
+0.0273702
+0.0291173
+0.0312547
+0.0337822
+0.0362052
+0.0390183
+0.0417269
+0.044331
+0.0469631
+0.0347545
+0.0265225
+0.0222671
+0.0169461
+0.0156016
+0.0131917
+0.00971622
+0.00652626
+0.00731282
+0.00703387
+0.00568942
+0.00463047
+0.00250601
+0.000667052
+-0.000886403
+-0.00251636
+-0.000169788
+0.00111128
+0.00132683
+0.00182789
+0.00126344
+0.000984496
+0.000991051
+0.000921107
+-0.000214344
+-0.00106429
+-0.00162874
+-0.00226969
+-0.00262514
+-0.00305708
+-0.00356553
+-0.00405348
diff --git a/gsl-1.9/doc/examples/ecg.dat b/gsl-1.9/doc/examples/ecg.dat
new file mode 100644
index 0000000..5ea824a
--- /dev/null
+++ b/gsl-1.9/doc/examples/ecg.dat
@@ -0,0 +1,256 @@
+ 0.0462458471760794
+ 0.0462458471760794
+ 0.0512458471760794
+ 0.0712458471760795
+ 0.0712458471760795
+ 0.0662458471760795
+ 0.0962458471760795
+ 0.101245847176079
+ 0.116245847176079
+ 0.121245847176079
+ 0.116245847176079
+ 0.106245847176079
+ 0.0912458471760794
+ 0.101245847176079
+ 0.0962458471760795
+ 0.0962458471760795
+ 0.0962458471760795
+ 0.0912458471760794
+ 0.0862458471760795
+ 0.0812458471760795
+ 0.0862458471760795
+ 0.101245847176079
+ 0.111245847176079
+ 0.116245847176079
+ 0.0762458471760795
+ 0.0362458471760795
+ 0.0362458471760795
+ 0.0212458471760795
+ 0.0112458471760795
+ -0.00875415282392056
+ -0.00875415282392056
+ -0.00375415282392055
+ 0.00624584717607946
+ 0.00124584717607945
+ 0.00624584717607946
+ -0.00375415282392055
+ -0.0187541528239206
+ -0.0237541528239205
+ -0.0187541528239206
+ -0.0187541528239206
+ -0.0287541528239205
+ -0.0237541528239205
+ -0.0337541528239205
+ -0.00875415282392056
+ -0.0137541528239206
+ -0.00875415282392056
+ 0.00124584717607945
+ -0.0237541528239205
+ -0.0337541528239205
+ -0.0187541528239206
+ -0.00875415282392056
+ -0.00375415282392055
+ -0.00875415282392056
+ -0.0287541528239205
+ -0.0437541528239205
+ -0.0387541528239205
+ -0.0587541528239205
+ -0.103754152823921
+ -0.123754152823921
+ -0.153754152823921
+ -0.188754152823921
+ -0.213754152823921
+ -0.183754152823921
+ -0.0937541528239205
+ 0.0212458471760795
+ 0.161245847176079
+ 0.306245847176079
+ 0.556245847176079
+ 0.81124584717608
+ 1.04124584717608
+ 1.19624584717608
+ 1.26124584717608
+ 1.22624584717608
+ 1.07624584717608
+ 0.81124584717608
+ 0.486245847176079
+ 0.211245847176079
+ 0.0512458471760794
+ -0.0687541528239206
+ -0.128754152823921
+ -0.153754152823921
+ -0.133754152823921
+ -0.103754152823921
+ -0.0687541528239206
+ -0.0687541528239206
+ -0.0637541528239206
+ -0.0687541528239206
+ -0.0587541528239205
+ -0.0587541528239205
+ -0.0587541528239205
+ -0.0737541528239206
+ -0.0637541528239206
+ -0.0637541528239206
+ -0.0637541528239206
+ -0.0537541528239205
+ -0.0737541528239206
+ -0.0887541528239205
+ -0.0887541528239205
+ -0.0787541528239206
+ -0.0737541528239206
+ -0.0687541528239206
+ -0.0837541528239206
+ -0.0737541528239206
+ -0.0637541528239206
+ -0.0537541528239205
+ -0.0687541528239206
+ -0.0687541528239206
+ -0.0837541528239206
+ -0.0887541528239205
+ -0.0887541528239205
+ -0.0687541528239206
+ -0.0687541528239206
+ -0.0737541528239206
+ -0.0837541528239206
+ -0.0937541528239205
+ -0.0787541528239206
+ -0.0887541528239205
+ -0.0837541528239206
+ -0.0887541528239205
+ -0.0937541528239205
+ -0.0887541528239205
+ -0.0787541528239206
+ -0.0787541528239206
+ -0.0737541528239206
+ -0.0687541528239206
+ -0.0837541528239206
+ -0.0887541528239205
+ -0.0687541528239206
+ -0.0687541528239206
+ -0.0637541528239206
+ -0.0637541528239206
+ -0.0887541528239205
+ -0.0837541528239206
+ -0.0737541528239206
+ -0.0687541528239206
+ -0.0537541528239205
+ -0.0687541528239206
+ -0.0737541528239206
+ -0.0887541528239205
+ -0.0787541528239206
+ -0.0687541528239206
+ -0.0687541528239206
+ -0.0637541528239206
+ -0.0837541528239206
+ -0.0937541528239205
+ -0.0937541528239205
+ -0.0787541528239206
+ -0.0737541528239206
+ -0.0837541528239206
+ -0.0937541528239205
+ -0.0987541528239205
+ -0.0987541528239205
+ -0.0887541528239205
+ -0.0937541528239205
+ -0.103754152823921
+ -0.0987541528239205
+ -0.113754152823921
+ -0.108754152823921
+ -0.108754152823921
+ -0.0987541528239205
+ -0.108754152823921
+ -0.128754152823921
+ -0.133754152823921
+ -0.128754152823921
+ -0.113754152823921
+ -0.123754152823921
+ -0.128754152823921
+ -0.133754152823921
+ -0.148754152823921
+ -0.138754152823921
+ -0.133754152823921
+ -0.128754152823921
+ -0.133754152823921
+ -0.148754152823921
+ -0.153754152823921
+ -0.138754152823921
+ -0.128754152823921
+ -0.123754152823921
+ -0.118754152823921
+ -0.113754152823921
+ -0.118754152823921
+ -0.0887541528239205
+ -0.0737541528239206
+ -0.0487541528239205
+ -0.0437541528239205
+ -0.0387541528239205
+ -0.0437541528239205
+ -0.0187541528239206
+ -0.00375415282392055
+ 0.00624584717607946
+ 0.00124584717607945
+ -0.00875415282392056
+ -0.00875415282392056
+ 0.00124584717607945
+ 0.0112458471760795
+ 0.0212458471760795
+ 0.0212458471760795
+ 0.00124584717607945
+ 0.00124584717607945
+ 0.00624584717607946
+ 0.0162458471760795
+ 0.0162458471760795
+ 0.0262458471760795
+ 0.00124584717607945
+ -0.00875415282392056
+ 0.0162458471760795
+ 0.0112458471760795
+ 0.0212458471760795
+ 0.0212458471760795
+ 0.00124584717607945
+ -0.00375415282392055
+ 0.0112458471760795
+ 0.0162458471760795
+ 0.00624584717607946
+ 0.0162458471760795
+ 0.00624584717607946
+ 0.00624584717607946
+ 0.0112458471760795
+ 0.0262458471760795
+ 0.0312458471760795
+ 0.0162458471760795
+ 0.0112458471760795
+ 0.00124584717607945
+ 0.00624584717607946
+ 0.0212458471760795
+ 0.00624584717607946
+ 0.00624584717607946
+ 0.00624584717607946
+ -0.00875415282392056
+ 0.00624584717607946
+ 0.00124584717607945
+ 0.00624584717607946
+ -0.00375415282392055
+ -0.0137541528239206
+ -0.0187541528239206
+ -0.0137541528239206
+ -0.0137541528239206
+ -0.00875415282392056
+ -0.00375415282392055
+ -0.0237541528239205
+ -0.0287541528239205
+ -0.0237541528239205
+ -0.0137541528239206
+ -0.00875415282392056
+ -0.00875415282392056
+ -0.0237541528239205
+ -0.0237541528239205
+ -0.0237541528239205
+ 0.00124584717607945
+ -0.00875415282392056
+ -0.0137541528239206
+ -0.0187541528239206
+ -0.0337541528239205
+ -0.0137541528239206
+ -0.00875415282392056
+ -0.00875415282392056
diff --git a/gsl-1.9/doc/examples/eigen.c b/gsl-1.9/doc/examples/eigen.c
new file mode 100644
index 0000000..a24c912
--- /dev/null
+++ b/gsl-1.9/doc/examples/eigen.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_eigen.h>
+
+int
+main (void)
+{
+ double data[] = { 1.0 , 1/2.0, 1/3.0, 1/4.0,
+ 1/2.0, 1/3.0, 1/4.0, 1/5.0,
+ 1/3.0, 1/4.0, 1/5.0, 1/6.0,
+ 1/4.0, 1/5.0, 1/6.0, 1/7.0 };
+
+ gsl_matrix_view m
+ = gsl_matrix_view_array (data, 4, 4);
+
+ gsl_vector *eval = gsl_vector_alloc (4);
+ gsl_matrix *evec = gsl_matrix_alloc (4, 4);
+
+ gsl_eigen_symmv_workspace * w =
+ gsl_eigen_symmv_alloc (4);
+
+ gsl_eigen_symmv (&m.matrix, eval, evec, w);
+
+ gsl_eigen_symmv_free (w);
+
+ gsl_eigen_symmv_sort (eval, evec,
+ GSL_EIGEN_SORT_ABS_ASC);
+
+ {
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ double eval_i
+ = gsl_vector_get (eval, i);
+ gsl_vector_view evec_i
+ = gsl_matrix_column (evec, i);
+
+ printf ("eigenvalue = %g\n", eval_i);
+ printf ("eigenvector = \n");
+ gsl_vector_fprintf (stdout,
+ &evec_i.vector, "%g");
+ }
+ }
+
+ gsl_vector_free (eval);
+ gsl_matrix_free (evec);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/eigen_nonsymm.c b/gsl-1.9/doc/examples/eigen_nonsymm.c
new file mode 100644
index 0000000..ccbef2d
--- /dev/null
+++ b/gsl-1.9/doc/examples/eigen_nonsymm.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_eigen.h>
+
+int
+main (void)
+{
+ double data[] = { -1.0, 1.0, -1.0, 1.0,
+ -8.0, 4.0, -2.0, 1.0,
+ 27.0, 9.0, 3.0, 1.0,
+ 64.0, 16.0, 4.0, 1.0 };
+
+ gsl_matrix_view m
+ = gsl_matrix_view_array (data, 4, 4);
+
+ gsl_vector_complex *eval = gsl_vector_complex_alloc (4);
+ gsl_matrix_complex *evec = gsl_matrix_complex_alloc (4, 4);
+
+ gsl_eigen_nonsymmv_workspace * w =
+ gsl_eigen_nonsymmv_alloc (4);
+
+ gsl_eigen_nonsymmv (&m.matrix, eval, evec, w);
+
+ gsl_eigen_nonsymmv_free (w);
+
+ gsl_eigen_nonsymmv_sort (eval, evec,
+ GSL_EIGEN_SORT_ABS_DESC);
+
+ {
+ int i, j;
+
+ for (i = 0; i < 4; i++)
+ {
+ gsl_complex eval_i
+ = gsl_vector_complex_get (eval, i);
+ gsl_vector_complex_view evec_i
+ = gsl_matrix_complex_column (evec, i);
+
+ printf ("eigenvalue = %g + %gi\n",
+ GSL_REAL(eval_i), GSL_IMAG(eval_i));
+ printf ("eigenvector = \n");
+ for (j = 0; j < 4; ++j)
+ {
+ gsl_complex z = gsl_vector_complex_get(&evec_i.vector, j);
+ printf("%g + %gi\n", GSL_REAL(z), GSL_IMAG(z));
+ }
+ }
+ }
+
+ gsl_vector_complex_free(eval);
+ gsl_matrix_complex_free(evec);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/expfit.c b/gsl-1.9/doc/examples/expfit.c
new file mode 100644
index 0000000..f94cf2b
--- /dev/null
+++ b/gsl-1.9/doc/examples/expfit.c
@@ -0,0 +1,70 @@
+/* expfit.c -- model functions for exponential + background */
+
+struct data {
+ size_t n;
+ double * y;
+ double * sigma;
+};
+
+int
+expb_f (const gsl_vector * x, void *data,
+ gsl_vector * f)
+{
+ size_t n = ((struct data *)data)->n;
+ double *y = ((struct data *)data)->y;
+ double *sigma = ((struct data *) data)->sigma;
+
+ double A = gsl_vector_get (x, 0);
+ double lambda = gsl_vector_get (x, 1);
+ double b = gsl_vector_get (x, 2);
+
+ size_t i;
+
+ for (i = 0; i < n; i++)
+ {
+ /* Model Yi = A * exp(-lambda * i) + b */
+ double t = i;
+ double Yi = A * exp (-lambda * t) + b;
+ gsl_vector_set (f, i, (Yi - y[i])/sigma[i]);
+ }
+
+ return GSL_SUCCESS;
+}
+
+int
+expb_df (const gsl_vector * x, void *data,
+ gsl_matrix * J)
+{
+ size_t n = ((struct data *)data)->n;
+ double *sigma = ((struct data *) data)->sigma;
+
+ double A = gsl_vector_get (x, 0);
+ double lambda = gsl_vector_get (x, 1);
+
+ size_t i;
+
+ for (i = 0; i < n; i++)
+ {
+ /* Jacobian matrix J(i,j) = dfi / dxj, */
+ /* where fi = (Yi - yi)/sigma[i], */
+ /* Yi = A * exp(-lambda * i) + b */
+ /* and the xj are the parameters (A,lambda,b) */
+ double t = i;
+ double s = sigma[i];
+ double e = exp(-lambda * t);
+ gsl_matrix_set (J, i, 0, e/s);
+ gsl_matrix_set (J, i, 1, -t * A * e/s);
+ gsl_matrix_set (J, i, 2, 1/s);
+ }
+ return GSL_SUCCESS;
+}
+
+int
+expb_fdf (const gsl_vector * x, void *data,
+ gsl_vector * f, gsl_matrix * J)
+{
+ expb_f (x, data, f);
+ expb_df (x, data, J);
+
+ return GSL_SUCCESS;
+}
diff --git a/gsl-1.9/doc/examples/fft.c b/gsl-1.9/doc/examples/fft.c
new file mode 100644
index 0000000..aa00242
--- /dev/null
+++ b/gsl-1.9/doc/examples/fft.c
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_fft_complex.h>
+
+#define REAL(z,i) ((z)[2*(i)])
+#define IMAG(z,i) ((z)[2*(i)+1])
+
+int
+main (void)
+{
+ int i; double data[2*128];
+
+ for (i = 0; i < 128; i++)
+ {
+ REAL(data,i) = 0.0; IMAG(data,i) = 0.0;
+ }
+
+ REAL(data,0) = 1.0;
+
+ for (i = 1; i <= 10; i++)
+ {
+ REAL(data,i) = REAL(data,128-i) = 1.0;
+ }
+
+ for (i = 0; i < 128; i++)
+ {
+ printf ("%d %e %e\n", i,
+ REAL(data,i), IMAG(data,i));
+ }
+ printf ("\n");
+
+ gsl_fft_complex_radix2_forward (data, 1, 128);
+
+ for (i = 0; i < 128; i++)
+ {
+ printf ("%d %e %e\n", i,
+ REAL(data,i)/sqrt(128),
+ IMAG(data,i)/sqrt(128));
+ }
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/fftmr.c b/gsl-1.9/doc/examples/fftmr.c
new file mode 100644
index 0000000..0a43e0a
--- /dev/null
+++ b/gsl-1.9/doc/examples/fftmr.c
@@ -0,0 +1,60 @@
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_fft_complex.h>
+
+#define REAL(z,i) ((z)[2*(i)])
+#define IMAG(z,i) ((z)[2*(i)+1])
+
+int
+main (void)
+{
+ int i;
+ const int n = 630;
+ double data[2*n];
+
+ gsl_fft_complex_wavetable * wavetable;
+ gsl_fft_complex_workspace * workspace;
+
+ for (i = 0; i < n; i++)
+ {
+ REAL(data,i) = 0.0;
+ IMAG(data,i) = 0.0;
+ }
+
+ data[0] = 1.0;
+
+ for (i = 1; i <= 10; i++)
+ {
+ REAL(data,i) = REAL(data,n-i) = 1.0;
+ }
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e %e\n", i, REAL(data,i),
+ IMAG(data,i));
+ }
+ printf ("\n");
+
+ wavetable = gsl_fft_complex_wavetable_alloc (n);
+ workspace = gsl_fft_complex_workspace_alloc (n);
+
+ for (i = 0; i < wavetable->nf; i++)
+ {
+ printf ("# factor %d: %d\n", i,
+ wavetable->factor[i]);
+ }
+
+ gsl_fft_complex_forward (data, 1, n,
+ wavetable, workspace);
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e %e\n", i, REAL(data,i),
+ IMAG(data,i));
+ }
+
+ gsl_fft_complex_wavetable_free (wavetable);
+ gsl_fft_complex_workspace_free (workspace);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/fftreal.c b/gsl-1.9/doc/examples/fftreal.c
new file mode 100644
index 0000000..ec34458
--- /dev/null
+++ b/gsl-1.9/doc/examples/fftreal.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_fft_real.h>
+#include <gsl/gsl_fft_halfcomplex.h>
+
+int
+main (void)
+{
+ int i, n = 100;
+ double data[n];
+
+ gsl_fft_real_wavetable * real;
+ gsl_fft_halfcomplex_wavetable * hc;
+ gsl_fft_real_workspace * work;
+
+ for (i = 0; i < n; i++)
+ {
+ data[i] = 0.0;
+ }
+
+ for (i = n / 3; i < 2 * n / 3; i++)
+ {
+ data[i] = 1.0;
+ }
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e\n", i, data[i]);
+ }
+ printf ("\n");
+
+ work = gsl_fft_real_workspace_alloc (n);
+ real = gsl_fft_real_wavetable_alloc (n);
+
+ gsl_fft_real_transform (data, 1, n,
+ real, work);
+
+ gsl_fft_real_wavetable_free (real);
+
+ for (i = 11; i < n; i++)
+ {
+ data[i] = 0;
+ }
+
+ hc = gsl_fft_halfcomplex_wavetable_alloc (n);
+
+ gsl_fft_halfcomplex_inverse (data, 1, n,
+ hc, work);
+ gsl_fft_halfcomplex_wavetable_free (hc);
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e\n", i, data[i]);
+ }
+
+ gsl_fft_real_workspace_free (work);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/fitting.c b/gsl-1.9/doc/examples/fitting.c
new file mode 100644
index 0000000..5c36969
--- /dev/null
+++ b/gsl-1.9/doc/examples/fitting.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include <gsl/gsl_fit.h>
+
+int
+main (void)
+{
+ int i, n = 4;
+ double x[4] = { 1970, 1980, 1990, 2000 };
+ double y[4] = { 12, 11, 14, 13 };
+ double w[4] = { 0.1, 0.2, 0.3, 0.4 };
+
+ double c0, c1, cov00, cov01, cov11, chisq;
+
+ gsl_fit_wlinear (x, 1, w, 1, y, 1, n,
+ &c0, &c1, &cov00, &cov01, &cov11,
+ &chisq);
+
+ printf ("# best fit: Y = %g + %g X\n", c0, c1);
+ printf ("# covariance matrix:\n");
+ printf ("# [ %g, %g\n# %g, %g]\n",
+ cov00, cov01, cov01, cov11);
+ printf ("# chisq = %g\n", chisq);
+
+ for (i = 0; i < n; i++)
+ printf ("data: %g %g %g\n",
+ x[i], y[i], 1/sqrt(w[i]));
+
+ printf ("\n");
+
+ for (i = -30; i < 130; i++)
+ {
+ double xf = x[0] + (i/100.0) * (x[n-1] - x[0]);
+ double yf, yf_err;
+
+ gsl_fit_linear_est (xf,
+ c0, c1,
+ cov00, cov01, cov11,
+ &yf, &yf_err);
+
+ printf ("fit: %g %g\n", xf, yf);
+ printf ("hi : %g %g\n", xf, yf + yf_err);
+ printf ("lo : %g %g\n", xf, yf - yf_err);
+ }
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/fitting2.c b/gsl-1.9/doc/examples/fitting2.c
new file mode 100644
index 0000000..43f8c06
--- /dev/null
+++ b/gsl-1.9/doc/examples/fitting2.c
@@ -0,0 +1,80 @@
+#include <stdio.h>
+#include <gsl/gsl_multifit.h>
+
+int
+main (int argc, char **argv)
+{
+ int i, n;
+ double xi, yi, ei, chisq;
+ gsl_matrix *X, *cov;
+ gsl_vector *y, *w, *c;
+
+ if (argc != 2)
+ {
+ fprintf (stderr,"usage: fit n < data\n");
+ exit (-1);
+ }
+
+ n = atoi (argv[1]);
+
+ X = gsl_matrix_alloc (n, 3);
+ y = gsl_vector_alloc (n);
+ w = gsl_vector_alloc (n);
+
+ c = gsl_vector_alloc (3);
+ cov = gsl_matrix_alloc (3, 3);
+
+ for (i = 0; i < n; i++)
+ {
+ int count = fscanf (stdin, "%lg %lg %lg",
+ &xi, &yi, &ei);
+
+ if (count != 3)
+ {
+ fprintf (stderr, "error reading file\n");
+ exit (-1);
+ }
+
+ printf ("%g %g +/- %g\n", xi, yi, ei);
+
+ gsl_matrix_set (X, i, 0, 1.0);
+ gsl_matrix_set (X, i, 1, xi);
+ gsl_matrix_set (X, i, 2, xi*xi);
+
+ gsl_vector_set (y, i, yi);
+ gsl_vector_set (w, i, 1.0/(ei*ei));
+ }
+
+ {
+ gsl_multifit_linear_workspace * work
+ = gsl_multifit_linear_alloc (n, 3);
+ gsl_multifit_wlinear (X, w, y, c, cov,
+ &chisq, work);
+ gsl_multifit_linear_free (work);
+ }
+
+#define C(i) (gsl_vector_get(c,(i)))
+#define COV(i,j) (gsl_matrix_get(cov,(i),(j)))
+
+ {
+ printf ("# best fit: Y = %g + %g X + %g X^2\n",
+ C(0), C(1), C(2));
+
+ printf ("# covariance matrix:\n");
+ printf ("[ %+.5e, %+.5e, %+.5e \n",
+ COV(0,0), COV(0,1), COV(0,2));
+ printf (" %+.5e, %+.5e, %+.5e \n",
+ COV(1,0), COV(1,1), COV(1,2));
+ printf (" %+.5e, %+.5e, %+.5e ]\n",
+ COV(2,0), COV(2,1), COV(2,2));
+ printf ("# chisq = %g\n", chisq);
+ }
+
+ gsl_matrix_free (X);
+ gsl_vector_free (y);
+ gsl_vector_free (w);
+ gsl_vector_free (c);
+ gsl_matrix_free (cov);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/fitting3.c b/gsl-1.9/doc/examples/fitting3.c
new file mode 100644
index 0000000..a3f1e32
--- /dev/null
+++ b/gsl-1.9/doc/examples/fitting3.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_randist.h>
+
+int
+main (void)
+{
+ double x;
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (x = 0.1; x < 2; x+= 0.1)
+ {
+ double y0 = exp (x);
+ double sigma = 0.1 * y0;
+ double dy = gsl_ran_gaussian (r, sigma);
+
+ printf ("%g %g %g\n", x, y0 + dy, sigma);
+ }
+
+ gsl_rng_free(r);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/histogram.c b/gsl-1.9/doc/examples/histogram.c
new file mode 100644
index 0000000..a3c5150
--- /dev/null
+++ b/gsl-1.9/doc/examples/histogram.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <gsl/gsl_histogram.h>
+
+int
+main (int argc, char **argv)
+{
+ double a, b;
+ size_t n;
+
+ if (argc != 4)
+ {
+ printf ("Usage: gsl-histogram xmin xmax n\n"
+ "Computes a histogram of the data "
+ "on stdin using n bins from xmin "
+ "to xmax\n");
+ exit (0);
+ }
+
+ a = atof (argv[1]);
+ b = atof (argv[2]);
+ n = atoi (argv[3]);
+
+ {
+ double x;
+ gsl_histogram * h = gsl_histogram_alloc (n);
+ gsl_histogram_set_ranges_uniform (h, a, b);
+
+ while (fscanf (stdin, "%lg", &x) == 1)
+ {
+ gsl_histogram_increment (h, x);
+ }
+ gsl_histogram_fprintf (stdout, h, "%g", "%g");
+ gsl_histogram_free (h);
+ }
+ exit (0);
+}
diff --git a/gsl-1.9/doc/examples/histogram2d.c b/gsl-1.9/doc/examples/histogram2d.c
new file mode 100644
index 0000000..3fcabb4
--- /dev/null
+++ b/gsl-1.9/doc/examples/histogram2d.c
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_histogram2d.h>
+
+int
+main (void)
+{
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_histogram2d * h = gsl_histogram2d_alloc (10, 10);
+
+ gsl_histogram2d_set_ranges_uniform (h,
+ 0.0, 1.0,
+ 0.0, 1.0);
+
+ gsl_histogram2d_accumulate (h, 0.3, 0.3, 1);
+ gsl_histogram2d_accumulate (h, 0.8, 0.1, 5);
+ gsl_histogram2d_accumulate (h, 0.7, 0.9, 0.5);
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ {
+ int i;
+ gsl_histogram2d_pdf * p
+ = gsl_histogram2d_pdf_alloc (h->nx, h->ny);
+
+ gsl_histogram2d_pdf_init (p, h);
+
+ for (i = 0; i < 1000; i++) {
+ double x, y;
+ double u = gsl_rng_uniform (r);
+ double v = gsl_rng_uniform (r);
+
+ gsl_histogram2d_pdf_sample (p, u, v, &x, &y);
+
+ printf ("%g %g\n", x, y);
+ }
+
+ gsl_histogram2d_pdf_free (p);
+ }
+
+ gsl_histogram2d_free (h);
+ gsl_rng_free (r);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/ieee.c b/gsl-1.9/doc/examples/ieee.c
new file mode 100644
index 0000000..c7f1110
--- /dev/null
+++ b/gsl-1.9/doc/examples/ieee.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <gsl/gsl_ieee_utils.h>
+
+int
+main (void)
+{
+ float f = 1.0/3.0;
+ double d = 1.0/3.0;
+
+ double fd = f; /* promote from float to double */
+
+ printf (" f="); gsl_ieee_printf_float(&f);
+ printf ("\n");
+
+ printf ("fd="); gsl_ieee_printf_double(&fd);
+ printf ("\n");
+
+ printf (" d="); gsl_ieee_printf_double(&d);
+ printf ("\n");
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/ieeeround.c b/gsl-1.9/doc/examples/ieeeround.c
new file mode 100644
index 0000000..04f837d
--- /dev/null
+++ b/gsl-1.9/doc/examples/ieeeround.c
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_ieee_utils.h>
+
+int
+main (void)
+{
+ double x = 1, oldsum = 0, sum = 0;
+ int i = 0;
+
+ gsl_ieee_env_setup (); /* read GSL_IEEE_MODE */
+
+ do
+ {
+ i++;
+
+ oldsum = sum;
+ sum += x;
+ x = x / i;
+
+ printf ("i=%2d sum=%.18f error=%g\n",
+ i, sum, sum - M_E);
+
+ if (i > 30)
+ break;
+ }
+ while (sum != oldsum);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/integration.c b/gsl-1.9/doc/examples/integration.c
new file mode 100644
index 0000000..a8f2450
--- /dev/null
+++ b/gsl-1.9/doc/examples/integration.c
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_integration.h>
+
+double f (double x, void * params) {
+ double alpha = *(double *) params;
+ double f = log(alpha*x) / sqrt(x);
+ return f;
+}
+
+int
+main (void)
+{
+ gsl_integration_workspace * w
+ = gsl_integration_workspace_alloc (1000);
+
+ double result, error;
+ double expected = -4.0;
+ double alpha = 1.0;
+
+ gsl_function F;
+ F.function = &f;
+ F.params = &alpha;
+
+ gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000,
+ w, &result, &error);
+
+ printf ("result = % .18f\n", result);
+ printf ("exact result = % .18f\n", expected);
+ printf ("estimated error = % .18f\n", error);
+ printf ("actual error = % .18f\n", result - expected);
+ printf ("intervals = %d\n", w->size);
+
+ gsl_integration_workspace_free (w);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/integration.out b/gsl-1.9/doc/examples/integration.out
new file mode 100644
index 0000000..4758ebf
--- /dev/null
+++ b/gsl-1.9/doc/examples/integration.out
@@ -0,0 +1,5 @@
+result = -3.999999999999973799
+exact result = -4.000000000000000000
+estimated error = 0.000000000000246025
+actual error = 0.000000000000026201
+intervals = 8
diff --git a/gsl-1.9/doc/examples/interp.c b/gsl-1.9/doc/examples/interp.c
new file mode 100644
index 0000000..5c6e8fc
--- /dev/null
+++ b/gsl-1.9/doc/examples/interp.c
@@ -0,0 +1,41 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_spline.h>
+
+int
+main (void)
+{
+ int i;
+ double xi, yi, x[10], y[10];
+
+ printf ("#m=0,S=2\n");
+
+ for (i = 0; i < 10; i++)
+ {
+ x[i] = i + 0.5 * sin (i);
+ y[i] = i + cos (i * i);
+ printf ("%g %g\n", x[i], y[i]);
+ }
+
+ printf ("#m=1,S=0\n");
+
+ {
+ gsl_interp_accel *acc
+ = gsl_interp_accel_alloc ();
+ gsl_spline *spline
+ = gsl_spline_alloc (gsl_interp_cspline, 10);
+
+ gsl_spline_init (spline, x, y, 10);
+
+ for (xi = x[0]; xi < x[9]; xi += 0.01)
+ {
+ yi = gsl_spline_eval (spline, xi, acc);
+ printf ("%g %g\n", xi, yi);
+ }
+ gsl_spline_free (spline);
+ gsl_interp_accel_free (acc);
+ }
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/interpp.c b/gsl-1.9/doc/examples/interpp.c
new file mode 100644
index 0000000..8ffdbcc
--- /dev/null
+++ b/gsl-1.9/doc/examples/interpp.c
@@ -0,0 +1,40 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_spline.h>
+
+int
+main (void)
+{
+ int N = 4;
+ double x[4] = {0.00, 0.10, 0.27, 0.30};
+ double y[4] = {0.15, 0.70, -0.10, 0.15}; /* Note: first = last
+ for periodic data */
+
+ gsl_interp_accel *acc = gsl_interp_accel_alloc ();
+ const gsl_interp_type *t = gsl_interp_cspline_periodic;
+ gsl_spline *spline = gsl_spline_alloc (t, N);
+
+ int i; double xi, yi;
+
+ printf ("#m=0,S=5\n");
+ for (i = 0; i < N; i++)
+ {
+ printf ("%g %g\n", x[i], y[i]);
+ }
+
+ printf ("#m=1,S=0\n");
+ gsl_spline_init (spline, x, y, N);
+
+ for (i = 0; i <= 100; i++)
+ {
+ xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1];
+ yi = gsl_spline_eval (spline, xi, acc);
+ printf ("%g %g\n", xi, yi);
+ }
+
+ gsl_spline_free (spline);
+ gsl_interp_accel_free (acc);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/intro.c b/gsl-1.9/doc/examples/intro.c
new file mode 100644
index 0000000..bd28482
--- /dev/null
+++ b/gsl-1.9/doc/examples/intro.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+#include <gsl/gsl_sf_bessel.h>
+
+int
+main (void)
+{
+ double x = 5.0;
+ double y = gsl_sf_bessel_J0 (x);
+ printf ("J0(%g) = %.18e\n", x, y);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/intro.out b/gsl-1.9/doc/examples/intro.out
new file mode 100644
index 0000000..ca264dd
--- /dev/null
+++ b/gsl-1.9/doc/examples/intro.out
@@ -0,0 +1 @@
+J0(5) = -1.775967713143382920e-01
diff --git a/gsl-1.9/doc/examples/linalglu.c b/gsl-1.9/doc/examples/linalglu.c
new file mode 100644
index 0000000..61b5293
--- /dev/null
+++ b/gsl-1.9/doc/examples/linalglu.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <gsl/gsl_linalg.h>
+
+int
+main (void)
+{
+ double a_data[] = { 0.18, 0.60, 0.57, 0.96,
+ 0.41, 0.24, 0.99, 0.58,
+ 0.14, 0.30, 0.97, 0.66,
+ 0.51, 0.13, 0.19, 0.85 };
+
+ double b_data[] = { 1.0, 2.0, 3.0, 4.0 };
+
+ gsl_matrix_view m
+ = gsl_matrix_view_array (a_data, 4, 4);
+
+ gsl_vector_view b
+ = gsl_vector_view_array (b_data, 4);
+
+ gsl_vector *x = gsl_vector_alloc (4);
+
+ int s;
+
+ gsl_permutation * p = gsl_permutation_alloc (4);
+
+ gsl_linalg_LU_decomp (&m.matrix, p, &s);
+
+ gsl_linalg_LU_solve (&m.matrix, p, &b.vector, x);
+
+ printf ("x = \n");
+ gsl_vector_fprintf (stdout, x, "%g");
+
+ gsl_permutation_free (p);
+ gsl_vector_free (x);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/linalglu.out b/gsl-1.9/doc/examples/linalglu.out
new file mode 100644
index 0000000..406f59a
--- /dev/null
+++ b/gsl-1.9/doc/examples/linalglu.out
@@ -0,0 +1,4 @@
+x = -4.05205
+-12.6056
+1.66091
+8.69377
diff --git a/gsl-1.9/doc/examples/matrix.c b/gsl-1.9/doc/examples/matrix.c
new file mode 100644
index 0000000..7704687
--- /dev/null
+++ b/gsl-1.9/doc/examples/matrix.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <gsl/gsl_matrix.h>
+
+int
+main (void)
+{
+ int i, j;
+ gsl_matrix * m = gsl_matrix_alloc (10, 3);
+
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 3; j++)
+ gsl_matrix_set (m, i, j, 0.23 + 100*i + j);
+
+ for (i = 0; i < 100; i++) /* OUT OF RANGE ERROR */
+ for (j = 0; j < 3; j++)
+ printf ("m(%d,%d) = %g\n", i, j,
+ gsl_matrix_get (m, i, j));
+
+ gsl_matrix_free (m);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/matrixw.c b/gsl-1.9/doc/examples/matrixw.c
new file mode 100644
index 0000000..b05ffbd
--- /dev/null
+++ b/gsl-1.9/doc/examples/matrixw.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <gsl/gsl_matrix.h>
+
+int
+main (void)
+{
+ int i, j, k = 0;
+ gsl_matrix * m = gsl_matrix_alloc (100, 100);
+ gsl_matrix * a = gsl_matrix_alloc (100, 100);
+
+ for (i = 0; i < 100; i++)
+ for (j = 0; j < 100; j++)
+ gsl_matrix_set (m, i, j, 0.23 + i + j);
+
+ {
+ FILE * f = fopen ("test.dat", "wb");
+ gsl_matrix_fwrite (f, m);
+ fclose (f);
+ }
+
+ {
+ FILE * f = fopen ("test.dat", "rb");
+ gsl_matrix_fread (f, a);
+ fclose (f);
+ }
+
+ for (i = 0; i < 100; i++)
+ for (j = 0; j < 100; j++)
+ {
+ double mij = gsl_matrix_get (m, i, j);
+ double aij = gsl_matrix_get (a, i, j);
+ if (mij != aij) k++;
+ }
+
+ gsl_matrix_free (m);
+ gsl_matrix_free (a);
+
+ printf ("differences = %d (should be zero)\n", k);
+ return (k > 0);
+}
diff --git a/gsl-1.9/doc/examples/min.c b/gsl-1.9/doc/examples/min.c
new file mode 100644
index 0000000..ebba625
--- /dev/null
+++ b/gsl-1.9/doc/examples/min.c
@@ -0,0 +1,65 @@
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_min.h>
+
+double fn1 (double x, void * params)
+{
+ return cos(x) + 1.0;
+}
+
+int
+main (void)
+{
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_min_fminimizer_type *T;
+ gsl_min_fminimizer *s;
+ double m = 2.0, m_expected = M_PI;
+ double a = 0.0, b = 6.0;
+ gsl_function F;
+
+ F.function = &fn1;
+ F.params = 0;
+
+ T = gsl_min_fminimizer_brent;
+ s = gsl_min_fminimizer_alloc (T);
+ gsl_min_fminimizer_set (s, &F, m, a, b);
+
+ printf ("using %s method\n",
+ gsl_min_fminimizer_name (s));
+
+ printf ("%5s [%9s, %9s] %9s %10s %9s\n",
+ "iter", "lower", "upper", "min",
+ "err", "err(est)");
+
+ printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
+ iter, a, b,
+ m, m - m_expected, b - a);
+
+ do
+ {
+ iter++;
+ status = gsl_min_fminimizer_iterate (s);
+
+ m = gsl_min_fminimizer_x_minimum (s);
+ a = gsl_min_fminimizer_x_lower (s);
+ b = gsl_min_fminimizer_x_upper (s);
+
+ status
+ = gsl_min_test_interval (a, b, 0.001, 0.0);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d [%.7f, %.7f] "
+ "%.7f %.7f %+.7f %.7f\n",
+ iter, a, b,
+ m, m_expected, m - m_expected, b - a);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_min_fminimizer_free (s);
+
+ return status;
+}
diff --git a/gsl-1.9/doc/examples/min.out b/gsl-1.9/doc/examples/min.out
new file mode 100644
index 0000000..93d02fc
--- /dev/null
+++ b/gsl-1.9/doc/examples/min.out
@@ -0,0 +1,13 @@
+ 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000
+ 1 [2.0000000, 6.0000000] 3.2758640 +0.1342713 4.0000000
+ 2 [2.0000000, 3.2831929] 3.2758640 +0.1342713 1.2831929
+ 3 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862
+ 4 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862
+ 5 [2.8689068, 3.2758640] 3.1460585 +0.0044658 0.4069572
+ 6 [3.1346075, 3.2758640] 3.1460585 +0.0044658 0.1412565
+ 7 [3.1346075, 3.1874620] 3.1460585 +0.0044658 0.0528545
+ 8 [3.1346075, 3.1460585] 3.1460585 +0.0044658 0.0114510
+ 9 [3.1346075, 3.1460585] 3.1424060 +0.0008133 0.0114510
+ 10 [3.1346075, 3.1424060] 3.1415885 -0.0000041 0.0077985
+Converged:
+ 11 [3.1415885, 3.1424060] 3.1415927 -0.0000000 0.0008175
diff --git a/gsl-1.9/doc/examples/monte.c b/gsl-1.9/doc/examples/monte.c
new file mode 100644
index 0000000..2c23747
--- /dev/null
+++ b/gsl-1.9/doc/examples/monte.c
@@ -0,0 +1,106 @@
+#include <stdlib.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_monte.h>
+#include <gsl/gsl_monte_plain.h>
+#include <gsl/gsl_monte_miser.h>
+#include <gsl/gsl_monte_vegas.h>
+
+/* Computation of the integral,
+
+ I = int (dx dy dz)/(2pi)^3 1/(1-cos(x)cos(y)cos(z))
+
+ over (-pi,-pi,-pi) to (+pi, +pi, +pi). The exact answer
+ is Gamma(1/4)^4/(4 pi^3). This example is taken from
+ C.Itzykson, J.M.Drouffe, "Statistical Field Theory -
+ Volume 1", Section 1.1, p21, which cites the original
+ paper M.L.Glasser, I.J.Zucker, Proc.Natl.Acad.Sci.USA 74
+ 1800 (1977) */
+
+/* For simplicity we compute the integral over the region
+ (0,0,0) -> (pi,pi,pi) and multiply by 8 */
+
+double exact = 1.3932039296856768591842462603255;
+
+double
+g (double *k, size_t dim, void *params)
+{
+ double A = 1.0 / (M_PI * M_PI * M_PI);
+ return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2]));
+}
+
+void
+display_results (char *title, double result, double error)
+{
+ printf ("%s ==================\n", title);
+ printf ("result = % .6f\n", result);
+ printf ("sigma = % .6f\n", error);
+ printf ("exact = % .6f\n", exact);
+ printf ("error = % .6f = %.1g sigma\n", result - exact,
+ fabs (result - exact) / error);
+}
+
+int
+main (void)
+{
+ double res, err;
+
+ double xl[3] = { 0, 0, 0 };
+ double xu[3] = { M_PI, M_PI, M_PI };
+
+ const gsl_rng_type *T;
+ gsl_rng *r;
+
+ gsl_monte_function G = { &g, 3, 0 };
+
+ size_t calls = 500000;
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ {
+ gsl_monte_plain_state *s = gsl_monte_plain_alloc (3);
+ gsl_monte_plain_integrate (&G, xl, xu, 3, calls, r, s,
+ &res, &err);
+ gsl_monte_plain_free (s);
+
+ display_results ("plain", res, err);
+ }
+
+ {
+ gsl_monte_miser_state *s = gsl_monte_miser_alloc (3);
+ gsl_monte_miser_integrate (&G, xl, xu, 3, calls, r, s,
+ &res, &err);
+ gsl_monte_miser_free (s);
+
+ display_results ("miser", res, err);
+ }
+
+ {
+ gsl_monte_vegas_state *s = gsl_monte_vegas_alloc (3);
+
+ gsl_monte_vegas_integrate (&G, xl, xu, 3, 10000, r, s,
+ &res, &err);
+ display_results ("vegas warm-up", res, err);
+
+ printf ("converging...\n");
+
+ do
+ {
+ gsl_monte_vegas_integrate (&G, xl, xu, 3, calls/5, r, s,
+ &res, &err);
+ printf ("result = % .6f sigma = % .6f "
+ "chisq/dof = %.1f\n", res, err, s->chisq);
+ }
+ while (fabs (s->chisq - 1.0) > 0.5);
+
+ display_results ("vegas final", res, err);
+
+ gsl_monte_vegas_free (s);
+ }
+
+ gsl_rng_free (r);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/nlfit.c b/gsl-1.9/doc/examples/nlfit.c
new file mode 100644
index 0000000..49b4137
--- /dev/null
+++ b/gsl-1.9/doc/examples/nlfit.c
@@ -0,0 +1,115 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_randist.h>
+#include <gsl/gsl_vector.h>
+#include <gsl/gsl_blas.h>
+#include <gsl/gsl_multifit_nlin.h>
+
+#include "expfit.c"
+
+#define N 40
+
+void print_state (size_t iter, gsl_multifit_fdfsolver * s);
+
+int
+main (void)
+{
+ const gsl_multifit_fdfsolver_type *T;
+ gsl_multifit_fdfsolver *s;
+ int status;
+ unsigned int i, iter = 0;
+ const size_t n = N;
+ const size_t p = 3;
+
+ gsl_matrix *covar = gsl_matrix_alloc (p, p);
+ double y[N], sigma[N];
+ struct data d = { n, y, sigma};
+ gsl_multifit_function_fdf f;
+ double x_init[3] = { 1.0, 0.0, 0.0 };
+ gsl_vector_view x = gsl_vector_view_array (x_init, p);
+ const gsl_rng_type * type;
+ gsl_rng * r;
+
+ gsl_rng_env_setup();
+
+ type = gsl_rng_default;
+ r = gsl_rng_alloc (type);
+
+ f.f = &expb_f;
+ f.df = &expb_df;
+ f.fdf = &expb_fdf;
+ f.n = n;
+ f.p = p;
+ f.params = &d;
+
+ /* This is the data to be fitted */
+
+ for (i = 0; i < n; i++)
+ {
+ double t = i;
+ y[i] = 1.0 + 5 * exp (-0.1 * t)
+ + gsl_ran_gaussian (r, 0.1);
+ sigma[i] = 0.1;
+ printf ("data: %u %g %g\n", i, y[i], sigma[i]);
+ };
+
+ T = gsl_multifit_fdfsolver_lmsder;
+ s = gsl_multifit_fdfsolver_alloc (T, n, p);
+ gsl_multifit_fdfsolver_set (s, &f, &x.vector);
+
+ print_state (iter, s);
+
+ do
+ {
+ iter++;
+ status = gsl_multifit_fdfsolver_iterate (s);
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ print_state (iter, s);
+
+ if (status)
+ break;
+
+ status = gsl_multifit_test_delta (s->dx, s->x,
+ 1e-4, 1e-4);
+ }
+ while (status == GSL_CONTINUE && iter < 500);
+
+ gsl_multifit_covar (s->J, 0.0, covar);
+
+#define FIT(i) gsl_vector_get(s->x, i)
+#define ERR(i) sqrt(gsl_matrix_get(covar,i,i))
+
+ {
+ double chi = gsl_blas_dnrm2(s->f);
+ double dof = n - p;
+ double c = GSL_MAX_DBL(1, chi / sqrt(dof));
+
+ printf("chisq/dof = %g\n", pow(chi, 2.0) / dof);
+
+ printf ("A = %.5f +/- %.5f\n", FIT(0), c*ERR(0));
+ printf ("lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1));
+ printf ("b = %.5f +/- %.5f\n", FIT(2), c*ERR(2));
+ }
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ gsl_multifit_fdfsolver_free (s);
+ gsl_matrix_free (covar);
+ gsl_rng_free (r);
+ return 0;
+}
+
+void
+print_state (size_t iter, gsl_multifit_fdfsolver * s)
+{
+ printf ("iter: %3u x = % 15.8f % 15.8f % 15.8f "
+ "|f(x)| = %g\n",
+ iter,
+ gsl_vector_get (s->x, 0),
+ gsl_vector_get (s->x, 1),
+ gsl_vector_get (s->x, 2),
+ gsl_blas_dnrm2 (s->f));
+}
diff --git a/gsl-1.9/doc/examples/ntupler.c b/gsl-1.9/doc/examples/ntupler.c
new file mode 100644
index 0000000..a926522
--- /dev/null
+++ b/gsl-1.9/doc/examples/ntupler.c
@@ -0,0 +1,72 @@
+#include <math.h>
+#include <gsl/gsl_ntuple.h>
+#include <gsl/gsl_histogram.h>
+
+struct data
+{
+ double x;
+ double y;
+ double z;
+};
+
+int sel_func (void *ntuple_data, void *params);
+double val_func (void *ntuple_data, void *params);
+
+int
+main (void)
+{
+ struct data ntuple_row;
+
+ gsl_ntuple *ntuple
+ = gsl_ntuple_open ("test.dat", &ntuple_row,
+ sizeof (ntuple_row));
+ double lower = 1.5;
+
+ gsl_ntuple_select_fn S;
+ gsl_ntuple_value_fn V;
+
+ gsl_histogram *h = gsl_histogram_alloc (100);
+ gsl_histogram_set_ranges_uniform(h, 0.0, 10.0);
+
+ S.function = &sel_func;
+ S.params = &lower;
+
+ V.function = &val_func;
+ V.params = 0;
+
+ gsl_ntuple_project (h, ntuple, &V, &S);
+ gsl_histogram_fprintf (stdout, h, "%f", "%f");
+ gsl_histogram_free (h);
+ gsl_ntuple_close (ntuple);
+
+ return 0;
+}
+
+int
+sel_func (void *ntuple_data, void *params)
+{
+ struct data * data = (struct data *) ntuple_data;
+ double x, y, z, E2, scale;
+ scale = *(double *) params;
+
+ x = data->x;
+ y = data->y;
+ z = data->z;
+
+ E2 = x * x + y * y + z * z;
+
+ return E2 > scale;
+}
+
+double
+val_func (void *ntuple_data, void *params)
+{
+ struct data * data = (struct data *) ntuple_data;
+ double x, y, z;
+
+ x = data->x;
+ y = data->y;
+ z = data->z;
+
+ return x * x + y * y + z * z;
+}
diff --git a/gsl-1.9/doc/examples/ntuplew.c b/gsl-1.9/doc/examples/ntuplew.c
new file mode 100644
index 0000000..82f6fa4
--- /dev/null
+++ b/gsl-1.9/doc/examples/ntuplew.c
@@ -0,0 +1,43 @@
+#include <gsl/gsl_ntuple.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_randist.h>
+
+struct data
+{
+ double x;
+ double y;
+ double z;
+};
+
+int
+main (void)
+{
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ struct data ntuple_row;
+ int i;
+
+ gsl_ntuple *ntuple
+ = gsl_ntuple_create ("test.dat", &ntuple_row,
+ sizeof (ntuple_row));
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (i = 0; i < 10000; i++)
+ {
+ ntuple_row.x = gsl_ran_ugaussian (r);
+ ntuple_row.y = gsl_ran_ugaussian (r);
+ ntuple_row.z = gsl_ran_ugaussian (r);
+
+ gsl_ntuple_write (ntuple);
+ }
+
+ gsl_ntuple_close (ntuple);
+ gsl_rng_free (r);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/ode-initval.c b/gsl-1.9/doc/examples/ode-initval.c
new file mode 100644
index 0000000..8a8f794
--- /dev/null
+++ b/gsl-1.9/doc/examples/ode-initval.c
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_matrix.h>
+#include <gsl/gsl_odeiv.h>
+
+int
+func (double t, const double y[], double f[],
+ void *params)
+{
+ double mu = *(double *)params;
+ f[0] = y[1];
+ f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1);
+ return GSL_SUCCESS;
+}
+
+int
+jac (double t, const double y[], double *dfdy,
+ double dfdt[], void *params)
+{
+ double mu = *(double *)params;
+ gsl_matrix_view dfdy_mat
+ = gsl_matrix_view_array (dfdy, 2, 2);
+ gsl_matrix * m = &dfdy_mat.matrix;
+ gsl_matrix_set (m, 0, 0, 0.0);
+ gsl_matrix_set (m, 0, 1, 1.0);
+ gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0);
+ gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0));
+ dfdt[0] = 0.0;
+ dfdt[1] = 0.0;
+ return GSL_SUCCESS;
+}
+
+int
+main (void)
+{
+ const gsl_odeiv_step_type * T
+ = gsl_odeiv_step_rk8pd;
+
+ gsl_odeiv_step * s
+ = gsl_odeiv_step_alloc (T, 2);
+ gsl_odeiv_control * c
+ = gsl_odeiv_control_y_new (1e-6, 0.0);
+ gsl_odeiv_evolve * e
+ = gsl_odeiv_evolve_alloc (2);
+
+ double mu = 10;
+ gsl_odeiv_system sys = {func, jac, 2, &mu};
+
+ double t = 0.0, t1 = 100.0;
+ double h = 1e-6;
+ double y[2] = { 1.0, 0.0 };
+
+ while (t < t1)
+ {
+ int status = gsl_odeiv_evolve_apply (e, c, s,
+ &sys,
+ &t, t1,
+ &h, y);
+
+ if (status != GSL_SUCCESS)
+ break;
+
+ printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
+ }
+
+ gsl_odeiv_evolve_free (e);
+ gsl_odeiv_control_free (c);
+ gsl_odeiv_step_free (s);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/odefixed.c b/gsl-1.9/doc/examples/odefixed.c
new file mode 100644
index 0000000..3c81bf3
--- /dev/null
+++ b/gsl-1.9/doc/examples/odefixed.c
@@ -0,0 +1,42 @@
+int
+main (void)
+{
+ const gsl_odeiv_step_type * T
+ = gsl_odeiv_step_rk4;
+
+ gsl_odeiv_step * s
+ = gsl_odeiv_step_alloc (T, 2);
+
+ double mu = 10;
+ gsl_odeiv_system sys = {func, jac, 2, &mu};
+
+ double t = 0.0, t1 = 100.0;
+ double h = 1e-2;
+ double y[2] = { 1.0, 0.0 }, y_err[2];
+ double dydt_in[2], dydt_out[2];
+
+ /* initialise dydt_in from system parameters */
+ GSL_ODEIV_FN_EVAL(&sys, t, y, dydt_in);
+
+ while (t < t1)
+ {
+ int status = gsl_odeiv_step_apply (s, t, h,
+ y, y_err,
+ dydt_in,
+ dydt_out,
+ &sys);
+
+ if (status != GSL_SUCCESS)
+ break;
+
+ dydt_in[0] = dydt_out[0];
+ dydt_in[1] = dydt_out[1];
+
+ t += h;
+
+ printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
+ }
+
+ gsl_odeiv_step_free (s);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/permseq.c b/gsl-1.9/doc/examples/permseq.c
new file mode 100644
index 0000000..08ebf63
--- /dev/null
+++ b/gsl-1.9/doc/examples/permseq.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <gsl/gsl_permutation.h>
+
+int
+main (void)
+{
+ gsl_permutation * p = gsl_permutation_alloc (3);
+
+ gsl_permutation_init (p);
+
+ do
+ {
+ gsl_permutation_fprintf (stdout, p, " %u");
+ printf ("\n");
+ }
+ while (gsl_permutation_next(p) == GSL_SUCCESS);
+
+ gsl_permutation_free (p);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/permshuffle.c b/gsl-1.9/doc/examples/permshuffle.c
new file mode 100644
index 0000000..7247864
--- /dev/null
+++ b/gsl-1.9/doc/examples/permshuffle.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_randist.h>
+#include <gsl/gsl_permutation.h>
+
+int
+main (void)
+{
+ const size_t N = 10;
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_permutation * p = gsl_permutation_alloc (N);
+ gsl_permutation * q = gsl_permutation_alloc (N);
+
+ gsl_rng_env_setup();
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ printf ("initial permutation:");
+ gsl_permutation_init (p);
+ gsl_permutation_fprintf (stdout, p, " %u");
+ printf ("\n");
+
+ printf (" random permutation:");
+ gsl_ran_shuffle (r, p->data, N, sizeof(size_t));
+ gsl_permutation_fprintf (stdout, p, " %u");
+ printf ("\n");
+
+ printf ("inverse permutation:");
+ gsl_permutation_inverse (q, p);
+ gsl_permutation_fprintf (stdout, q, " %u");
+ printf ("\n");
+
+ gsl_permutation_free (p);
+ gsl_permutation_free (q);
+ gsl_rng_free (r);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/polyroots.c b/gsl-1.9/doc/examples/polyroots.c
new file mode 100644
index 0000000..6debbd5
--- /dev/null
+++ b/gsl-1.9/doc/examples/polyroots.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <gsl/gsl_poly.h>
+
+int
+main (void)
+{
+ int i;
+ /* coefficients of P(x) = -1 + x^5 */
+ double a[6] = { -1, 0, 0, 0, 0, 1 };
+ double z[10];
+
+ gsl_poly_complex_workspace * w
+ = gsl_poly_complex_workspace_alloc (6);
+
+ gsl_poly_complex_solve (a, 6, w, z);
+
+ gsl_poly_complex_workspace_free (w);
+
+ for (i = 0; i < 5; i++)
+ {
+ printf ("z%d = %+.18f %+.18f\n",
+ i, z[2*i], z[2*i+1]);
+ }
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/polyroots.out b/gsl-1.9/doc/examples/polyroots.out
new file mode 100644
index 0000000..253fe11
--- /dev/null
+++ b/gsl-1.9/doc/examples/polyroots.out
@@ -0,0 +1,5 @@
+z0 = -0.809016994374947451 +0.587785252292473137
+z1 = -0.809016994374947451 -0.587785252292473137
+z2 = +0.309016994374947451 +0.951056516295153642
+z3 = +0.309016994374947451 -0.951056516295153642
+z4 = +1.000000000000000000 +0.000000000000000000
diff --git a/gsl-1.9/doc/examples/qrng.c b/gsl-1.9/doc/examples/qrng.c
new file mode 100644
index 0000000..5275209
--- /dev/null
+++ b/gsl-1.9/doc/examples/qrng.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <gsl/gsl_qrng.h>
+
+int
+main (void)
+{
+ int i;
+ gsl_qrng * q = gsl_qrng_alloc (gsl_qrng_sobol, 2);
+
+ for (i = 0; i < 1024; i++)
+ {
+ double v[2];
+ gsl_qrng_get (q, v);
+ printf ("%.5f %.5f\n", v[0], v[1]);
+ }
+
+ gsl_qrng_free (q);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/randpoisson.2.out b/gsl-1.9/doc/examples/randpoisson.2.out
new file mode 100644
index 0000000..fbe36a2
--- /dev/null
+++ b/gsl-1.9/doc/examples/randpoisson.2.out
@@ -0,0 +1,2 @@
+GSL_RNG_SEED=123
+ 4 5 6 3 3 1 4 2 5 5
diff --git a/gsl-1.9/doc/examples/randpoisson.c b/gsl-1.9/doc/examples/randpoisson.c
new file mode 100644
index 0000000..ef69b72
--- /dev/null
+++ b/gsl-1.9/doc/examples/randpoisson.c
@@ -0,0 +1,35 @@
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_randist.h>
+
+int
+main (void)
+{
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ int i, n = 10;
+ double mu = 3.0;
+
+ /* create a generator chosen by the
+ environment variable GSL_RNG_TYPE */
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ /* print n random variates chosen from
+ the poisson distribution with mean
+ parameter mu */
+
+ for (i = 0; i < n; i++)
+ {
+ unsigned int k = gsl_ran_poisson (r, mu);
+ printf (" %u", k);
+ }
+
+ printf ("\n");
+ gsl_rng_free (r);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/randpoisson.out b/gsl-1.9/doc/examples/randpoisson.out
new file mode 100644
index 0000000..1639cca
--- /dev/null
+++ b/gsl-1.9/doc/examples/randpoisson.out
@@ -0,0 +1 @@
+ 2 5 5 2 1 0 3 4 1 1
diff --git a/gsl-1.9/doc/examples/randwalk.c b/gsl-1.9/doc/examples/randwalk.c
new file mode 100644
index 0000000..588aa50
--- /dev/null
+++ b/gsl-1.9/doc/examples/randwalk.c
@@ -0,0 +1,29 @@
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_randist.h>
+
+int
+main (void)
+{
+ int i;
+ double x = 0, y = 0, dx, dy;
+
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_rng_env_setup();
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ printf ("%g %g\n", x, y);
+
+ for (i = 0; i < 10; i++)
+ {
+ gsl_ran_dir_2d (r, &dx, &dy);
+ x += dx; y += dy;
+ printf ("%g %g\n", x, y);
+ }
+
+ gsl_rng_free (r);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/rng.c b/gsl-1.9/doc/examples/rng.c
new file mode 100644
index 0000000..6330264
--- /dev/null
+++ b/gsl-1.9/doc/examples/rng.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+
+gsl_rng * r; /* global generator */
+
+int
+main (void)
+{
+ const gsl_rng_type * T;
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ printf ("generator type: %s\n", gsl_rng_name (r));
+ printf ("seed = %lu\n", gsl_rng_default_seed);
+ printf ("first value = %lu\n", gsl_rng_get (r));
+
+ gsl_rng_free (r);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/rng.out b/gsl-1.9/doc/examples/rng.out
new file mode 100644
index 0000000..00f33a3
--- /dev/null
+++ b/gsl-1.9/doc/examples/rng.out
@@ -0,0 +1,3 @@
+generator type: mt19937
+seed = 0
+first value = 4293858116
diff --git a/gsl-1.9/doc/examples/rngunif.2.out b/gsl-1.9/doc/examples/rngunif.2.out
new file mode 100644
index 0000000..d04fccd
--- /dev/null
+++ b/gsl-1.9/doc/examples/rngunif.2.out
@@ -0,0 +1,12 @@
+GSL_RNG_TYPE=mrg
+GSL_RNG_SEED=123
+0.33050
+0.86631
+0.32982
+0.67620
+0.53391
+0.06457
+0.16847
+0.70229
+0.04371
+0.86374
diff --git a/gsl-1.9/doc/examples/rngunif.c b/gsl-1.9/doc/examples/rngunif.c
new file mode 100644
index 0000000..ca4b2db
--- /dev/null
+++ b/gsl-1.9/doc/examples/rngunif.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <gsl/gsl_rng.h>
+
+int
+main (void)
+{
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ int i, n = 10;
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (i = 0; i < n; i++)
+ {
+ double u = gsl_rng_uniform (r);
+ printf ("%.5f\n", u);
+ }
+
+ gsl_rng_free (r);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/rngunif.out b/gsl-1.9/doc/examples/rngunif.out
new file mode 100644
index 0000000..b4049ef
--- /dev/null
+++ b/gsl-1.9/doc/examples/rngunif.out
@@ -0,0 +1,10 @@
+0.99974
+0.16291
+0.28262
+0.94720
+0.23166
+0.48497
+0.95748
+0.74431
+0.54004
+0.73995
diff --git a/gsl-1.9/doc/examples/rootnewt.c b/gsl-1.9/doc/examples/rootnewt.c
new file mode 100644
index 0000000..fea5f11
--- /dev/null
+++ b/gsl-1.9/doc/examples/rootnewt.c
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_roots.h>
+
+#include "demo_fn.h"
+#include "demo_fn.c"
+
+int
+main (void)
+{
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_root_fdfsolver_type *T;
+ gsl_root_fdfsolver *s;
+ double x0, x = 5.0, r_expected = sqrt (5.0);
+ gsl_function_fdf FDF;
+ struct quadratic_params params = {1.0, 0.0, -5.0};
+
+ FDF.f = &quadratic;
+ FDF.df = &quadratic_deriv;
+ FDF.fdf = &quadratic_fdf;
+ FDF.params = &params;
+
+ T = gsl_root_fdfsolver_newton;
+ s = gsl_root_fdfsolver_alloc (T);
+ gsl_root_fdfsolver_set (s, &FDF, x);
+
+ printf ("using %s method\n",
+ gsl_root_fdfsolver_name (s));
+
+ printf ("%-5s %10s %10s %10s\n",
+ "iter", "root", "err", "err(est)");
+ do
+ {
+ iter++;
+ status = gsl_root_fdfsolver_iterate (s);
+ x0 = x;
+ x = gsl_root_fdfsolver_root (s);
+ status = gsl_root_test_delta (x, x0, 0, 1e-3);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d %10.7f %+10.7f %10.7f\n",
+ iter, x, x - r_expected, x - x0);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_root_fdfsolver_free (s);
+ return status;
+}
diff --git a/gsl-1.9/doc/examples/roots.c b/gsl-1.9/doc/examples/roots.c
new file mode 100644
index 0000000..7854fbc
--- /dev/null
+++ b/gsl-1.9/doc/examples/roots.c
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_roots.h>
+
+#include "demo_fn.h"
+#include "demo_fn.c"
+
+int
+main (void)
+{
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_root_fsolver_type *T;
+ gsl_root_fsolver *s;
+ double r = 0, r_expected = sqrt (5.0);
+ double x_lo = 0.0, x_hi = 5.0;
+ gsl_function F;
+ struct quadratic_params params = {1.0, 0.0, -5.0};
+
+ F.function = &quadratic;
+ F.params = &params;
+
+ T = gsl_root_fsolver_brent;
+ s = gsl_root_fsolver_alloc (T);
+ gsl_root_fsolver_set (s, &F, x_lo, x_hi);
+
+ printf ("using %s method\n",
+ gsl_root_fsolver_name (s));
+
+ printf ("%5s [%9s, %9s] %9s %10s %9s\n",
+ "iter", "lower", "upper", "root",
+ "err", "err(est)");
+
+ do
+ {
+ iter++;
+ status = gsl_root_fsolver_iterate (s);
+ r = gsl_root_fsolver_root (s);
+ x_lo = gsl_root_fsolver_x_lower (s);
+ x_hi = gsl_root_fsolver_x_upper (s);
+ status = gsl_root_test_interval (x_lo, x_hi,
+ 0, 0.001);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
+ iter, x_lo, x_hi,
+ r, r - r_expected,
+ x_hi - x_lo);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_root_fsolver_free (s);
+
+ return status;
+}
diff --git a/gsl-1.9/doc/examples/siman.c b/gsl-1.9/doc/examples/siman.c
new file mode 100644
index 0000000..50f08e0
--- /dev/null
+++ b/gsl-1.9/doc/examples/siman.c
@@ -0,0 +1,82 @@
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+#include <gsl/gsl_siman.h>
+
+/* set up parameters for this simulated annealing run */
+
+/* how many points do we try before stepping */
+#define N_TRIES 200
+
+/* how many iterations for each T? */
+#define ITERS_FIXED_T 1000
+
+/* max step size in random walk */
+#define STEP_SIZE 1.0
+
+/* Boltzmann constant */
+#define K 1.0
+
+/* initial temperature */
+#define T_INITIAL 0.008
+
+/* damping factor for temperature */
+#define MU_T 1.003
+#define T_MIN 2.0e-6
+
+gsl_siman_params_t params
+ = {N_TRIES, ITERS_FIXED_T, STEP_SIZE,
+ K, T_INITIAL, MU_T, T_MIN};
+
+/* now some functions to test in one dimension */
+double E1(void *xp)
+{
+ double x = * ((double *) xp);
+
+ return exp(-pow((x-1.0),2.0))*sin(8*x);
+}
+
+double M1(void *xp, void *yp)
+{
+ double x = *((double *) xp);
+ double y = *((double *) yp);
+
+ return fabs(x - y);
+}
+
+void S1(const gsl_rng * r, void *xp, double step_size)
+{
+ double old_x = *((double *) xp);
+ double new_x;
+
+ double u = gsl_rng_uniform(r);
+ new_x = u * 2 * step_size - step_size + old_x;
+
+ memcpy(xp, &new_x, sizeof(new_x));
+}
+
+void P1(void *xp)
+{
+ printf ("%12g", *((double *) xp));
+}
+
+int
+main(int argc, char *argv[])
+{
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ double x_initial = 15.5;
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc(T);
+
+ gsl_siman_solve(r, &x_initial, E1, S1, M1, P1,
+ NULL, NULL, NULL,
+ sizeof(double), params);
+
+ gsl_rng_free (r);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/sortsmall.c b/gsl-1.9/doc/examples/sortsmall.c
new file mode 100644
index 0000000..5b72517
--- /dev/null
+++ b/gsl-1.9/doc/examples/sortsmall.c
@@ -0,0 +1,38 @@
+#include <gsl/gsl_rng.h>
+#include <gsl/gsl_sort_double.h>
+
+int
+main (void)
+{
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ size_t i, k = 5, N = 100000;
+
+ double * x = malloc (N * sizeof(double));
+ double * small = malloc (k * sizeof(double));
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (i = 0; i < N; i++)
+ {
+ x[i] = gsl_rng_uniform(r);
+ }
+
+ gsl_sort_smallest (small, k, x, 1, N);
+
+ printf ("%d smallest values from %d\n", k, N);
+
+ for (i = 0; i < k; i++)
+ {
+ printf ("%d: %.18f\n", i, small[i]);
+ }
+
+ free (x);
+ free (small);
+ gsl_rng_free (r);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/sortsmall.out b/gsl-1.9/doc/examples/sortsmall.out
new file mode 100644
index 0000000..b8c7c93
--- /dev/null
+++ b/gsl-1.9/doc/examples/sortsmall.out
@@ -0,0 +1,6 @@
+5 smallest values from 100000
+0: 0.000003489200025797
+1: 0.000008199829608202
+2: 0.000008953968062997
+3: 0.000010712770745158
+4: 0.000033531803637743
diff --git a/gsl-1.9/doc/examples/specfun.c b/gsl-1.9/doc/examples/specfun.c
new file mode 100644
index 0000000..7c1a9b0
--- /dev/null
+++ b/gsl-1.9/doc/examples/specfun.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include <gsl/gsl_sf_bessel.h>
+
+int
+main (void)
+{
+ double x = 5.0;
+ double expected = -0.17759677131433830434739701;
+
+ double y = gsl_sf_bessel_J0 (x);
+
+ printf ("J0(5.0) = %.18f\n", y);
+ printf ("exact = %.18f\n", expected);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/specfun.out b/gsl-1.9/doc/examples/specfun.out
new file mode 100644
index 0000000..dbe2443
--- /dev/null
+++ b/gsl-1.9/doc/examples/specfun.out
@@ -0,0 +1,2 @@
+J0(5.0) = -0.177596771314338292
+exact = -0.177596771314338292
diff --git a/gsl-1.9/doc/examples/specfun_e.c b/gsl-1.9/doc/examples/specfun_e.c
new file mode 100644
index 0000000..4f41f2a
--- /dev/null
+++ b/gsl-1.9/doc/examples/specfun_e.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <gsl/gsl_errno.h>
+#include <gsl/gsl_sf_bessel.h>
+
+int
+main (void)
+{
+ double x = 5.0;
+ gsl_sf_result result;
+
+ double expected = -0.17759677131433830434739701;
+
+ int status = gsl_sf_bessel_J0_e (x, &result);
+
+ printf ("status = %s\n", gsl_strerror(status));
+ printf ("J0(5.0) = %.18f\n"
+ " +/- % .18f\n",
+ result.val, result.err);
+ printf ("exact = %.18f\n", expected);
+ return status;
+}
diff --git a/gsl-1.9/doc/examples/specfun_e.out b/gsl-1.9/doc/examples/specfun_e.out
new file mode 100644
index 0000000..61e1314
--- /dev/null
+++ b/gsl-1.9/doc/examples/specfun_e.out
@@ -0,0 +1,4 @@
+status = success
+J0(5.0) = -0.177596771314338292
+ +/- 0.000000000000000193
+exact = -0.177596771314338292
diff --git a/gsl-1.9/doc/examples/stat.c b/gsl-1.9/doc/examples/stat.c
new file mode 100644
index 0000000..253f704
--- /dev/null
+++ b/gsl-1.9/doc/examples/stat.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <gsl/gsl_statistics.h>
+
+int
+main(void)
+{
+ double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6};
+ double mean, variance, largest, smallest;
+
+ mean = gsl_stats_mean(data, 1, 5);
+ variance = gsl_stats_variance(data, 1, 5);
+ largest = gsl_stats_max(data, 1, 5);
+ smallest = gsl_stats_min(data, 1, 5);
+
+ printf ("The dataset is %g, %g, %g, %g, %g\n",
+ data[0], data[1], data[2], data[3], data[4]);
+
+ printf ("The sample mean is %g\n", mean);
+ printf ("The estimated variance is %g\n", variance);
+ printf ("The largest value is %g\n", largest);
+ printf ("The smallest value is %g\n", smallest);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/stat.out b/gsl-1.9/doc/examples/stat.out
new file mode 100644
index 0000000..232081d
--- /dev/null
+++ b/gsl-1.9/doc/examples/stat.out
@@ -0,0 +1,5 @@
+The dataset is 17.2, 18.1, 16.5, 18.3, 12.6
+The sample mean is 16.54
+The estimated variance is 4.2984
+The largest value is 18.3
+The smallest value is 12.6
diff --git a/gsl-1.9/doc/examples/statsort.c b/gsl-1.9/doc/examples/statsort.c
new file mode 100644
index 0000000..2780f67
--- /dev/null
+++ b/gsl-1.9/doc/examples/statsort.c
@@ -0,0 +1,36 @@
+#include <stdio.h>
+#include <gsl/gsl_sort.h>
+#include <gsl/gsl_statistics.h>
+
+int
+main(void)
+{
+ double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6};
+ double median, upperq, lowerq;
+
+ printf ("Original dataset: %g, %g, %g, %g, %g\n",
+ data[0], data[1], data[2], data[3], data[4]);
+
+ gsl_sort (data, 1, 5);
+
+ printf ("Sorted dataset: %g, %g, %g, %g, %g\n",
+ data[0], data[1], data[2], data[3], data[4]);
+
+ median
+ = gsl_stats_median_from_sorted_data (data,
+ 1, 5);
+
+ upperq
+ = gsl_stats_quantile_from_sorted_data (data,
+ 1, 5,
+ 0.75);
+ lowerq
+ = gsl_stats_quantile_from_sorted_data (data,
+ 1, 5,
+ 0.25);
+
+ printf ("The median is %g\n", median);
+ printf ("The upper quartile is %g\n", upperq);
+ printf ("The lower quartile is %g\n", lowerq);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/statsort.out b/gsl-1.9/doc/examples/statsort.out
new file mode 100644
index 0000000..628522c
--- /dev/null
+++ b/gsl-1.9/doc/examples/statsort.out
@@ -0,0 +1,5 @@
+Original dataset: 17.2, 18.1, 16.5, 18.3, 12.6
+Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3
+The median is 17.2
+The upper quartile is 18.1
+The lower quartile is 16.5
diff --git a/gsl-1.9/doc/examples/sum.c b/gsl-1.9/doc/examples/sum.c
new file mode 100644
index 0000000..c0237ea
--- /dev/null
+++ b/gsl-1.9/doc/examples/sum.c
@@ -0,0 +1,47 @@
+#include <stdio.h>
+#include <gsl/gsl_math.h>
+#include <gsl/gsl_sum.h>
+
+#define N 20
+
+int
+main (void)
+{
+ double t[N];
+ double sum_accel, err;
+ double sum = 0;
+ int n;
+
+ gsl_sum_levin_u_workspace * w
+ = gsl_sum_levin_u_alloc (N);
+
+ const double zeta_2 = M_PI * M_PI / 6.0;
+
+ /* terms for zeta(2) = \sum_{n=1}^{\infty} 1/n^2 */
+
+ for (n = 0; n < N; n++)
+ {
+ double np1 = n + 1.0;
+ t[n] = 1.0 / (np1 * np1);
+ sum += t[n];
+ }
+
+ gsl_sum_levin_u_accel (t, N, w, &sum_accel, &err);
+
+ printf ("term-by-term sum = % .16f using %d terms\n",
+ sum, N);
+
+ printf ("term-by-term sum = % .16f using %d terms\n",
+ w->sum_plain, w->terms_used);
+
+ printf ("exact value = % .16f\n", zeta_2);
+ printf ("accelerated sum = % .16f using %d terms\n",
+ sum_accel, w->terms_used);
+
+ printf ("estimated error = % .16f\n", err);
+ printf ("actual error = % .16f\n",
+ sum_accel - zeta_2);
+
+ gsl_sum_levin_u_free (w);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/sum.out b/gsl-1.9/doc/examples/sum.out
new file mode 100644
index 0000000..28089e9
--- /dev/null
+++ b/gsl-1.9/doc/examples/sum.out
@@ -0,0 +1,6 @@
+term-by-term sum = 1.5961632439130233 using 20 terms
+term-by-term sum = 1.5759958390005426 using 13 terms
+exact value = 1.6449340668482264
+accelerated sum = 1.6449340668166479 using 13 terms
+estimated error = 0.0000000000508580
+actual error = -0.0000000000315785
diff --git a/gsl-1.9/doc/examples/vector.c b/gsl-1.9/doc/examples/vector.c
new file mode 100644
index 0000000..27462b0
--- /dev/null
+++ b/gsl-1.9/doc/examples/vector.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <gsl/gsl_vector.h>
+
+int
+main (void)
+{
+ int i;
+ gsl_vector * v = gsl_vector_alloc (3);
+
+ for (i = 0; i < 3; i++)
+ {
+ gsl_vector_set (v, i, 1.23 + i);
+ }
+
+ for (i = 0; i < 100; i++) /* OUT OF RANGE ERROR */
+ {
+ printf ("v_%d = %g\n", i, gsl_vector_get (v, i));
+ }
+
+ gsl_vector_free (v);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/vectorr.c b/gsl-1.9/doc/examples/vectorr.c
new file mode 100644
index 0000000..203986b
--- /dev/null
+++ b/gsl-1.9/doc/examples/vectorr.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <gsl/gsl_vector.h>
+
+int
+main (void)
+{
+ int i;
+ gsl_vector * v = gsl_vector_alloc (10);
+
+ {
+ FILE * f = fopen ("test.dat", "r");
+ gsl_vector_fscanf (f, v);
+ fclose (f);
+ }
+
+ for (i = 0; i < 10; i++)
+ {
+ printf ("%g\n", gsl_vector_get(v, i));
+ }
+
+ gsl_vector_free (v);
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/vectorview.c b/gsl-1.9/doc/examples/vectorview.c
new file mode 100644
index 0000000..9225c28
--- /dev/null
+++ b/gsl-1.9/doc/examples/vectorview.c
@@ -0,0 +1,30 @@
+#include <math.h>
+#include <stdio.h>
+#include <gsl/gsl_matrix.h>
+#include <gsl/gsl_blas.h>
+
+int
+main (void)
+{
+ size_t i,j;
+
+ gsl_matrix *m = gsl_matrix_alloc (10, 10);
+
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ gsl_matrix_set (m, i, j, sin (i) + cos (j));
+
+ for (j = 0; j < 10; j++)
+ {
+ gsl_vector_view column = gsl_matrix_column (m, j);
+ double d;
+
+ d = gsl_blas_dnrm2 (&column.vector);
+
+ printf ("matrix column %d, norm = %g\n", j, d);
+ }
+
+ gsl_matrix_free (m);
+
+ return 0;
+}
diff --git a/gsl-1.9/doc/examples/vectorview.out b/gsl-1.9/doc/examples/vectorview.out
new file mode 100644
index 0000000..0138c24
--- /dev/null
+++ b/gsl-1.9/doc/examples/vectorview.out
@@ -0,0 +1,10 @@
+matrix column 0, norm = 4.31461
+matrix column 1, norm = 3.1205
+matrix column 2, norm = 2.19316
+matrix column 3, norm = 3.26114
+matrix column 4, norm = 2.53416
+matrix column 5, norm = 2.57281
+matrix column 6, norm = 4.20469
+matrix column 7, norm = 3.65202
+matrix column 8, norm = 2.08524
+matrix column 9, norm = 3.07313
diff --git a/gsl-1.9/doc/examples/vectorw.c b/gsl-1.9/doc/examples/vectorw.c
new file mode 100644
index 0000000..f25468b
--- /dev/null
+++ b/gsl-1.9/doc/examples/vectorw.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <gsl/gsl_vector.h>
+
+int
+main (void)
+{
+ int i;
+ gsl_vector * v = gsl_vector_alloc (100);
+
+ for (i = 0; i < 100; i++)
+ {
+ gsl_vector_set (v, i, 1.23 + i);
+ }
+
+ {
+ FILE * f = fopen ("test.dat", "w");
+ gsl_vector_fprintf (f, v, "%.5g");
+ fclose (f);
+ }
+
+ gsl_vector_free (v);
+ return 0;
+}
diff --git a/gsl-1.9/doc/fdl.texi b/gsl-1.9/doc/fdl.texi
new file mode 100644
index 0000000..f63a200
--- /dev/null
+++ b/gsl-1.9/doc/fdl.texi
@@ -0,0 +1,455 @@
+@cindex FDL, GNU Free Documentation License
+@center Version 1.2, November 2002
+@iftex
+@smallerfonts @rm
+@end iftex
+
+@display
+Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license
+document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+@sc{ascii} without markup, Texinfo input format, La@TeX{} input
+format, @acronym{SGML} or @acronym{XML} using a publicly available
+@acronym{DTD}, and standard-conforming simple @acronym{HTML},
+PostScript or @acronym{PDF} designed for human modification. Examples
+of transparent image formats include @acronym{PNG}, @acronym{XCF} and
+@acronym{JPG}. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, @acronym{SGML} or
+@acronym{XML} for which the @acronym{DTD} and/or processing tools are
+not generally available, and the machine-generated @acronym{HTML},
+PostScript or @acronym{PDF} produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{http://www.gnu.org/copyleft/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify
+ this document under the terms of the GNU Free
+ Documentation License, Version 1.2 or any later version
+ published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no
+ Back-Cover Texts. A copy of the license is included in
+ the section entitled ``GNU Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with...Texts.'' line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their
+ titles}, with the Front-Cover Texts being @var{list}, and
+ with the Back-Cover Texts being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@iftex
+@textfonts @rm
+@end iftex
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
+
diff --git a/gsl-1.9/doc/fft-complex-radix2-f.eps b/gsl-1.9/doc/fft-complex-radix2-f.eps
new file mode 100644
index 0000000..7ce3367
--- /dev/null
+++ b/gsl-1.9/doc/fft-complex-radix2-f.eps
@@ -0,0 +1,298 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: gnuplot
+%%DocumentFonts: Helvetica
+%%BoundingBox: 50 50 410 302
+%%EndComments
+/gnudict 40 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/vshift -46 def
+/dl {10 mul} def
+/hpt 31.5 def
+/vpt 31.5 def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/PL { stroke gnulinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 0 1 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 0 1 DL } def
+/LT2 { PL [2 dl 3 dl] 1 0 0 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/P { stroke [] 0 setdash
+ currentlinewidth 2 div sub M
+ 0 currentlinewidth V stroke } def
+/D { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ P } def
+/A { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ P } def
+/C { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/T { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ P } def
+/S { 2 copy A C} def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+/Helvetica findfont 140 scalefont setfont
+newpath
+LTa
+672 1163 M
+6297 0 V
+672 211 M
+0 4758 V
+LTb
+672 211 M
+63 0 V
+6234 0 R
+-63 0 V
+588 211 M
+(-0.5) Rshow
+672 1163 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0) Rshow
+672 2114 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.5) Rshow
+672 3066 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1) Rshow
+672 4017 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1.5) Rshow
+672 4969 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(2) Rshow
+672 211 M
+0 63 V
+0 4695 R
+0 -63 V
+672 71 M
+(0) Cshow
+1664 211 M
+0 63 V
+0 4695 R
+0 -63 V
+1664 71 M
+(20) Cshow
+2655 211 M
+0 63 V
+0 4695 R
+0 -63 V
+2655 71 M
+(40) Cshow
+3647 211 M
+0 63 V
+0 4695 R
+0 -63 V
+3647 71 M
+(60) Cshow
+4639 211 M
+0 63 V
+0 4695 R
+0 -63 V
+4639 71 M
+(80) Cshow
+5630 211 M
+0 63 V
+0 4695 R
+0 -63 V
+5630 71 M
+(100) Cshow
+6622 211 M
+0 63 V
+0 4695 R
+0 -63 V
+6622 71 M
+(120) Cshow
+672 211 M
+6297 0 V
+0 4758 V
+-6297 0 V
+672 211 L
+LT0
+672 4695 D
+722 4541 D
+771 4103 D
+821 3449 D
+870 2676 D
+920 1898 D
+969 1219 D
+1019 720 D
+1069 446 D
+1118 397 D
+1168 537 D
+1217 799 D
+1267 1106 D
+1317 1380 D
+1366 1564 D
+1416 1627 D
+1465 1569 D
+1515 1418 D
+1564 1220 D
+1614 1028 D
+1664 887 D
+1713 826 D
+1763 855 D
+1812 957 D
+1862 1104 D
+1912 1254 D
+1961 1372 D
+2011 1429 D
+2060 1416 D
+2110 1340 D
+2159 1223 D
+2209 1098 D
+2259 994 D
+2308 939 D
+2358 942 D
+2407 1002 D
+2457 1099 D
+2507 1209 D
+2556 1303 D
+2606 1358 D
+2655 1361 D
+2705 1313 D
+2754 1229 D
+2804 1130 D
+2854 1042 D
+2903 987 D
+2953 979 D
+3002 1018 D
+3052 1093 D
+3102 1185 D
+3151 1269 D
+3201 1325 D
+3250 1338 D
+3300 1305 D
+3349 1237 D
+3399 1150 D
+3449 1067 D
+3498 1010 D
+3548 993 D
+3597 1019 D
+3647 1083 D
+3697 1167 D
+3746 1249 D
+3796 1309 D
+3845 1331 D
+3895 1309 D
+3944 1249 D
+3994 1167 D
+4044 1083 D
+4093 1019 D
+4143 993 D
+4192 1010 D
+4242 1067 D
+4292 1150 D
+4341 1237 D
+4391 1305 D
+4440 1338 D
+4490 1325 D
+4539 1269 D
+4589 1185 D
+4639 1093 D
+4688 1018 D
+4738 979 D
+4787 987 D
+4837 1042 D
+4887 1130 D
+4936 1229 D
+4986 1313 D
+5035 1361 D
+5085 1358 D
+5134 1303 D
+5184 1209 D
+5234 1099 D
+5283 1002 D
+5333 942 D
+5382 939 D
+5432 994 D
+5482 1098 D
+5531 1223 D
+5581 1340 D
+5630 1416 D
+5680 1429 D
+5729 1372 D
+5779 1254 D
+5829 1104 D
+5878 957 D
+5928 855 D
+5977 826 D
+6027 887 D
+6077 1028 D
+6126 1220 D
+6176 1418 D
+6225 1569 D
+6275 1627 D
+6324 1564 D
+6374 1380 D
+6424 1106 D
+6473 799 D
+6523 537 D
+6572 397 D
+6622 446 D
+6672 720 D
+6721 1219 D
+6771 1898 D
+6820 2676 D
+6870 3449 D
+6919 4103 D
+6969 4541 D
+stroke
+grestore
+end
+showpage
+%%Trailer
diff --git a/gsl-1.9/doc/fft-complex-radix2-t.eps b/gsl-1.9/doc/fft-complex-radix2-t.eps
new file mode 100644
index 0000000..775fe8c
--- /dev/null
+++ b/gsl-1.9/doc/fft-complex-radix2-t.eps
@@ -0,0 +1,426 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: gnuplot
+%%DocumentFonts: Helvetica
+%%BoundingBox: 50 50 410 302
+%%EndComments
+/gnudict 40 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/vshift -46 def
+/dl {10 mul} def
+/hpt 31.5 def
+/vpt 31.5 def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/PL { stroke gnulinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 0 1 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 0 1 DL } def
+/LT2 { PL [2 dl 3 dl] 1 0 0 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/P { stroke [] 0 setdash
+ currentlinewidth 2 div sub M
+ 0 currentlinewidth V stroke } def
+/D { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ P } def
+/A { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ P } def
+/C { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/T { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ P } def
+/S { 2 copy A C} def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+/Helvetica findfont 140 scalefont setfont
+newpath
+LTa
+672 1163 M
+6297 0 V
+672 211 M
+0 4758 V
+LTb
+672 211 M
+63 0 V
+6234 0 R
+-63 0 V
+588 211 M
+(-0.5) Rshow
+672 1163 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0) Rshow
+672 2114 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.5) Rshow
+672 3066 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1) Rshow
+672 4017 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1.5) Rshow
+672 4969 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(2) Rshow
+672 211 M
+0 63 V
+0 4695 R
+0 -63 V
+672 71 M
+(0) Cshow
+1664 211 M
+0 63 V
+0 4695 R
+0 -63 V
+1664 71 M
+(20) Cshow
+2655 211 M
+0 63 V
+0 4695 R
+0 -63 V
+2655 71 M
+(40) Cshow
+3647 211 M
+0 63 V
+0 4695 R
+0 -63 V
+3647 71 M
+(60) Cshow
+4639 211 M
+0 63 V
+0 4695 R
+0 -63 V
+4639 71 M
+(80) Cshow
+5630 211 M
+0 63 V
+0 4695 R
+0 -63 V
+5630 71 M
+(100) Cshow
+6622 211 M
+0 63 V
+0 4695 R
+0 -63 V
+6622 71 M
+(120) Cshow
+672 211 M
+6297 0 V
+0 4758 V
+-6297 0 V
+672 211 L
+LT0
+672 3066 M
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 -1903 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 1903 V
+49 0 V
+50 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+49 0 V
+50 0 V
+672 3066 D
+722 3066 D
+771 3066 D
+821 3066 D
+870 3066 D
+920 3066 D
+969 3066 D
+1019 3066 D
+1069 3066 D
+1118 3066 D
+1168 3066 D
+1217 1163 D
+1267 1163 D
+1317 1163 D
+1366 1163 D
+1416 1163 D
+1465 1163 D
+1515 1163 D
+1564 1163 D
+1614 1163 D
+1664 1163 D
+1713 1163 D
+1763 1163 D
+1812 1163 D
+1862 1163 D
+1912 1163 D
+1961 1163 D
+2011 1163 D
+2060 1163 D
+2110 1163 D
+2159 1163 D
+2209 1163 D
+2259 1163 D
+2308 1163 D
+2358 1163 D
+2407 1163 D
+2457 1163 D
+2507 1163 D
+2556 1163 D
+2606 1163 D
+2655 1163 D
+2705 1163 D
+2754 1163 D
+2804 1163 D
+2854 1163 D
+2903 1163 D
+2953 1163 D
+3002 1163 D
+3052 1163 D
+3102 1163 D
+3151 1163 D
+3201 1163 D
+3250 1163 D
+3300 1163 D
+3349 1163 D
+3399 1163 D
+3449 1163 D
+3498 1163 D
+3548 1163 D
+3597 1163 D
+3647 1163 D
+3697 1163 D
+3746 1163 D
+3796 1163 D
+3845 1163 D
+3895 1163 D
+3944 1163 D
+3994 1163 D
+4044 1163 D
+4093 1163 D
+4143 1163 D
+4192 1163 D
+4242 1163 D
+4292 1163 D
+4341 1163 D
+4391 1163 D
+4440 1163 D
+4490 1163 D
+4539 1163 D
+4589 1163 D
+4639 1163 D
+4688 1163 D
+4738 1163 D
+4787 1163 D
+4837 1163 D
+4887 1163 D
+4936 1163 D
+4986 1163 D
+5035 1163 D
+5085 1163 D
+5134 1163 D
+5184 1163 D
+5234 1163 D
+5283 1163 D
+5333 1163 D
+5382 1163 D
+5432 1163 D
+5482 1163 D
+5531 1163 D
+5581 1163 D
+5630 1163 D
+5680 1163 D
+5729 1163 D
+5779 1163 D
+5829 1163 D
+5878 1163 D
+5928 1163 D
+5977 1163 D
+6027 1163 D
+6077 1163 D
+6126 1163 D
+6176 1163 D
+6225 1163 D
+6275 1163 D
+6324 1163 D
+6374 1163 D
+6424 1163 D
+6473 1163 D
+6523 3066 D
+6572 3066 D
+6622 3066 D
+6672 3066 D
+6721 3066 D
+6771 3066 D
+6820 3066 D
+6870 3066 D
+6919 3066 D
+6969 3066 D
+stroke
+grestore
+end
+showpage
+%%Trailer
diff --git a/gsl-1.9/doc/fft-complex-radix2.eps b/gsl-1.9/doc/fft-complex-radix2.eps
new file mode 100644
index 0000000..b653132
--- /dev/null
+++ b/gsl-1.9/doc/fft-complex-radix2.eps
@@ -0,0 +1,682 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: gnuplot
+%%DocumentFonts: Helvetica
+%%BoundingBox: 50 50 410 302
+%%EndComments
+/gnudict 40 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/vshift -46 def
+/dl {10 mul} def
+/hpt 31.5 def
+/vpt 31.5 def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/PL { stroke gnulinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 0 1 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 0 1 DL } def
+/LT2 { PL [2 dl 3 dl] 1 0 0 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/P { stroke [] 0 setdash
+ currentlinewidth 2 div sub M
+ 0 currentlinewidth V stroke } def
+/D { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ P } def
+/A { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ P } def
+/C { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/T { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ P } def
+/S { 2 copy A C} def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+/Helvetica findfont 140 scalefont setfont
+newpath
+LTa
+672 1163 M
+6297 0 V
+672 211 M
+0 4758 V
+LTb
+672 211 M
+63 0 V
+6234 0 R
+-63 0 V
+588 211 M
+(-0.5) Rshow
+672 1163 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0) Rshow
+672 2114 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.5) Rshow
+672 3066 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1) Rshow
+672 4017 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1.5) Rshow
+672 4969 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(2) Rshow
+672 211 M
+0 63 V
+0 4695 R
+0 -63 V
+672 71 M
+(0) Cshow
+1656 211 M
+0 63 V
+0 4695 R
+0 -63 V
+1656 71 M
+(20) Cshow
+2640 211 M
+0 63 V
+0 4695 R
+0 -63 V
+2640 71 M
+(40) Cshow
+3624 211 M
+0 63 V
+0 4695 R
+0 -63 V
+3624 71 M
+(60) Cshow
+4608 211 M
+0 63 V
+0 4695 R
+0 -63 V
+4608 71 M
+(80) Cshow
+5592 211 M
+0 63 V
+0 4695 R
+0 -63 V
+5592 71 M
+(100) Cshow
+6575 211 M
+0 63 V
+0 4695 R
+0 -63 V
+6575 71 M
+(120) Cshow
+672 211 M
+6297 0 V
+0 4758 V
+-6297 0 V
+672 211 L
+LT0
+672 3066 M
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 -1903 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 1903 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+49 0 V
+49 0 V
+49 0 V
+50 0 V
+49 0 V
+672 4695 M
+49 -154 V
+49 -438 V
+50 -654 V
+49 -773 V
+49 -778 V
+49 -679 V
+49 -499 V
+50 -274 V
+49 -49 V
+49 140 V
+49 262 V
+49 307 V
+50 274 V
+49 184 V
+49 63 V
+49 -58 V
+49 -151 V
+50 -198 V
+49 -192 V
+49 -141 V
+49 -61 V
+49 29 V
+49 102 V
+50 147 V
+49 150 V
+49 118 V
+49 57 V
+49 -13 V
+50 -76 V
+49 -117 V
+49 -125 V
+49 -104 V
+49 -55 V
+50 3 V
+49 60 V
+49 97 V
+49 110 V
+49 94 V
+50 55 V
+49 3 V
+49 -48 V
+49 -84 V
+49 -99 V
+50 -88 V
+49 -55 V
+49 -8 V
+49 39 V
+49 75 V
+50 92 V
+49 84 V
+49 56 V
+49 13 V
+49 -33 V
+50 -68 V
+49 -87 V
+49 -83 V
+49 -57 V
+49 -17 V
+50 26 V
+49 64 V
+49 84 V
+49 82 V
+49 60 V
+50 22 V
+49 -22 V
+49 -60 V
+49 -82 V
+49 -84 V
+49 -64 V
+50 -26 V
+49 17 V
+49 57 V
+49 83 V
+49 87 V
+50 68 V
+49 33 V
+49 -13 V
+49 -56 V
+49 -84 V
+50 -92 V
+49 -75 V
+49 -39 V
+49 8 V
+49 55 V
+50 88 V
+49 99 V
+49 84 V
+49 48 V
+49 -3 V
+50 -55 V
+49 -94 V
+49 -110 V
+49 -97 V
+49 -60 V
+50 -3 V
+49 55 V
+49 104 V
+49 125 V
+49 117 V
+50 76 V
+49 13 V
+49 -57 V
+49 -118 V
+49 -150 V
+50 -147 V
+49 -102 V
+49 -29 V
+49 61 V
+49 141 V
+49 192 V
+50 198 V
+49 151 V
+49 58 V
+49 -63 V
+49 -184 V
+50 -274 V
+49 -307 V
+49 -262 V
+49 -140 V
+49 49 V
+50 274 V
+49 499 V
+49 679 V
+49 778 V
+49 773 V
+50 654 V
+49 438 V
+672 3066 D
+721 3066 D
+770 3066 D
+820 3066 D
+869 3066 D
+918 3066 D
+967 3066 D
+1016 3066 D
+1066 3066 D
+1115 3066 D
+1164 3066 D
+1213 1163 D
+1262 1163 D
+1312 1163 D
+1361 1163 D
+1410 1163 D
+1459 1163 D
+1508 1163 D
+1558 1163 D
+1607 1163 D
+1656 1163 D
+1705 1163 D
+1754 1163 D
+1803 1163 D
+1853 1163 D
+1902 1163 D
+1951 1163 D
+2000 1163 D
+2049 1163 D
+2099 1163 D
+2148 1163 D
+2197 1163 D
+2246 1163 D
+2295 1163 D
+2345 1163 D
+2394 1163 D
+2443 1163 D
+2492 1163 D
+2541 1163 D
+2591 1163 D
+2640 1163 D
+2689 1163 D
+2738 1163 D
+2787 1163 D
+2837 1163 D
+2886 1163 D
+2935 1163 D
+2984 1163 D
+3033 1163 D
+3083 1163 D
+3132 1163 D
+3181 1163 D
+3230 1163 D
+3279 1163 D
+3329 1163 D
+3378 1163 D
+3427 1163 D
+3476 1163 D
+3525 1163 D
+3575 1163 D
+3624 1163 D
+3673 1163 D
+3722 1163 D
+3771 1163 D
+3821 1163 D
+3870 1163 D
+3919 1163 D
+3968 1163 D
+4017 1163 D
+4066 1163 D
+4116 1163 D
+4165 1163 D
+4214 1163 D
+4263 1163 D
+4312 1163 D
+4362 1163 D
+4411 1163 D
+4460 1163 D
+4509 1163 D
+4558 1163 D
+4608 1163 D
+4657 1163 D
+4706 1163 D
+4755 1163 D
+4804 1163 D
+4854 1163 D
+4903 1163 D
+4952 1163 D
+5001 1163 D
+5050 1163 D
+5100 1163 D
+5149 1163 D
+5198 1163 D
+5247 1163 D
+5296 1163 D
+5346 1163 D
+5395 1163 D
+5444 1163 D
+5493 1163 D
+5542 1163 D
+5592 1163 D
+5641 1163 D
+5690 1163 D
+5739 1163 D
+5788 1163 D
+5838 1163 D
+5887 1163 D
+5936 1163 D
+5985 1163 D
+6034 1163 D
+6083 1163 D
+6133 1163 D
+6182 1163 D
+6231 1163 D
+6280 1163 D
+6329 1163 D
+6379 1163 D
+6428 1163 D
+6477 3066 D
+6526 3066 D
+6575 3066 D
+6625 3066 D
+6674 3066 D
+6723 3066 D
+6772 3066 D
+6821 3066 D
+6871 3066 D
+6920 3066 D
+672 4695 D
+721 4541 D
+770 4103 D
+820 3449 D
+869 2676 D
+918 1898 D
+967 1219 D
+1016 720 D
+1066 446 D
+1115 397 D
+1164 537 D
+1213 799 D
+1262 1106 D
+1312 1380 D
+1361 1564 D
+1410 1627 D
+1459 1569 D
+1508 1418 D
+1558 1220 D
+1607 1028 D
+1656 887 D
+1705 826 D
+1754 855 D
+1803 957 D
+1853 1104 D
+1902 1254 D
+1951 1372 D
+2000 1429 D
+2049 1416 D
+2099 1340 D
+2148 1223 D
+2197 1098 D
+2246 994 D
+2295 939 D
+2345 942 D
+2394 1002 D
+2443 1099 D
+2492 1209 D
+2541 1303 D
+2591 1358 D
+2640 1361 D
+2689 1313 D
+2738 1229 D
+2787 1130 D
+2837 1042 D
+2886 987 D
+2935 979 D
+2984 1018 D
+3033 1093 D
+3083 1185 D
+3132 1269 D
+3181 1325 D
+3230 1338 D
+3279 1305 D
+3329 1237 D
+3378 1150 D
+3427 1067 D
+3476 1010 D
+3525 993 D
+3575 1019 D
+3624 1083 D
+3673 1167 D
+3722 1249 D
+3771 1309 D
+3821 1331 D
+3870 1309 D
+3919 1249 D
+3968 1167 D
+4017 1083 D
+4066 1019 D
+4116 993 D
+4165 1010 D
+4214 1067 D
+4263 1150 D
+4312 1237 D
+4362 1305 D
+4411 1338 D
+4460 1325 D
+4509 1269 D
+4558 1185 D
+4608 1093 D
+4657 1018 D
+4706 979 D
+4755 987 D
+4804 1042 D
+4854 1130 D
+4903 1229 D
+4952 1313 D
+5001 1361 D
+5050 1358 D
+5100 1303 D
+5149 1209 D
+5198 1099 D
+5247 1002 D
+5296 942 D
+5346 939 D
+5395 994 D
+5444 1098 D
+5493 1223 D
+5542 1340 D
+5592 1416 D
+5641 1429 D
+5690 1372 D
+5739 1254 D
+5788 1104 D
+5838 957 D
+5887 855 D
+5936 826 D
+5985 887 D
+6034 1028 D
+6083 1220 D
+6133 1418 D
+6182 1569 D
+6231 1627 D
+6280 1564 D
+6329 1380 D
+6379 1106 D
+6428 799 D
+6477 537 D
+6526 397 D
+6575 446 D
+6625 720 D
+6674 1219 D
+6723 1898 D
+6772 2676 D
+6821 3449 D
+6871 4103 D
+6920 4541 D
+stroke
+grestore
+end
+showpage
+%%Trailer
diff --git a/gsl-1.9/doc/fft-real-mixedradix.eps b/gsl-1.9/doc/fft-real-mixedradix.eps
new file mode 100644
index 0000000..b629018
--- /dev/null
+++ b/gsl-1.9/doc/fft-real-mixedradix.eps
@@ -0,0 +1,606 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: gnuplot
+%%DocumentFonts: Helvetica
+%%BoundingBox: 50 50 410 302
+%%EndComments
+/gnudict 40 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/vshift -46 def
+/dl {10 mul} def
+/hpt 31.5 def
+/vpt 31.5 def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/PL { stroke gnulinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 0 1 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 0 1 DL } def
+/LT2 { PL [2 dl 3 dl] 1 0 0 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/P { stroke [] 0 setdash
+ currentlinewidth 2 div sub M
+ 0 currentlinewidth V stroke } def
+/D { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ P } def
+/A { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ P } def
+/C { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/T { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ P } def
+/S { 2 copy A C} def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+/Helvetica findfont 140 scalefont setfont
+newpath
+LTa
+672 891 M
+6297 0 V
+672 211 M
+0 4758 V
+LTb
+672 211 M
+63 0 V
+6234 0 R
+-63 0 V
+588 211 M
+(-0.2) Rshow
+672 891 M
+63 0 V
+6234 0 R
+-63 0 V
+588 891 M
+(0) Rshow
+672 1570 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.2) Rshow
+672 2250 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.4) Rshow
+672 2930 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.6) Rshow
+672 3610 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(0.8) Rshow
+672 4289 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1) Rshow
+672 4969 M
+63 0 V
+6234 0 R
+-63 0 V
+-6318 0 R
+(1.2) Rshow
+672 211 M
+0 63 V
+0 4695 R
+0 -63 V
+672 71 M
+(0) Cshow
+1302 211 M
+0 63 V
+0 4695 R
+0 -63 V
+1302 71 M
+(10) Cshow
+1931 211 M
+0 63 V
+0 4695 R
+0 -63 V
+1931 71 M
+(20) Cshow
+2561 211 M
+0 63 V
+0 4695 R
+0 -63 V
+2561 71 M
+(30) Cshow
+3191 211 M
+0 63 V
+0 4695 R
+0 -63 V
+3191 71 M
+(40) Cshow
+3820 211 M
+0 63 V
+0 4695 R
+0 -63 V
+3820 71 M
+(50) Cshow
+4450 211 M
+0 63 V
+0 4695 R
+0 -63 V
+4450 71 M
+(60) Cshow
+5080 211 M
+0 63 V
+0 4695 R
+0 -63 V
+5080 71 M
+(70) Cshow
+5710 211 M
+0 63 V
+0 4695 R
+0 -63 V
+5710 71 M
+(80) Cshow
+6339 211 M
+0 63 V
+0 4695 R
+0 -63 V
+6339 71 M
+(90) Cshow
+6969 211 M
+0 63 V
+0 4695 R
+0 -63 V
+6969 71 M
+(100) Cshow
+672 211 M
+6297 0 V
+0 4758 V
+-6297 0 V
+672 211 L
+LT0
+672 891 M
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+62 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 3398 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+62 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+4828 891 L
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+62 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+63 0 V
+672 997 M
+63 -23 V
+63 -35 V
+63 -42 V
+63 -44 V
+63 -39 V
+63 -30 V
+63 -15 V
+63 1 V
+63 19 V
+63 34 V
+63 47 V
+63 52 V
+63 51 V
+63 43 V
+63 28 V
+63 8 V
+62 -16 V
+63 -41 V
+63 -62 V
+63 -77 V
+63 -83 V
+63 -78 V
+63 -60 V
+63 -29 V
+63 15 V
+63 69 V
+63 130 V
+63 195 V
+63 258 V
+63 316 V
+63 362 V
+63 395 V
+63 410 V
+63 407 V
+63 384 V
+63 345 V
+63 291 V
+63 225 V
+63 155 V
+63 83 V
+63 16 V
+63 -41 V
+63 -85 V
+63 -113 V
+63 -124 V
+63 -117 V
+63 -96 V
+63 -63 V
+63 -22 V
+62 22 V
+63 63 V
+63 96 V
+63 117 V
+63 124 V
+63 113 V
+63 85 V
+63 41 V
+63 -16 V
+63 -83 V
+63 -155 V
+63 -225 V
+63 -291 V
+63 -345 V
+63 -384 V
+63 -407 V
+63 -410 V
+63 -395 V
+63 -362 V
+63 -316 V
+63 -258 V
+63 -195 V
+63 -130 V
+63 -69 V
+63 -15 V
+63 29 V
+63 60 V
+63 78 V
+63 83 V
+63 77 V
+63 62 V
+63 41 V
+63 16 V
+63 -8 V
+62 -28 V
+63 -43 V
+63 -51 V
+63 -52 V
+63 -47 V
+63 -34 V
+63 -19 V
+63 -1 V
+63 15 V
+63 30 V
+63 39 V
+63 44 V
+63 42 V
+63 35 V
+63 23 V
+63 8 V
+672 891 D
+735 891 D
+798 891 D
+861 891 D
+924 891 D
+987 891 D
+1050 891 D
+1113 891 D
+1176 891 D
+1239 891 D
+1302 891 D
+1365 891 D
+1428 891 D
+1491 891 D
+1554 891 D
+1617 891 D
+1680 891 D
+1742 891 D
+1805 891 D
+1868 891 D
+1931 891 D
+1994 891 D
+2057 891 D
+2120 891 D
+2183 891 D
+2246 891 D
+2309 891 D
+2372 891 D
+2435 891 D
+2498 891 D
+2561 891 D
+2624 891 D
+2687 891 D
+2750 4289 D
+2813 4289 D
+2876 4289 D
+2939 4289 D
+3002 4289 D
+3065 4289 D
+3128 4289 D
+3191 4289 D
+3254 4289 D
+3317 4289 D
+3380 4289 D
+3443 4289 D
+3506 4289 D
+3569 4289 D
+3632 4289 D
+3695 4289 D
+3758 4289 D
+3820 4289 D
+3883 4289 D
+3946 4289 D
+4009 4289 D
+4072 4289 D
+4135 4289 D
+4198 4289 D
+4261 4289 D
+4324 4289 D
+4387 4289 D
+4450 4289 D
+4513 4289 D
+4576 4289 D
+4639 4289 D
+4702 4289 D
+4765 4289 D
+4828 891 D
+4891 891 D
+4954 891 D
+5017 891 D
+5080 891 D
+5143 891 D
+5206 891 D
+5269 891 D
+5332 891 D
+5395 891 D
+5458 891 D
+5521 891 D
+5584 891 D
+5647 891 D
+5710 891 D
+5773 891 D
+5836 891 D
+5899 891 D
+5961 891 D
+6024 891 D
+6087 891 D
+6150 891 D
+6213 891 D
+6276 891 D
+6339 891 D
+6402 891 D
+6465 891 D
+6528 891 D
+6591 891 D
+6654 891 D
+6717 891 D
+6780 891 D
+6843 891 D
+6906 891 D
+672 997 D
+735 974 D
+798 939 D
+861 897 D
+924 853 D
+987 814 D
+1050 784 D
+1113 769 D
+1176 770 D
+1239 789 D
+1302 823 D
+1365 870 D
+1428 922 D
+1491 973 D
+1554 1016 D
+1617 1044 D
+1680 1052 D
+1742 1036 D
+1805 995 D
+1868 933 D
+1931 856 D
+1994 773 D
+2057 695 D
+2120 635 D
+2183 606 D
+2246 621 D
+2309 690 D
+2372 820 D
+2435 1015 D
+2498 1273 D
+2561 1589 D
+2624 1951 D
+2687 2346 D
+2750 2756 D
+2813 3163 D
+2876 3547 D
+2939 3892 D
+3002 4183 D
+3065 4408 D
+3128 4563 D
+3191 4646 D
+3254 4662 D
+3317 4621 D
+3380 4536 D
+3443 4423 D
+3506 4299 D
+3569 4182 D
+3632 4086 D
+3695 4023 D
+3758 4001 D
+3820 4023 D
+3883 4086 D
+3946 4182 D
+4009 4299 D
+4072 4423 D
+4135 4536 D
+4198 4621 D
+4261 4662 D
+4324 4646 D
+4387 4563 D
+4450 4408 D
+4513 4183 D
+4576 3892 D
+4639 3547 D
+4702 3163 D
+4765 2756 D
+4828 2346 D
+4891 1951 D
+4954 1589 D
+5017 1273 D
+5080 1015 D
+5143 820 D
+5206 690 D
+5269 621 D
+5332 606 D
+5395 635 D
+5458 695 D
+5521 773 D
+5584 856 D
+5647 933 D
+5710 995 D
+5773 1036 D
+5836 1052 D
+5899 1044 D
+5961 1016 D
+6024 973 D
+6087 922 D
+6150 870 D
+6213 823 D
+6276 789 D
+6339 770 D
+6402 769 D
+6465 784 D
+6528 814 D
+6591 853 D
+6654 897 D
+6717 939 D
+6780 974 D
+6843 997 D
+6906 1005 D
+stroke
+grestore
+end
+showpage
+%%Trailer
diff --git a/gsl-1.9/doc/fft.texi b/gsl-1.9/doc/fft.texi
new file mode 100644
index 0000000..16cc5a9
--- /dev/null
+++ b/gsl-1.9/doc/fft.texi
@@ -0,0 +1,1001 @@
+@cindex FFT
+@cindex Fast Fourier Transforms, see FFT
+@cindex Fourier Transforms, see FFT
+@cindex Discrete Fourier Transforms, see FFT
+@cindex DFTs, see FFT
+
+This chapter describes functions for performing Fast Fourier Transforms
+(FFTs). The library includes radix-2 routines (for lengths which are a
+power of two) and mixed-radix routines (which work for any length). For
+efficiency there are separate versions of the routines for real data and
+for complex data. The mixed-radix routines are a reimplementation of the
+@sc{fftpack} library of Paul Swarztrauber. Fortran code for @sc{fftpack} is
+available on Netlib (@sc{fftpack} also includes some routines for sine and
+cosine transforms but these are currently not available in GSL). For
+details and derivations of the underlying algorithms consult the
+document @cite{GSL FFT Algorithms} (@pxref{FFT References and Further Reading})
+
+@menu
+* Mathematical Definitions::
+* Overview of complex data FFTs::
+* Radix-2 FFT routines for complex data::
+* Mixed-radix FFT routines for complex data::
+* Overview of real data FFTs::
+* Radix-2 FFT routines for real data::
+* Mixed-radix FFT routines for real data::
+* FFT References and Further Reading::
+@end menu
+
+@node Mathematical Definitions
+@section Mathematical Definitions
+@cindex FFT mathematical definition
+
+Fast Fourier Transforms are efficient algorithms for
+calculating the discrete fourier transform (DFT),
+@tex
+\beforedisplay
+$$
+x_j = \sum_{k=0}^{N-1} z_k \exp(-2\pi i j k / N)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_j = \sum_@{k=0@}^@{N-1@} z_k \exp(-2\pi i j k / N)
+@end example
+@end ifinfo
+
+The DFT usually arises as an approximation to the continuous fourier
+transform when functions are sampled at discrete intervals in space or
+time. The naive evaluation of the discrete fourier transform is a
+matrix-vector multiplication
+@c{$W\vec{z}$}
+@math{W\vec@{z@}}. A general matrix-vector multiplication takes
+@math{O(N^2)} operations for @math{N} data-points. Fast fourier
+transform algorithms use a divide-and-conquer strategy to factorize the
+matrix @math{W} into smaller sub-matrices, corresponding to the integer
+factors of the length @math{N}. If @math{N} can be factorized into a
+product of integers
+@c{$f_1 f_2 \ldots f_n$}
+@math{f_1 f_2 ... f_n} then the DFT can be computed in @math{O(N \sum
+f_i)} operations. For a radix-2 FFT this gives an operation count of
+@math{O(N \log_2 N)}.
+
+All the FFT functions offer three types of transform: forwards, inverse
+and backwards, based on the same mathematical definitions. The
+definition of the @dfn{forward fourier transform},
+@c{$x = \hbox{FFT}(z)$}
+@math{x = FFT(z)}, is,
+@tex
+\beforedisplay
+$$
+x_j = \sum_{k=0}^{N-1} z_k \exp(-2\pi i j k / N)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_j = \sum_@{k=0@}^@{N-1@} z_k \exp(-2\pi i j k / N)
+@end example
+
+@end ifinfo
+@noindent
+and the definition of the @dfn{inverse fourier transform},
+@c{$x = \hbox{IFFT}(z)$}
+@math{x = IFFT(z)}, is,
+@tex
+\beforedisplay
+$$
+z_j = {1 \over N} \sum_{k=0}^{N-1} x_k \exp(2\pi i j k / N).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+z_j = @{1 \over N@} \sum_@{k=0@}^@{N-1@} x_k \exp(2\pi i j k / N).
+@end example
+
+@end ifinfo
+@noindent
+The factor of @math{1/N} makes this a true inverse. For example, a call
+to @code{gsl_fft_complex_forward} followed by a call to
+@code{gsl_fft_complex_inverse} should return the original data (within
+numerical errors).
+
+In general there are two possible choices for the sign of the
+exponential in the transform/ inverse-transform pair. GSL follows the
+same convention as @sc{fftpack}, using a negative exponential for the forward
+transform. The advantage of this convention is that the inverse
+transform recreates the original function with simple fourier
+synthesis. Numerical Recipes uses the opposite convention, a positive
+exponential in the forward transform.
+
+The @dfn{backwards FFT} is simply our terminology for an unscaled
+version of the inverse FFT,
+@tex
+\beforedisplay
+$$
+z^{backwards}_j = \sum_{k=0}^{N-1} x_k \exp(2\pi i j k / N).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+z^@{backwards@}_j = \sum_@{k=0@}^@{N-1@} x_k \exp(2\pi i j k / N).
+@end example
+
+@end ifinfo
+@noindent
+When the overall scale of the result is unimportant it is often
+convenient to use the backwards FFT instead of the inverse to save
+unnecessary divisions.
+
+@node Overview of complex data FFTs
+@section Overview of complex data FFTs
+@cindex FFT, complex data
+
+The inputs and outputs for the complex FFT routines are @dfn{packed
+arrays} of floating point numbers. In a packed array the real and
+imaginary parts of each complex number are placed in alternate
+neighboring elements. For example, the following definition of a packed
+array of length 6,
+
+@example
+double x[3*2];
+gsl_complex_packed_array data = x;
+@end example
+
+@noindent
+can be used to hold an array of three complex numbers, @code{z[3]}, in
+the following way,
+
+@example
+data[0] = Re(z[0])
+data[1] = Im(z[0])
+data[2] = Re(z[1])
+data[3] = Im(z[1])
+data[4] = Re(z[2])
+data[5] = Im(z[2])
+@end example
+
+@noindent
+The array indices for the data have the same ordering as those
+in the definition of the DFT---i.e. there are no index transformations
+or permutations of the data.
+
+A @dfn{stride} parameter allows the user to perform transforms on the
+elements @code{z[stride*i]} instead of @code{z[i]}. A stride greater
+than 1 can be used to take an in-place FFT of the column of a matrix. A
+stride of 1 accesses the array without any additional spacing between
+elements.
+
+To perform an FFT on a vector argument, such as @code{gsl_vector_complex
+* v}, use the following definitions (or their equivalents) when calling
+the functions described in this chapter:
+
+@example
+gsl_complex_packed_array data = v->data;
+size_t stride = v->stride;
+size_t n = v->size;
+@end example
+
+For physical applications it is important to remember that the index
+appearing in the DFT does not correspond directly to a physical
+frequency. If the time-step of the DFT is @math{\Delta} then the
+frequency-domain includes both positive and negative frequencies,
+ranging from @math{-1/(2\Delta)} through 0 to @math{+1/(2\Delta)}. The
+positive frequencies are stored from the beginning of the array up to
+the middle, and the negative frequencies are stored backwards from the
+end of the array.
+
+Here is a table which shows the layout of the array @var{data}, and the
+correspondence between the time-domain data @math{z}, and the
+frequency-domain data @math{x}.
+
+@example
+index z x = FFT(z)
+
+0 z(t = 0) x(f = 0)
+1 z(t = 1) x(f = 1/(N Delta))
+2 z(t = 2) x(f = 2/(N Delta))
+. ........ ..................
+N/2 z(t = N/2) x(f = +1/(2 Delta),
+ -1/(2 Delta))
+. ........ ..................
+N-3 z(t = N-3) x(f = -3/(N Delta))
+N-2 z(t = N-2) x(f = -2/(N Delta))
+N-1 z(t = N-1) x(f = -1/(N Delta))
+@end example
+
+@noindent
+When @math{N} is even the location @math{N/2} contains the most positive
+and negative frequencies (@math{+1/(2 \Delta)}, @math{-1/(2 \Delta)})
+which are equivalent. If @math{N} is odd then general structure of the
+table above still applies, but @math{N/2} does not appear.
+
+
+@node Radix-2 FFT routines for complex data
+@section Radix-2 FFT routines for complex data
+@cindex FFT of complex data, radix-2 algorithm
+@cindex Radix-2 FFT, complex data
+
+The radix-2 algorithms described in this section are simple and compact,
+although not necessarily the most efficient. They use the Cooley-Tukey
+algorithm to compute in-place complex FFTs for lengths which are a power
+of 2---no additional storage is required. The corresponding
+self-sorting mixed-radix routines offer better performance at the
+expense of requiring additional working space.
+
+All the functions described in this section are declared in the header file @file{gsl_fft_complex.h}.
+
+@deftypefun int gsl_fft_complex_radix2_forward (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n})
+
+@deftypefunx int gsl_fft_complex_radix2_transform (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n}, gsl_fft_direction @var{sign})
+
+@deftypefunx int gsl_fft_complex_radix2_backward (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n})
+
+@deftypefunx int gsl_fft_complex_radix2_inverse (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n})
+
+These functions compute forward, backward and inverse FFTs of length
+@var{n} with stride @var{stride}, on the packed complex array @var{data}
+using an in-place radix-2 decimation-in-time algorithm. The length of
+the transform @var{n} is restricted to powers of two. For the
+@code{transform} version of the function the @var{sign} argument can be
+either @code{forward} (@math{-1}) or @code{backward} (@math{+1}).
+
+The functions return a value of @code{GSL_SUCCESS} if no errors were
+detected, or @code{GSL_EDOM} if the length of the data @var{n} is not a
+power of two.
+@end deftypefun
+
+@deftypefun int gsl_fft_complex_radix2_dif_forward (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n})
+
+@deftypefunx int gsl_fft_complex_radix2_dif_transform (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n}, gsl_fft_direction @var{sign})
+
+@deftypefunx int gsl_fft_complex_radix2_dif_backward (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n})
+
+@deftypefunx int gsl_fft_complex_radix2_dif_inverse (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n})
+
+These are decimation-in-frequency versions of the radix-2 FFT functions.
+
+@end deftypefun
+
+
+@comment @node Example of using radix-2 FFT routines for complex data
+@comment @subsection Example of using radix-2 FFT routines for complex data
+
+Here is an example program which computes the FFT of a short pulse in a
+sample of length 128. To make the resulting fourier transform real the
+pulse is defined for equal positive and negative times (@math{-10}
+@dots{} @math{10}), where the negative times wrap around the end of the
+array.
+
+@example
+@verbatiminclude examples/fft.c
+@end example
+
+@noindent
+Note that we have assumed that the program is using the default error
+handler (which calls @code{abort} for any errors). If you are not using
+a safe error handler you would need to check the return status of
+@code{gsl_fft_complex_radix2_forward}.
+
+The transformed data is rescaled by @math{1/\sqrt N} so that it fits on
+the same plot as the input. Only the real part is shown, by the choice
+of the input data the imaginary part is zero. Allowing for the
+wrap-around of negative times at @math{t=128}, and working in units of
+@math{k/N}, the DFT approximates the continuum fourier transform, giving
+a modulated sine function.
+@iftex
+@tex
+\beforedisplay
+$$
+\int_{-a}^{+a} e^{-2 \pi i k x} dx = {\sin(2\pi k a) \over\pi k}
+$$
+\afterdisplay
+@end tex
+
+@sp 1
+@center @image{fft-complex-radix2-t,2.8in}
+@center @image{fft-complex-radix2-f,2.8in}
+@quotation
+A pulse and its discrete fourier transform, output from
+the example program.
+@end quotation
+@end iftex
+
+@node Mixed-radix FFT routines for complex data
+@section Mixed-radix FFT routines for complex data
+@cindex FFT of complex data, mixed-radix algorithm
+@cindex Mixed-radix FFT, complex data
+
+This section describes mixed-radix FFT algorithms for complex data. The
+mixed-radix functions work for FFTs of any length. They are a
+reimplementation of Paul Swarztrauber's Fortran @sc{fftpack} library.
+The theory is explained in the review article @cite{Self-sorting
+Mixed-radix FFTs} by Clive Temperton. The routines here use the same
+indexing scheme and basic algorithms as @sc{fftpack}.
+
+The mixed-radix algorithm is based on sub-transform modules---highly
+optimized small length FFTs which are combined to create larger FFTs.
+There are efficient modules for factors of 2, 3, 4, 5, 6 and 7. The
+modules for the composite factors of 4 and 6 are faster than combining
+the modules for @math{2*2} and @math{2*3}.
+
+For factors which are not implemented as modules there is a fall-back to
+a general length-@math{n} module which uses Singleton's method for
+efficiently computing a DFT. This module is @math{O(n^2)}, and slower
+than a dedicated module would be but works for any length @math{n}. Of
+course, lengths which use the general length-@math{n} module will still
+be factorized as much as possible. For example, a length of 143 will be
+factorized into @math{11*13}. Large prime factors are the worst case
+scenario, e.g. as found in @math{n=2*3*99991}, and should be avoided
+because their @math{O(n^2)} scaling will dominate the run-time (consult
+the document @cite{GSL FFT Algorithms} included in the GSL distribution
+if you encounter this problem).
+
+The mixed-radix initialization function @code{gsl_fft_complex_wavetable_alloc}
+returns the list of factors chosen by the library for a given length
+@math{N}. It can be used to check how well the length has been
+factorized, and estimate the run-time. To a first approximation the
+run-time scales as @math{N \sum f_i}, where the @math{f_i} are the
+factors of @math{N}. For programs under user control you may wish to
+issue a warning that the transform will be slow when the length is
+poorly factorized. If you frequently encounter data lengths which
+cannot be factorized using the existing small-prime modules consult
+@cite{GSL FFT Algorithms} for details on adding support for other
+factors.
+
+@comment First, the space for the trigonometric lookup tables and scratch area is
+@comment allocated by a call to one of the @code{alloc} functions. We
+@comment call the combination of factorization, scratch space and trigonometric
+@comment lookup arrays a @dfn{wavetable}. It contains the sine and cosine
+@comment waveforms for the all the frequencies that will be used in the FFT.
+
+@comment The wavetable is initialized by a call to the corresponding @code{init}
+@comment function. It factorizes the data length, using the implemented
+@comment subtransforms as preferred factors wherever possible. The trigonometric
+@comment lookup table for the chosen factorization is also computed.
+
+@comment An FFT is computed by a call to one of the @code{forward},
+@comment @code{backward} or @code{inverse} functions, with the data, length and
+@comment wavetable as arguments.
+
+All the functions described in this section are declared in the header
+file @file{gsl_fft_complex.h}.
+
+@deftypefun {gsl_fft_complex_wavetable *} gsl_fft_complex_wavetable_alloc (size_t @var{n})
+This function prepares a trigonometric lookup table for a complex FFT of
+length @var{n}. The function returns a pointer to the newly allocated
+@code{gsl_fft_complex_wavetable} if no errors were detected, and a null
+pointer in the case of error. The length @var{n} is factorized into a
+product of subtransforms, and the factors and their trigonometric
+coefficients are stored in the wavetable. The trigonometric coefficients
+are computed using direct calls to @code{sin} and @code{cos}, for
+accuracy. Recursion relations could be used to compute the lookup table
+faster, but if an application performs many FFTs of the same length then
+this computation is a one-off overhead which does not affect the final
+throughput.
+
+The wavetable structure can be used repeatedly for any transform of the
+same length. The table is not modified by calls to any of the other FFT
+functions. The same wavetable can be used for both forward and backward
+(or inverse) transforms of a given length.
+@end deftypefun
+
+@deftypefun void gsl_fft_complex_wavetable_free (gsl_fft_complex_wavetable * @var{wavetable})
+This function frees the memory associated with the wavetable
+@var{wavetable}. The wavetable can be freed if no further FFTs of the
+same length will be needed.
+@end deftypefun
+
+@noindent
+These functions operate on a @code{gsl_fft_complex_wavetable} structure
+which contains internal parameters for the FFT. It is not necessary to
+set any of the components directly but it can sometimes be useful to
+examine them. For example, the chosen factorization of the FFT length
+is given and can be used to provide an estimate of the run-time or
+numerical error. The wavetable structure is declared in the header file
+@file{gsl_fft_complex.h}.
+
+@deftp {Data Type} gsl_fft_complex_wavetable
+This is a structure that holds the factorization and trigonometric
+lookup tables for the mixed radix fft algorithm. It has the following
+components:
+
+@table @code
+@item size_t n
+This is the number of complex data points
+
+@item size_t nf
+This is the number of factors that the length @code{n} was decomposed into.
+
+@item size_t factor[64]
+This is the array of factors. Only the first @code{nf} elements are
+used.
+
+@comment (FIXME: This is a fixed length array and therefore probably in
+@comment violation of the GNU Coding Standards).
+
+@item gsl_complex * trig
+This is a pointer to a preallocated trigonometric lookup table of
+@code{n} complex elements.
+
+@item gsl_complex * twiddle[64]
+This is an array of pointers into @code{trig}, giving the twiddle
+factors for each pass.
+@end table
+@end deftp
+
+@noindent
+The mixed radix algorithms require additional working space to hold
+the intermediate steps of the transform.
+
+@deftypefun {gsl_fft_complex_workspace *} gsl_fft_complex_workspace_alloc (size_t @var{n})
+This function allocates a workspace for a complex transform of length
+@var{n}.
+@end deftypefun
+
+@deftypefun void gsl_fft_complex_workspace_free (gsl_fft_complex_workspace * @var{workspace})
+This function frees the memory associated with the workspace
+@var{workspace}. The workspace can be freed if no further FFTs of the
+same length will be needed.
+@end deftypefun
+
+@comment @deftp {Data Type} gsl_fft_complex_workspace
+@comment This is a structure that holds the workspace for the mixed radix fft
+@comment algorithm. It has the following components:
+@comment
+@comment @table @code
+@comment @item gsl_complex * scratch
+@comment This is a pointer to a workspace of @code{n} complex elements,
+@comment capable of holding intermediate copies of the original data set.
+@comment @end table
+@comment @end deftp
+
+@noindent
+The following functions compute the transform,
+
+@deftypefun int gsl_fft_complex_forward (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n}, const gsl_fft_complex_wavetable * @var{wavetable}, gsl_fft_complex_workspace * @var{work})
+@deftypefunx int gsl_fft_complex_transform (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n}, const gsl_fft_complex_wavetable * @var{wavetable}, gsl_fft_complex_workspace * @var{work}, gsl_fft_direction @var{sign})
+@deftypefunx int gsl_fft_complex_backward (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n}, const gsl_fft_complex_wavetable * @var{wavetable}, gsl_fft_complex_workspace * @var{work})
+@deftypefunx int gsl_fft_complex_inverse (gsl_complex_packed_array @var{data}, size_t @var{stride}, size_t @var{n}, const gsl_fft_complex_wavetable * @var{wavetable}, gsl_fft_complex_workspace * @var{work})
+
+These functions compute forward, backward and inverse FFTs of length
+@var{n} with stride @var{stride}, on the packed complex array
+@var{data}, using a mixed radix decimation-in-frequency algorithm.
+There is no restriction on the length @var{n}. Efficient modules are
+provided for subtransforms of length 2, 3, 4, 5, 6 and 7. Any remaining
+factors are computed with a slow, @math{O(n^2)}, general-@math{n}
+module. The caller must supply a @var{wavetable} containing the
+trigonometric lookup tables and a workspace @var{work}. For the
+@code{transform} version of the function the @var{sign} argument can be
+either @code{forward} (@math{-1}) or @code{backward} (@math{+1}).
+
+The functions return a value of @code{0} if no errors were detected. The
+following @code{gsl_errno} conditions are defined for these functions:
+
+@table @code
+@item GSL_EDOM
+The length of the data @var{n} is not a positive integer (i.e. @var{n}
+is zero).
+
+@item GSL_EINVAL
+The length of the data @var{n} and the length used to compute the given
+@var{wavetable} do not match.
+@end table
+@end deftypefun
+
+@comment @node Example of using mixed-radix FFT routines for complex data
+@comment @subsection Example of using mixed-radix FFT routines for complex data
+
+Here is an example program which computes the FFT of a short pulse in a
+sample of length 630 (@math{=2*3*3*5*7}) using the mixed-radix
+algorithm.
+
+@example
+@verbatiminclude examples/fftmr.c
+@end example
+
+@noindent
+Note that we have assumed that the program is using the default
+@code{gsl} error handler (which calls @code{abort} for any errors). If
+you are not using a safe error handler you would need to check the
+return status of all the @code{gsl} routines.
+
+@node Overview of real data FFTs
+@section Overview of real data FFTs
+@cindex FFT of real data
+The functions for real data are similar to those for complex data.
+However, there is an important difference between forward and inverse
+transforms. The fourier transform of a real sequence is not real. It is
+a complex sequence with a special symmetry:
+@tex
+\beforedisplay
+$$
+z_k = z_{N-k}^*
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+z_k = z_@{N-k@}^*
+@end example
+
+@end ifinfo
+@noindent
+A sequence with this symmetry is called @dfn{conjugate-complex} or
+@dfn{half-complex}. This different structure requires different
+storage layouts for the forward transform (from real to half-complex)
+and inverse transform (from half-complex back to real). As a
+consequence the routines are divided into two sets: functions in
+@code{gsl_fft_real} which operate on real sequences and functions in
+@code{gsl_fft_halfcomplex} which operate on half-complex sequences.
+
+Functions in @code{gsl_fft_real} compute the frequency coefficients of a
+real sequence. The half-complex coefficients @math{c} of a real sequence
+@math{x} are given by fourier analysis,
+@tex
+\beforedisplay
+$$
+c_k = \sum_{j=0}^{N-1} x_j \exp(-2 \pi i j k /N)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+c_k = \sum_@{j=0@}^@{N-1@} x_j \exp(-2 \pi i j k /N)
+@end example
+
+@end ifinfo
+@noindent
+Functions in @code{gsl_fft_halfcomplex} compute inverse or backwards
+transforms. They reconstruct real sequences by fourier synthesis from
+their half-complex frequency coefficients, @math{c},
+@tex
+\beforedisplay
+$$
+x_j = {1 \over N} \sum_{k=0}^{N-1} c_k \exp(2 \pi i j k /N)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_j = @{1 \over N@} \sum_@{k=0@}^@{N-1@} c_k \exp(2 \pi i j k /N)
+@end example
+
+@end ifinfo
+@noindent
+The symmetry of the half-complex sequence implies that only half of the
+complex numbers in the output need to be stored. The remaining half can
+be reconstructed using the half-complex symmetry condition. This works
+for all lengths, even and odd---when the length is even the middle value
+where @math{k=N/2} is also real. Thus only @var{N} real numbers are
+required to store the half-complex sequence, and the transform of a real
+sequence can be stored in the same size array as the original data.
+
+The precise storage arrangements depend on the algorithm, and are
+different for radix-2 and mixed-radix routines. The radix-2 function
+operates in-place, which constrains the locations where each element can
+be stored. The restriction forces real and imaginary parts to be stored
+far apart. The mixed-radix algorithm does not have this restriction, and
+it stores the real and imaginary parts of a given term in neighboring
+locations (which is desirable for better locality of memory accesses).
+
+@node Radix-2 FFT routines for real data
+@section Radix-2 FFT routines for real data
+@cindex FFT of real data, radix-2 algorithm
+@cindex Radix-2 FFT for real data
+
+This section describes radix-2 FFT algorithms for real data. They use
+the Cooley-Tukey algorithm to compute in-place FFTs for lengths which
+are a power of 2.
+
+The radix-2 FFT functions for real data are declared in the header files
+@file{gsl_fft_real.h}
+
+@deftypefun int gsl_fft_real_radix2_transform (double @var{data}[], size_t @var{stride}, size_t @var{n})
+
+This function computes an in-place radix-2 FFT of length @var{n} and
+stride @var{stride} on the real array @var{data}. The output is a
+half-complex sequence, which is stored in-place. The arrangement of the
+half-complex terms uses the following scheme: for @math{k < N/2} the
+real part of the @math{k}-th term is stored in location @math{k}, and
+the corresponding imaginary part is stored in location @math{N-k}. Terms
+with @math{k > N/2} can be reconstructed using the symmetry
+@c{$z_k = z^*_{N-k}$}
+@math{z_k = z^*_@{N-k@}}.
+The terms for @math{k=0} and @math{k=N/2} are both purely
+real, and count as a special case. Their real parts are stored in
+locations @math{0} and @math{N/2} respectively, while their imaginary
+parts which are zero are not stored.
+
+The following table shows the correspondence between the output
+@var{data} and the equivalent results obtained by considering the input
+data as a complex sequence with zero imaginary part,
+
+@example
+complex[0].real = data[0]
+complex[0].imag = 0
+complex[1].real = data[1]
+complex[1].imag = data[N-1]
+............... ................
+complex[k].real = data[k]
+complex[k].imag = data[N-k]
+............... ................
+complex[N/2].real = data[N/2]
+complex[N/2].imag = 0
+............... ................
+complex[k'].real = data[k] k' = N - k
+complex[k'].imag = -data[N-k]
+............... ................
+complex[N-1].real = data[1]
+complex[N-1].imag = -data[N-1]
+@end example
+@noindent
+Note that the output data can be converted into the full complex
+sequence using the function @code{gsl_fft_halfcomplex_unpack}
+described in the next section.
+
+@end deftypefun
+The radix-2 FFT functions for halfcomplex data are declared in the
+header file @file{gsl_fft_halfcomplex.h}.
+
+@deftypefun int gsl_fft_halfcomplex_radix2_inverse (double @var{data}[], size_t @var{stride}, size_t @var{n})
+@deftypefunx int gsl_fft_halfcomplex_radix2_backward (double @var{data}[], size_t @var{stride}, size_t @var{n})
+
+These functions compute the inverse or backwards in-place radix-2 FFT of
+length @var{n} and stride @var{stride} on the half-complex sequence
+@var{data} stored according the output scheme used by
+@code{gsl_fft_real_radix2}. The result is a real array stored in natural
+order.
+
+@end deftypefun
+
+
+
+@node Mixed-radix FFT routines for real data
+@section Mixed-radix FFT routines for real data
+@cindex FFT of real data, mixed-radix algorithm
+@cindex Mixed-radix FFT, real data
+
+This section describes mixed-radix FFT algorithms for real data. The
+mixed-radix functions work for FFTs of any length. They are a
+reimplementation of the real-FFT routines in the Fortran @sc{fftpack} library
+by Paul Swarztrauber. The theory behind the algorithm is explained in
+the article @cite{Fast Mixed-Radix Real Fourier Transforms} by Clive
+Temperton. The routines here use the same indexing scheme and basic
+algorithms as @sc{fftpack}.
+
+The functions use the @sc{fftpack} storage convention for half-complex
+sequences. In this convention the half-complex transform of a real
+sequence is stored with frequencies in increasing order, starting at
+zero, with the real and imaginary parts of each frequency in neighboring
+locations. When a value is known to be real the imaginary part is not
+stored. The imaginary part of the zero-frequency component is never
+stored. It is known to be zero (since the zero frequency component is
+simply the sum of the input data (all real)). For a sequence of even
+length the imaginary part of the frequency @math{n/2} is not stored
+either, since the symmetry
+@c{$z_k = z_{N-k}^*$}
+@math{z_k = z_@{N-k@}^*} implies that this is
+purely real too.
+
+The storage scheme is best shown by some examples. The table below
+shows the output for an odd-length sequence, @math{n=5}. The two columns
+give the correspondence between the 5 values in the half-complex
+sequence returned by @code{gsl_fft_real_transform}, @var{halfcomplex}[] and the
+values @var{complex}[] that would be returned if the same real input
+sequence were passed to @code{gsl_fft_complex_backward} as a complex
+sequence (with imaginary parts set to @code{0}),
+
+@example
+complex[0].real = halfcomplex[0]
+complex[0].imag = 0
+complex[1].real = halfcomplex[1]
+complex[1].imag = halfcomplex[2]
+complex[2].real = halfcomplex[3]
+complex[2].imag = halfcomplex[4]
+complex[3].real = halfcomplex[3]
+complex[3].imag = -halfcomplex[4]
+complex[4].real = halfcomplex[1]
+complex[4].imag = -halfcomplex[2]
+@end example
+
+@noindent
+The upper elements of the @var{complex} array, @code{complex[3]} and
+@code{complex[4]} are filled in using the symmetry condition. The
+imaginary part of the zero-frequency term @code{complex[0].imag} is
+known to be zero by the symmetry.
+
+The next table shows the output for an even-length sequence, @math{n=6}
+In the even case there are two values which are purely real,
+
+@example
+complex[0].real = halfcomplex[0]
+complex[0].imag = 0
+complex[1].real = halfcomplex[1]
+complex[1].imag = halfcomplex[2]
+complex[2].real = halfcomplex[3]
+complex[2].imag = halfcomplex[4]
+complex[3].real = halfcomplex[5]
+complex[3].imag = 0
+complex[4].real = halfcomplex[3]
+complex[4].imag = -halfcomplex[4]
+complex[5].real = halfcomplex[1]
+complex[5].imag = -halfcomplex[2]
+@end example
+
+@noindent
+The upper elements of the @var{complex} array, @code{complex[4]} and
+@code{complex[5]} are filled in using the symmetry condition. Both
+@code{complex[0].imag} and @code{complex[3].imag} are known to be zero.
+
+All these functions are declared in the header files
+@file{gsl_fft_real.h} and @file{gsl_fft_halfcomplex.h}.
+
+@deftypefun {gsl_fft_real_wavetable *} gsl_fft_real_wavetable_alloc (size_t @var{n})
+@deftypefunx {gsl_fft_halfcomplex_wavetable *} gsl_fft_halfcomplex_wavetable_alloc (size_t @var{n})
+These functions prepare trigonometric lookup tables for an FFT of size
+@math{n} real elements. The functions return a pointer to the newly
+allocated struct if no errors were detected, and a null pointer in the
+case of error. The length @var{n} is factorized into a product of
+subtransforms, and the factors and their trigonometric coefficients are
+stored in the wavetable. The trigonometric coefficients are computed
+using direct calls to @code{sin} and @code{cos}, for accuracy.
+Recursion relations could be used to compute the lookup table faster,
+but if an application performs many FFTs of the same length then
+computing the wavetable is a one-off overhead which does not affect the
+final throughput.
+
+The wavetable structure can be used repeatedly for any transform of the
+same length. The table is not modified by calls to any of the other FFT
+functions. The appropriate type of wavetable must be used for forward
+real or inverse half-complex transforms.
+@end deftypefun
+
+@deftypefun void gsl_fft_real_wavetable_free (gsl_fft_real_wavetable * @var{wavetable})
+@deftypefunx void gsl_fft_halfcomplex_wavetable_free (gsl_fft_halfcomplex_wavetable * @var{wavetable})
+These functions free the memory associated with the wavetable
+@var{wavetable}. The wavetable can be freed if no further FFTs of the
+same length will be needed.
+@end deftypefun
+
+@noindent
+The mixed radix algorithms require additional working space to hold
+the intermediate steps of the transform,
+
+@deftypefun {gsl_fft_real_workspace *} gsl_fft_real_workspace_alloc (size_t @var{n})
+This function allocates a workspace for a real transform of length
+@var{n}. The same workspace can be used for both forward real and inverse
+halfcomplex transforms.
+@end deftypefun
+
+@deftypefun void gsl_fft_real_workspace_free (gsl_fft_real_workspace * @var{workspace})
+This function frees the memory associated with the workspace
+@var{workspace}. The workspace can be freed if no further FFTs of the
+same length will be needed.
+@end deftypefun
+
+@noindent
+The following functions compute the transforms of real and half-complex
+data,
+
+@deftypefun int gsl_fft_real_transform (double @var{data}[], size_t @var{stride}, size_t @var{n}, const gsl_fft_real_wavetable * @var{wavetable}, gsl_fft_real_workspace * @var{work})
+@deftypefunx int gsl_fft_halfcomplex_transform (double @var{data}[], size_t @var{stride}, size_t @var{n}, const gsl_fft_halfcomplex_wavetable * @var{wavetable}, gsl_fft_real_workspace * @var{work})
+These functions compute the FFT of @var{data}, a real or half-complex
+array of length @var{n}, using a mixed radix decimation-in-frequency
+algorithm. For @code{gsl_fft_real_transform} @var{data} is an array of
+time-ordered real data. For @code{gsl_fft_halfcomplex_transform}
+@var{data} contains fourier coefficients in the half-complex ordering
+described above. There is no restriction on the length @var{n}.
+Efficient modules are provided for subtransforms of length 2, 3, 4 and
+5. Any remaining factors are computed with a slow, @math{O(n^2)},
+general-n module. The caller must supply a @var{wavetable} containing
+trigonometric lookup tables and a workspace @var{work}.
+@end deftypefun
+
+@deftypefun int gsl_fft_real_unpack (const double @var{real_coefficient}[], gsl_complex_packed_array @var{complex_coefficient}, size_t @var{stride}, size_t @var{n})
+
+This function converts a single real array, @var{real_coefficient} into
+an equivalent complex array, @var{complex_coefficient}, (with imaginary
+part set to zero), suitable for @code{gsl_fft_complex} routines. The
+algorithm for the conversion is simply,
+
+@example
+for (i = 0; i < n; i++)
+ @{
+ complex_coefficient[i].real
+ = real_coefficient[i];
+ complex_coefficient[i].imag
+ = 0.0;
+ @}
+@end example
+@end deftypefun
+
+@deftypefun int gsl_fft_halfcomplex_unpack (const double @var{halfcomplex_coefficient}[], gsl_complex_packed_array @var{complex_coefficient}, size_t @var{stride}, size_t @var{n})
+
+This function converts @var{halfcomplex_coefficient}, an array of
+half-complex coefficients as returned by @code{gsl_fft_real_transform}, into an
+ordinary complex array, @var{complex_coefficient}. It fills in the
+complex array using the symmetry
+@c{$z_k = z_{N-k}^*$}
+@math{z_k = z_@{N-k@}^*}
+to reconstruct the redundant elements. The algorithm for the conversion
+is,
+
+@example
+complex_coefficient[0].real
+ = halfcomplex_coefficient[0];
+complex_coefficient[0].imag
+ = 0.0;
+
+for (i = 1; i < n - i; i++)
+ @{
+ double hc_real
+ = halfcomplex_coefficient[2 * i - 1];
+ double hc_imag
+ = halfcomplex_coefficient[2 * i];
+ complex_coefficient[i].real = hc_real;
+ complex_coefficient[i].imag = hc_imag;
+ complex_coefficient[n - i].real = hc_real;
+ complex_coefficient[n - i].imag = -hc_imag;
+ @}
+
+if (i == n - i)
+ @{
+ complex_coefficient[i].real
+ = halfcomplex_coefficient[n - 1];
+ complex_coefficient[i].imag
+ = 0.0;
+ @}
+@end example
+@end deftypefun
+
+@comment @node Example of using mixed-radix FFT routines for real data
+@comment @subsection Example of using mixed-radix FFT routines for real data
+
+Here is an example program using @code{gsl_fft_real_transform} and
+@code{gsl_fft_halfcomplex_inverse}. It generates a real signal in the
+shape of a square pulse. The pulse is fourier transformed to frequency
+space, and all but the lowest ten frequency components are removed from
+the array of fourier coefficients returned by
+@code{gsl_fft_real_transform}.
+
+The remaining fourier coefficients are transformed back to the
+time-domain, to give a filtered version of the square pulse. Since
+fourier coefficients are stored using the half-complex symmetry both
+positive and negative frequencies are removed and the final filtered
+signal is also real.
+
+@example
+@verbatiminclude examples/fftreal.c
+@end example
+
+@iftex
+@sp 1
+@center @image{fft-real-mixedradix,3.4in}
+
+@center Low-pass filtered version of a real pulse,
+@center output from the example program.
+@end iftex
+
+@node FFT References and Further Reading
+@section References and Further Reading
+
+A good starting point for learning more about the FFT is the review
+article @cite{Fast Fourier Transforms: A Tutorial Review and A State of
+the Art} by Duhamel and Vetterli,
+
+@itemize @asis
+@item
+P. Duhamel and M. Vetterli.
+Fast fourier transforms: A tutorial review and a state of the art.
+@cite{Signal Processing}, 19:259--299, 1990.
+@end itemize
+
+@noindent
+To find out about the algorithms used in the GSL routines you may want
+to consult the document @cite{GSL FFT Algorithms} (it is included
+in GSL, as @file{doc/fftalgorithms.tex}). This has general information
+on FFTs and explicit derivations of the implementation for each
+routine. There are also references to the relevant literature. For
+convenience some of the more important references are reproduced below.
+
+@noindent
+There are several introductory books on the FFT with example programs,
+such as @cite{The Fast Fourier Transform} by Brigham and @cite{DFT/FFT
+and Convolution Algorithms} by Burrus and Parks,
+
+@itemize @asis
+@item
+E. Oran Brigham.
+@cite{The Fast Fourier Transform}.
+Prentice Hall, 1974.
+
+@item
+C. S. Burrus and T. W. Parks.
+@cite{DFT/FFT and Convolution Algorithms}.
+Wiley, 1984.
+@end itemize
+
+@noindent
+Both these introductory books cover the radix-2 FFT in some detail.
+The mixed-radix algorithm at the heart of the @sc{fftpack} routines is
+reviewed in Clive Temperton's paper,
+
+@itemize @asis
+@item
+Clive Temperton.
+Self-sorting mixed-radix fast fourier transforms.
+@cite{Journal of Computational Physics}, 52(1):1--23, 1983.
+@end itemize
+
+@noindent
+The derivation of FFTs for real-valued data is explained in the
+following two articles,
+
+@itemize @asis
+@item
+Henrik V. Sorenson, Douglas L. Jones, Michael T. Heideman, and C. Sidney
+Burrus.
+Real-valued fast fourier transform algorithms.
+@cite{IEEE Transactions on Acoustics, Speech, and Signal Processing},
+ASSP-35(6):849--863, 1987.
+
+@item
+Clive Temperton.
+Fast mixed-radix real fourier transforms.
+@cite{Journal of Computational Physics}, 52:340--350, 1983.
+@end itemize
+
+@noindent
+In 1979 the IEEE published a compendium of carefully-reviewed Fortran
+FFT programs in @cite{Programs for Digital Signal Processing}. It is a
+useful reference for implementations of many different FFT
+algorithms,
+
+@itemize @asis
+@item
+Digital Signal Processing Committee and IEEE Acoustics, Speech, and Signal
+Processing Committee, editors.
+@cite{Programs for Digital Signal Processing}.
+IEEE Press, 1979.
+@end itemize
+@comment @noindent
+@comment There is also an annotated bibliography of papers on the FFT and related
+@comment topics by Burrus,
+
+@comment @itemize @asis
+@comment @item C. S. Burrus. Notes on the FFT.
+@comment @end itemize
+@comment @noindent
+@comment The notes are available from @url{http://www-dsp.rice.edu/res/fft/fftnote.asc}.
+
+@noindent
+For large-scale FFT work we recommend the use of the dedicated FFTW library
+by Frigo and Johnson. The FFTW library is self-optimizing---it
+automatically tunes itself for each hardware platform in order to
+achieve maximum performance. It is available under the GNU GPL.
+
+@itemize @asis
+@item
+FFTW Website, @uref{http://www.fftw.org/}
+@end itemize
+
+@noindent
+The source code for @sc{fftpack} is available from Netlib,
+
+@itemize @asis
+@item
+FFTPACK, @uref{http://www.netlib.org/fftpack/}
+@end itemize
+
+
diff --git a/gsl-1.9/doc/fftalgorithms.bib b/gsl-1.9/doc/fftalgorithms.bib
new file mode 100644
index 0000000..1a8506e
--- /dev/null
+++ b/gsl-1.9/doc/fftalgorithms.bib
@@ -0,0 +1,240 @@
+@string{jcp = {Journal of Computational Physics}}
+@string{assp = {IEEE Transactions on Acoustics, Speech, and Signal Processing}}
+
+
+@Article{mehalic85,
+ author = {Mehalic and Rustan and Route},
+ title = {Effects of Architecture Implementation on {DFT} Algorithm
+Performance},
+ journal = assp,
+ year = 1985,
+ volume = {ASP-33},
+ pages = {684-693}
+}
+
+@Article{temperton83,
+ author = {Clive Temperton},
+ title = {Self-Sorting Mixed-Radix Fast Fourier Transforms},
+ journal = {Journal of Computational Physics},
+ year = 1983,
+ volume = 52,
+ number = 1,
+ pages = {1-23}
+}
+
+@Article{symfft,
+ title= {Symmetric {FFT}s},
+ author= {Paul N. Swarztrauber},
+ journal= {Mathematics of Computation},
+ volume= {47},
+ number= {185},
+ pages = {323-346},
+ year = {1986}
+}
+
+@Article{temperton83real,
+ author = {Clive Temperton},
+ title = {Fast Mixed-Radix Real Fourier Transforms},
+ journal = {Journal of Computational Physics},
+ year = 1983,
+ volume = 52,
+ pages = {340-350}
+}
+
+@Article{temperton85,
+ author = {Clive Temperton},
+ title = {Implementation of a Self-Sorting In-Place Prime Factor {FFT}
+ Algorithm},
+ journal = {Journal of Computational Physics},
+ year = 1985,
+ volume = 58,
+ pages = {283-299}
+}
+
+@Article{temperton83pfa,
+ author = {Clive Temperton},
+ title = {A Note on Prime Factor {FFT} Algorithms},
+ journal = {Journal of Computational Physics},
+ year = 1983,
+ volume = 58,
+ pages = {198-204}
+}
+
+@Article{burrus87real,
+ author = {Henrik V. Sorenson and Douglas L. Jones and Michael T. Heideman and C. Sidney Burrus},
+ title = {Real-Valued Fast Fourier Transform Algorithms},
+ journal = assp,
+ year = 1987,
+ volume = {ASSP-35},
+ number = 6,
+ pages = {849-863}
+}
+
+@Article{sorenson86,
+ author = {Henrik V. Sorenson and Michael T. Heideman and C. Sidney Burrus},
+ title = {On Computing the Split-Radix {FFT} },
+ journal = assp,
+ year = 1986,
+ volume = {ASSP-34},
+ number = 1,
+ pages = {152-156}
+}
+
+@Article{duhamel86,
+ author = {Pierre Duhamel},
+ title = {Implementation of Split-Radix {FFT} Algorithms for Complex, Real, and Real-Symmetric Data},
+ journal = assp,
+ year = 1986,
+ volume = {ASSP-34},
+ number = 2,
+ pages = {285-295}
+}
+
+@Article{visscher96,
+ author = {P. B. Visscher},
+ title = {The {FFT}: Fourier Transforming One Bit at a Time},
+ journal = {Computers in Physics},
+ year = 1996,
+ volume = 10,
+ number = 5,
+ month = {Sep/Oct},
+ pages = {438-443}
+}
+
+@Article{uniyal94:_trans_real_value_sequen,
+ author = {P. R. Uniyal},
+ title = {Transforming Real-Value Sequences: Fast Fourier versus Fast Hartley Tranform Algorithms},
+ journal = {IEEE Transactions on Signal Processing},
+ year = 1994,
+ volume = 42,
+ number = 11,
+ pages = {3249-3254 }
+}
+
+
+
+@Article{duhamel90,
+ author = {P. Duhamel and M. Vetterli},
+ title = {Fast Fourier Transforms: A Tutorial Review and A State of the Art},
+ journal = {Signal Processing},
+ year = 1990,
+ volume = 19,
+ pages = {259-299}
+}
+
+@Article{rodriguez89,
+ author = {Jeffrey J. Rodriguez},
+ title = {An Improved {FFT} Digit-Reversal Algorithm},
+ journal = assp,
+ year = 1989,
+ volume = 37,
+ number = 8,
+ pages = {1298-1300}
+}
+
+@Article{rosel89,
+ author = {Petr R\"osel},
+ title = {Timing of some bit reversal algorithms},
+ journal = {Signal Processing},
+ year = 1989,
+ volume = 18,
+ pages = {425-433}
+}
+
+
+@Book{brigham74,
+ author = {E. Oran Brigham},
+ title = {The Fast Fourier Transform},
+ publisher = {Prentice Hall},
+ year = 1974,
+ isbn = {0-13-307496-X}
+}
+
+
+
+
+@Book{elliott82,
+ author = {Douglas F. Elliott and K. Ramamohan Rao},
+ title = {Fast transforms: algorithms, analyses, applications},
+ publisher = {Academic Press},
+ year = 1982,
+ note = {This book does not contain actual code, but covers the
+more advanced mathematics and number theory needed in the derivation
+of fast transforms.},
+ isbn = {0-12-237080-5}
+}
+
+@Article{raderprimes,
+ author = {Charles M. Rader},
+ title = {Discrete Fourier Transform when the number of data
+ samples is prime},
+ journal = {IEEE Proceedings},
+ year = 1968,
+ volume = 56,
+ number = 6,
+ pages = {1107-1108}
+}
+
+@Book{mcclellan79,
+ author = {James H. McClellan and Charles M. Rader},
+ title = {Number Theory in Digital Signal Processing},
+ publisher = {Prentice-Hall},
+ year = 1979,
+ isbn = {ISBN 0-13-627349-1}
+}
+
+@Book{burrus84,
+ author = {C. S. Burrus and T. W. Parks},
+ title = {DFT/FFT and Convolution Algorithms},
+ publisher = {Wiley},
+ year = 1984,
+ isbn = {0-471-81932-8}
+}
+
+
+
+@Book{smith95,
+ author = {Winthrop W. Smith and Joanne M. Smith},
+ title = {Handbook of Real-Time Fast Fourier Transforms},
+ publisher = {IEEE Press},
+ year = 1995,
+ isbn = {0-7803-1091-8}
+}
+
+
+@Book{committee79,
+ title = {Programs for Digital Signal Processing},
+ publisher = {IEEE Press},
+ year = 1979,
+ editor = {Digital Signal Processing Committee and {IEEE Acoustics,
+Speech, and Signal Processing Committee}},
+ isbn = {0-87942-127-4 (pb) 0-87942-128-2 (hb)}
+}
+
+@Book{blahut,
+ author = {Richard E. Blahut},
+ title = {Fast Algorithms for Digital Signal Processing},
+ publisher = {Addison-Wesley},
+ year = 1984,
+ isbn = {0-201-10155-6}
+}
+
+@Unpublished{burrus-note,
+ author = {C. S. Burrus},
+ title = {Notes on the {FFT}},
+ note = {Available from http://www-dsp.rice.edu/res/fft/fftnote.asc}
+}
+
+
+@Article{singleton,
+ author = {Richard C. Singleton},
+ title = {An Algorithm for Computing the Mixed Radix Fast
+ Fourier Transform},
+ journal = {IEEE Transactions on Audio and Electroacoustics},
+ year = 1969,
+ volume = {AU-17},
+ number = 2,
+ month = {June},
+ pages = {93-103}
+}
+
diff --git a/gsl-1.9/doc/fftalgorithms.tex b/gsl-1.9/doc/fftalgorithms.tex
new file mode 100644
index 0000000..4f4a725
--- /dev/null
+++ b/gsl-1.9/doc/fftalgorithms.tex
@@ -0,0 +1,3296 @@
+\documentclass[fleqn,12pt]{article}
+%
+\setlength{\oddsidemargin}{-0.25in}
+\setlength{\textwidth}{7.0in}
+\setlength{\topmargin}{-0.25in}
+\setlength{\textheight}{9.5in}
+%
+\usepackage{algorithmic}
+\newenvironment{algorithm}{\begin{quote} %\vspace{1em}
+\begin{algorithmic}\samepage}{\end{algorithmic} %\vspace{1em}
+\end{quote}}
+\newcommand{\Real}{\mathop{\mathrm{Re}}}
+\newcommand{\Imag}{\mathop{\mathrm{Im}}}
+
+\begin{document}
+\title{FFT Algorithms}
+\author{Brian Gough, {\tt bjg@network-theory.co.uk}}
+\date{May 1997}
+\maketitle
+
+\section{Introduction}
+
+Fast Fourier Transforms (FFTs) are efficient algorithms for
+calculating the discrete fourier transform (DFT),
+%
+\begin{eqnarray}
+h_a &=& \mathrm{DFT}(g_b) \\
+ &=& \sum_{b=0}^{N-1} g_b \exp(-2\pi i a b /N) \qquad 0 \leq a \leq N-1\\
+ &=& \sum_{b=0}^{N-1} g_b W_N^{ab} \qquad W_N= \exp(-2\pi i/N)
+\end{eqnarray}
+%
+The DFT usually arises as an approximation to the continuous fourier
+transform when functions are sampled at discrete intervals in space or
+time. The naive evaluation of the discrete fourier transform is a
+matrix-vector multiplication ${\mathbf W}\vec{g}$, and would take
+$O(N^2)$ operations for $N$ data-points. The general principle of the
+Fast Fourier Transform algorithms is to use a divide-and-conquer
+strategy to factorize the matrix $W$ into smaller sub-matrices,
+typically reducing the operation count to $O(N \sum f_i)$ if $N$ can
+be factorized into smaller integers, $N=f_1 f_2 \dots f_n$.
+
+This chapter explains the algorithms used in the GSL FFT routines
+and provides some information on how to extend them. To learn more about
+the FFT you should read the review article {\em Fast Fourier
+Transforms: A Tutorial Review and A State of the Art} by Duhamel and
+Vetterli~\cite{duhamel90}. There are several introductory books on the
+FFT with example programs, such as {\em The Fast Fourier Transform} by
+Brigham~\cite{brigham74} and {\em DFT/FFT and Convolution Algorithms}
+by Burrus and Parks~\cite{burrus84}. In 1979 the IEEE published a
+compendium of carefully-reviewed Fortran FFT programs in {\em Programs
+for Digital Signal Processing}~\cite{committee79} which is a useful
+reference for implementations of many different FFT algorithms. If you
+are interested in using DSPs then the {\em Handbook of Real-Time Fast
+Fourier Transforms}~\cite{smith95} provides detailed information on
+the algorithms and hardware needed to design, build and test DSP
+applications. Many FFT algorithms rely on results from number theory.
+These results are covered in the books {\em Fast transforms:
+algorithms, analyses, applications}, by Elliott and
+Rao~\cite{elliott82}, {\em Fast Algorithms for Digital Signal
+Processing} by Blahut~\cite{blahut} and {\em Number Theory in Digital
+Signal Processing} by McClellan and Rader~\cite{mcclellan79}. There is
+also an annotated bibliography of papers on the FFT and related topics
+by Burrus~\cite{burrus-note}.
+
+\section{Families of FFT algorithms}
+%
+There are two main families of FFT algorithms: the Cooley-Tukey
+algorithm and the Prime Factor algorithm. These differ in the way they
+map the full FFT into smaller sub-transforms. Of the Cooley-Tukey
+algorithms there are two types of routine in common use: mixed-radix
+(general-$N$) algorithms and radix-2 (power of 2) algorithms. Each
+type of algorithm can be further classified by additional characteristics,
+such as whether it operates in-place or uses additional scratch space,
+whether its output is in a sorted or scrambled order, and whether it
+uses decimation-in-time or -frequency iterations.
+
+Mixed-radix algorithms work by factorizing the data vector into
+shorter lengths. These can then be transformed by small-$N$ FFTs.
+Typical programs include FFTs for small prime factors, such as 2, 3,
+5, \dots which are highly optimized. The small-$N$ FFT modules act as
+building blocks and can be multiplied together to make longer
+transforms. By combining a reasonable set of modules it is possible to
+compute FFTs of many different lengths. If the small-$N$ modules are
+supplemented by an $O(N^2)$ general-$N$ module then an FFT of any
+length can be computed, in principle. Of course, any lengths which
+contain large prime factors would perform only as $O(N^2)$.
+
+Radix-2 algorithms, or ``power of two'' algorithms, are simplified
+versions of the mixed-radix algorithm. They are restricted to lengths
+which are a power of two. The basic radix-2 FFT module only involves
+addition and subtraction, so the algorithms are very simple. Radix-2
+algorithms have been the subject of much research into optimizing the
+FFT. Many of the most efficient radix-2 routines are based on the
+``split-radix'' algorithm. This is actually a hybrid which combines
+the best parts of both radix-2 and radix-4 (``power of 4'')
+algorithms~\cite{sorenson86,duhamel86}.
+
+The prime factor algorithm (PFA) is an alternative form of general-$N$
+algorithm based on a different way of recombining small-$N$ FFT
+modules~\cite{temperton83pfa,temperton85}. It has a very simple indexing
+scheme which makes it attractive. However it only works in the case
+where all factors are mutually prime. This requirement makes it more
+suitable as a specialized algorithm for given lengths.
+
+
+\begin{subsection}{FFTs of prime lengths}
+%
+ Large prime lengths cannot be handled efficiently by any of these
+algorithms. However it may still possible to compute a DFT, by using
+results from number theory. Rader showed that it is possible to
+convert a length-$p$ FFT (where $p$ is prime) into a convolution of
+length-($p-1$). There is a simple identity between the convolution of
+length $N$ and the FFT of the same length, so if $p-1$ is easily
+factorizable this allows the convolution to be computed efficiently
+via the FFT. The idea is presented in the original paper by
+Rader~\cite{raderprimes} (also reprinted in~\cite{mcclellan79}), but
+for more details see the theoretical books mentioned earlier.
+\end{subsection}
+
+%\subsection{In-place algorithms vs algorithms using scratch space}
+%%
+%For simple algorithms, such as the Radix-2 algorithms, the FFT can be
+%performed in-place, without additional memory. For this to be possible
+%the index calculations must be simple enough that the calculation of
+%the result to be stored in index $k$ can be carried out at the same
+%time as the data in $k$ is used, so that no temporary storage is
+%needed.
+
+%The mixed-radix algorithm is too complicated for this. It requires an
+%area of scratch space sufficient to hold intermediate copies of the
+%input data.
+
+%\subsection{Self-sorting algorithms vs scrambling algorithms}
+%%
+%A self-sorting algorithm At each iteration of the FFT internal permutations are included
+%which leave the final iteration in its natural order.
+
+
+%The mixed-radix algorithm can be made self-sorting. The additional
+%scratch space helps here, although it is in fact possible to design
+%self-sorting algorithms which do not require scratch
+%space.
+
+
+%The in-place radix-2 algorithm is not self-sorting. The data is
+%permuted, and transformed into bit-reversed order. Note that
+%bit-reversal only refers to the order of the array, not the values for
+%each index which are of course not changed. More precisely, the data
+%stored in location $[b_n \dots b_2 b_1 b_0]$ is moved to location
+%$[b_0 b_1 b_2 \dots b_n]$, where $b_0 \dots b_n$ are the raw bits of a
+%given index. Placing the data in bit reversed order is easily done,
+%using right shifts to extract the least significant bits of the index
+%and left-shifts to feed them into a register for the bit-reversed
+%location. Simple radix-2 FFT usually recompute the bit reverse
+%ordering in the naive way for every call. For repeated calls it might
+%be worthwhile to precompute the permutation and cache it. There are
+%also more sophisticated algorithms which reduce the number of
+%operations needed to perform bit-reversal~\cite{bit-reversal}.
+
+
+%\begin{subsection}{Decimation-in-time (DIT) vs Decimation-in-Frequency (DIF)}
+
+%\end{subsection}
+
+
+\subsection{Optimization}
+%
+There is no such thing as the single fastest FFT {\em algorithm}. FFT
+algorithms involve a mixture of floating point calculations, integer
+arithmetic and memory access. Each of these operations will have
+different relative speeds on different platforms. The performance of
+an algorithm is a function of the hardware it is implemented on. The
+goal of optimization is thus to choose the algorithm best suited to
+the characteristics of a given hardware platform.
+
+For example, the Winograd Fourier Transform (WFTA) is an algorithm
+which is designed to reduce the number of floating point
+multiplications in the FFT. However, it does this at the expense of
+using many more additions and data transfers than other algorithms.
+As a consequence the WFTA might be a good candidate algorithm for
+machines where data transfers occupy a negligible time relative to
+floating point arithmetic. However on most modern machines, where the
+speed of data transfers is comparable to or slower than floating point
+operations, it would be outperformed by an algorithm which used a
+better mix of operations (i.e. more floating point operations but
+fewer data transfers).
+
+For a study of this sort of effect in detail, comparing the different
+algorithms on different platforms consult the paper {\it Effects of
+Architecture Implementation on DFT Algorithm Performance} by Mehalic,
+Rustan and Route~\cite{mehalic85}. The paper was written in the early
+1980's and has data for super- and mini-computers which you are
+unlikely to see today, except in a museum. However, the methodology is
+still valid and it would be interesting to see similar results for
+present day computers.
+
+
+\section{FFT Concepts}
+%
+Factorization is the key principle of the mixed-radix FFT divide-and-conquer
+strategy. If $N$ can be factorized into a product of $n_f$ integers,
+%
+\begin{equation}
+N = f_1 f_2 ... f_{n_f} ,
+\end{equation}
+%
+then the FFT itself can be divided into smaller FFTs for each factor.
+More precisely, an FFT of length $N$ can be broken up into,
+%
+\begin{quote}
+\begin{tabular}{l}
+$(N/f_1)$ FFTs of length $f_1$, \\
+$(N/f_2)$ FFTs of length $f_2$, \\
+\dots \\
+$(N/f_{n_f})$ FFTs of length $f_{n_f}$.
+\end{tabular}
+\end{quote}
+%
+The total number of operations for these sub-operations will be $O(
+N(f_1 + f_2 + ... + f_{n_f}))$. When the factors of $N$ are all small
+integers this will be substantially less than $O(N^2)$. For example,
+when $N$ is a power of 2 an FFT of length $N=2^m$ can be reduced to $m
+N/2$ FFTs of length 2, or $O(N\log_2 N)$ operations. Here is a
+demonstration which shows this:
+
+We start with the full DFT,
+%
+\begin{eqnarray}
+h_a &=& \sum_{b=0}^{N-1} g_b W_N^{ab} \qquad W_N=\exp(-2\pi i/N)
+\end{eqnarray}
+%
+and split the sum into even and odd terms,
+%
+\begin{eqnarray}
+\phantom{h_a}
+% &=& \left(\sum_{b=0,2,4,\dots} + \sum_{b=1,3,5,\dots}\right) g_b W_N^{ab}\\
+ &=& \sum_{b=0}^{N/2-1} g_{2b} W_N^{a(2b)} +
+ \sum_{b=0}^{N/2-1} g_{2b+1} W_N^{a(2b+1)}.
+\end{eqnarray}
+%
+This converts the original DFT of length $N$ into two DFTs of length
+$N/2$,
+%
+\begin{equation}
+h_a = \sum_{b=0}^{N/2-1} g_{2b} W_{(N/2)}^{ab} +
+ W_N^a \sum_{b=0}^{N/2-1} g_{2b+1} W_{(N/2)}^{ab}
+\end{equation}
+%
+The first term is a DFT of the even elements of $g$. The second term
+is a DFT of the odd elements of $g$, premultiplied by an exponential
+factor $W_N^k$ (known as a {\em twiddle factor}).
+%
+\begin{equation}
+\mathrm{DFT}(h) = \mathrm{DFT}(g_{even}) + W_N^k \mathrm{DFT}(g_{odd})
+\end{equation}
+%
+By splitting the DFT into its even and odd parts we have reduced the
+operation count from $N^2$ (for a DFT of length $N$) to $2 (N/2)^2$
+(for two DFTs of length $N/2$). The cost of the splitting is that we
+need an additional $O(N)$ operations to multiply by the twiddle factor
+$W_N^k$ and recombine the two sums.
+
+We can repeat the splitting procedure recursively $\log_2 N$ times
+until the full DFT is reduced to DFTs of single terms. The DFT of a
+single value is just the identity operation, which costs nothing.
+However since $O(N)$ operations were needed at each stage to recombine
+the even and odd parts the total number of operations to obtain the
+full DFT is $O(N \log_2 N)$. If we had used a length which was a
+product of factors $f_1$, $f_2$, $\dots$ we could have split the sum
+in a similar way. First we would split terms corresponding to the
+factor $f_1$, instead of the even and odd terms corresponding to a
+factor of two. Then we would repeat this procedure for the subsequent
+factors. This would lead to a final operation count of $O(N \sum
+f_i)$.
+
+This procedure gives some motivation for why the number of operations
+in a DFT can in principle be reduced from $O(N^2)$ to $O(N \sum f_i)$.
+It does not give a good explanation of how to implement the algorithm
+in practice which is what we shall do in the next section.
+
+\section{Radix-2 Algorithms}
+%
+For radix-2 FFTs it is natural to write array indices in binary form
+because the length of the data is a power of two. This is nicely
+explained in the article {\em The FFT: Fourier Transforming One Bit at
+a Time} by P.B. Visscher~\cite{visscher96}. A binary representation
+for indices is the key to deriving the simplest efficient radix-2
+algorithms.
+
+We can write an index $b$ ($0 \leq b < 2^{n-1}$) in binary
+representation like this,
+%
+\begin{equation}
+b = [b_{n-1} \dots b_1 b_0] = 2^{n-1}b_{n-1} + \dots + 2 b_1 + b_0 .
+\end{equation}
+%
+Each of the $b_0, b_1, \dots, b_{n-1}$ are the bits (either 0 or 1) of
+$b$.
+
+Using this notation the original definition of the DFT
+can be rewritten as a sum over the bits of $b$,
+%
+\begin{equation}
+h(a) = \sum_{b=0}^{N-1} g_b \exp(-2\pi i a b /N)
+\end{equation}
+%
+to give an equivalent summation like this,
+%
+\begin{equation}
+h([a_{n-1} \dots a_1 a_0]) =
+\sum_{b_0=0}^{1}
+\sum_{b_1=0}^{1}
+\dots
+\sum_{b_{n-1}=0}^{1}
+ g([b_{n-1} \dots b_1 b_0]) W_N^{ab}
+\end{equation}
+%
+where the bits of $a$ are $a=[a_{n-1} \dots a_1 a_0]$.
+
+To reduce the number of operations in the sum we will use the
+periodicity of the exponential term,
+%
+\begin{equation}
+W_N^{x+N} = W_N^{x}.
+\end{equation}
+%
+Most of the products $ab$ in $W_N^{ab}$ are greater than $N$. By
+making use of this periodicity they can all be collapsed down into the
+range $0\dots N-1$. This allows us to reduce the number of operations
+by combining common terms, modulo $N$. Using this idea we can derive
+decimation-in-time or decimation-in-frequency algorithms, depending on
+how we break the DFT summation down into common terms. We'll first
+consider the decimation-in-time algorithm.
+
+\subsection{Radix-2 Decimation-in-Time (DIT)}
+%
+To derive the the decimation-in-time algorithm we start by separating
+out the most significant bit of the index $b$,
+%
+\begin{equation}
+[b_{n-1} \dots b_1 b_0] = 2^{n-1}b_{n-1} + [b_{n-2} \dots b_1 b_0]
+\end{equation}
+%
+Now we can evaluate the innermost sum of the DFT without any
+dependence on the remaining bits of $b$ in the exponential,
+%
+\begin{eqnarray}
+h([a_{n-1} \dots a_1 a_0]) &=&
+\sum_{b_0=0}^{1}
+\sum_{b_1=0}^{1}
+\dots
+\sum_{b_{n-1}=0}^{1}
+ g(b)
+W_N^{a(2^{n-1}b_{n-1}+[b_{n-2} \dots b_1 b_0])} \\
+ &=&
+\sum_{b_0=0}^{1}
+\sum_{b_1=0}^{1}
+\dots
+\sum_{b_{n-2}=0}^{1}
+W_N^{a[b_{n-2} \dots b_1 b_0]}
+\sum_{b_{n-1}=0}^{1}
+ g(b)
+W_N^{a(2^{n-1}b_{n-1})}
+\end{eqnarray}
+%
+Looking at the term $W_N^{a(2^{n-1}b_{n-1})}$ we see that we can also
+remove most of the dependence on $a$ as well, by using the periodicity of the
+exponential,
+%
+\begin{eqnarray}
+W_N^{a(2^{n-1}b_{n-1})} &=&
+\exp(-2\pi i [a_{n-1} \dots a_1 a_0] 2^{n-1} b_{n-1}/ 2^n )\\
+&=& \exp(-2\pi i [a_{n-1} \dots a_1 a_0] b_{n-1}/ 2 )\\
+&=& \exp(-2\pi i ( 2^{n-2}a_{n-1} + \dots + a_1 + (a_0/2)) b_{n-1} )\\
+&=& \exp(-2\pi i a_0 b_{n-1}/2 ) \\
+&=& W_2^{a_0 b_{n-1}}
+\end{eqnarray}
+%
+Thus the innermost exponential term simplifies so that it only
+involves the highest order bit of $b$ and the lowest order bit of $a$,
+and the sum can be reduced to,
+%
+\begin{equation}
+h([a_{n-1} \dots a_1 a_0])
+=
+\sum_{b_0=0}^{1}
+\sum_{b_1=0}^{1}
+\dots
+\sum_{b_{n-2}=0}^{1}
+W_N^{a[b_{n-2} \dots b_1 b_0]}
+\sum_{b_{n-1}=0}^{1}
+ g(b)
+W_2^{a_0 b_{n-1}}.
+\end{equation}
+%
+We can repeat this this procedure for the next most significant bit of
+$b$, $b_{n-2}$, using a similar identity,
+%
+\begin{eqnarray}
+W_N^{a(2^{n-2}b_{n-2})}
+&=& \exp(-2\pi i [a_{n-1} \dots a_1 a_0] 2^{n-2} b_{n-2}/ 2^n )\\
+&=& W_4^{ [a_1 a_0] b_{n-2}}.
+\end{eqnarray}
+%
+to give a formula with even less dependence on the bits of $a$,
+%
+\begin{equation}
+h([a_{n-1} \dots a_1 a_0])
+=
+\sum_{b_0=0}^{1}
+\sum_{b_1=0}^{1}
+\dots
+\sum_{b_{n-3}=0}^{1}
+W_N^{a[b_{n-3} \dots b_1 b_0]}
+\sum_{b_{n-2}=0}^{1}
+W_4^{[a_1 a_0] b_{n-2}}
+\sum_{b_{n-1}=0}^{1}
+ g(b)
+W_2^{a_0 b_{n-1}}.
+\end{equation}
+%
+If we repeat the process for all the remaining bits we obtain a
+simplified DFT formula which is the basis of the radix-2
+decimation-in-time algorithm,
+%
+\begin{eqnarray}
+h([a_{n-1} \dots a_1 a_0]) &=&
+\sum_{b_0=0}^{1}
+W_{N}^{[a_{n-1} \dots a_1 a_0]b_0}
+%\sum_{b_1=0}^{1}
+%W_{N/2}^{[a_{n-1} \dots a_1 a_0]b_1}
+\dots
+\sum_{b_{n-2}=0}^{1}
+W_4^{ [a_1 a_0] b_{n-2}}
+\sum_{b_{n-1}=0}^{1}
+W_2^{a_0 b_{n-1}}
+g(b)
+\end{eqnarray}
+%
+To convert the formula to an algorithm we expand out the sum
+recursively, evaluating each of the intermediate summations, which we
+denote by $g_1$, $g_2$, \dots, $g_n$,
+%
+\begin{eqnarray}
+g_1(a_0, b_{n-2}, b_{n-3}, \dots, b_1, b_0)
+&=&
+\sum_{b_{n-1}=0}^{1}
+W_2^{a_0 b_{n-1}}
+g([b_{n-1} b_{n-2} b_{n-3} \dots b_1 b_0]) \\
+g_2(a_0, {}_{\phantom{-2}} a_{1}, b_{n-3}, \dots, b_1, b_0)
+&=&
+\sum_{b_{n-2}=0}^{1}
+W_4^{[a_1 a_0] b_{n-2}}
+g_1(a_0, b_{n-2}, b_{n-3}, \dots, b_1, b_0) \\
+g_3(a_0, {}_{\phantom{-2}} a_{1}, {}_{\phantom{-3}} a_{2}, \dots, b_1, b_0)
+&=&
+\sum_{b_{n-3}=0}^{1}
+W_8^{[a_2 a_1 a_0] b_{n-2}}
+g_2(a_0, a_1, b_{n-3}, \dots, b_1, b_0) \\
+\dots &=& \dots \\
+g_n(a_0, a_{1}, a_{2}, \dots, a_{n-2}, a_{n-1})
+&=&
+\sum_{b_{0}=0}^{1}
+W_N^{[a_{n-1} \dots a_1 a_0]b_0}
+g_{n-1}(a_0, a_1, a_2, \dots, a_{n-2}, b_0)
+\end{eqnarray}
+%
+After the final sum, we can obtain the transform $h$ from $g_n$,
+%
+\begin{equation}
+h([a_{n-1} \dots a_1 a_0])
+=
+g_n(a_0, a_1, \dots, a_{n-1})
+\end{equation}
+%
+Note that we left the storage arrangements of the intermediate sums
+unspecified by using the bits as function arguments and not as an
+index. The storage of intermediate sums is different for the
+decimation-in-time and decimation-in-frequency algorithms.
+
+Before deciding on the best storage scheme we'll show that the results
+of each stage, $g_1$, $g_2$, \dots, can be carried out {\em
+in-place}. For example, in the case of $g_1$, the inputs are,
+%
+\begin{equation}
+g([\underline{b_{n-1}} b_{n-2} b_{n-3} \dots b_1 b_0])
+\end{equation}
+%
+for $b_{n-1}=(0,1)$, and the corresponding outputs are,
+%
+\begin{equation}
+g_1(\underline{a_0},b_{n-2}, b_{n-3}, \dots, b_1, b_0)
+\end{equation}
+%
+for $a_0=(0,1)$. It's clear that if we hold $b_{n-2}, b_{n-3}, \dots,
+b_1, b_0$ fixed and compute the sum over $b_{n-1}$ in memory for both
+values of $a_0 = 0,1$ then we can store the result for $a_0=0$ in the
+location which originally had $b_0=0$ and the result for $a_0=1$ in
+the location which originally had $b_0=1$. The two inputs and two
+outputs are known as {\em dual node pairs}. At each stage of the
+calculation the sums for each dual node pair are independent of the
+others. It is this property which allows an in-place calculation.
+
+So for an in-place pass our storage has to be arranged so that the two
+outputs $g_1(a_0,\dots)$ overwrite the two input terms
+$g([b_{n-1},\dots])$. Note that the order of $a$ is reversed from the
+natural order of $b$. i.e. the least significant bit of $a$
+replaces the most significant bit of $b$. This is inconvenient
+because $a$ occurs in its natural order in all the exponentials,
+$W^{ab}$. We could keep track of both $a$ and its bit-reverse,
+$a^{\mathit bit-reversed}$ at all times but there is a neat trick
+which avoids this: if we bit-reverse the order of the input data $g$
+before we start the calculation we can also bit-reverse the order of
+$a$ when storing intermediate results. Since the storage involving $a$
+was originally in bit-reversed order the switch in the input $g$ now
+allows us to use normal ordered storage for $a$, the same ordering
+that occurs in the exponential factors.
+
+This is complicated to explain, so here is an example of the 4 passes
+needed for an $N=16$ decimation-in-time FFT, with the initial data
+stored in bit-reversed order,
+%
+\begin{eqnarray}
+g_1([b_0 b_1 b_2 a_0])
+&=&
+\sum_{b_3=0}^{1} W_2^{a_0 b_3} g([b_0 b_1 b_2 b_3])
+\\
+g_2([b_0 b_1 a_1 a_0])
+&=&
+\sum_{b_2=0}^{1} W_4^{[a_1 a_0] b_2} g_1([b_0 b_1 b_2 a_0])
+\\
+g_3([b_0 a_2 a_1 a_0])
+&=&
+\sum_{b_1=0}^{1} W_8^{[a_2 a_1 a_0] b_1} g_2([b_0 b_1 a_1 a_0])
+\\
+h(a) = g_4([a_3 a_2 a_1 a_0])
+&=&
+\sum_{b_0=0}^{1} W_{16}^{[a_3 a_2 a_1 a_0] b_0} g_3([b_0 a_2 a_1 a_0])
+\end{eqnarray}
+%
+We compensate for the bit reversal of the input data by accessing $g$
+with the bit-reversed form of $b$ in the first stage. This ensures
+that we are still carrying out the same calculation, using the same
+data, and not accessing different values. Only single bits of $b$ ever
+occur in the exponential so we never need the bit-reversed form of
+$b$.
+
+Let's examine the third pass in detail,
+%
+\begin{equation}
+g_3([b_0 a_2 a_1 a_0])
+=
+\sum_{b_1=0}^{1} W_8^{[a_2 a_1 a_0] b_1} g_2([b_0 b_1 a_1 a_0])
+\end{equation}
+%
+First note that only one bit, $b_1$, varies in each summation. The
+other bits of $b$ ($b_0$) and of $a$ ($a_1 a_0$) are essentially
+``spectators'' -- we must loop over all combinations of these bits and
+carry out the same basic calculation for each, remembering to update
+the exponentials involving $W_8$ appropriately. If we are storing the
+results in-place (with $g_3$ overwriting $g_2$ we will need to compute
+the sums involving $b_1=0,1$ and $a_2=0,1$ simultaneously.
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g_3([b_0 0 a_1 a_0]) \vphantom{W_8^{[]}} \\
+g_3([b_0 1 a_1 a_0]) \vphantom{W_8^{[]}}
+\end{array}
+\right)
+=
+\left(
+\begin{array}{c}
+g_2([b_0 0 a_1 a_0]) + W_8^{[0 a_1 a_0]} g_2([b_2 1 a_1 a_0]) \\
+g_2([b_0 0 a_1 a_0]) + W_8^{[1 a_1 a_0]} g_2([b_2 1 a_1 a_0])
+\end{array}
+\right)
+\end{equation}
+%
+We can write this in a more symmetric form by simplifying the exponential,
+%
+\begin{equation}
+W_8^{[a_2 a_1 a_0]}
+= W_8^{4 a_2 + [a_1 a_0]}
+= (-1)^{a_2} W_8^{[a_1 a_0]}
+\end{equation}
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g_3([b_0 0 a_1 a_0]) \vphantom{W_8^{[]}} \\
+g_3([b_0 1 a_1 a_0]) \vphantom{W_8^{[]}}
+\end{array}
+\right)
+=
+\left(
+\begin{array}{c}
+g_2([b_0 0 a_1 a_0]) + W_8^{[a_1 a_0]} g_2([b_2 1 a_1 a_0]) \\
+g_2([b_0 0 a_1 a_0]) - W_8^{[a_1 a_0]} g_2([b_2 1 a_1 a_0])
+\end{array}
+\right)
+\end{equation}
+%
+The exponentials $W_8^{[a_1 a_0]}$ are referred to as {\em twiddle
+factors}. The form of this calculation, a symmetrical sum and
+difference involving a twiddle factor is called {\em a butterfly}.
+It is often shown diagrammatically, and in the case $b_0=a_0=a_1=0$
+would be drawn like this,
+%
+\begin{center}
+\setlength{\unitlength}{1cm}
+\begin{picture}(9,4)
+%
+%\put(0,0){\line(1,0){8}}
+%\put(0,0){\line(0,1){4}}
+%\put(8,4){\line(0,-1){4}}
+%\put(8,4){\line(-1,0){8}}
+%
+\put(0,1){$g_2(4)$} \put(4.5,1){$g_3(4)=g_2(0) - W^a_8 g_2(4)$}
+\put(0,3){$g_2(0)$} \put(4.5,3){$g_3(0)=g_2(0) + W^a_8 g_2(4)$}
+\put(1,1){\vector(1,0){0.5}}
+\put(1.5,1){\line(1,0){0.5}}
+\put(1.5,0.5){$W^a_8$}
+\put(1,3){\vector(1,0){0.5}}\put(1.5,3){\line(1,0){0.5}}
+\put(2,1){\circle*{0.1}}
+\put(2,3){\circle*{0.1}}
+\put(2,1){\vector(1,1){2}}
+\put(2,1){\vector(1,0){1}}
+\put(3,1){\line(1,0){1}}
+\put(3,0.5){$-1$}
+\put(2,3){\vector(1,-1){2}}
+\put(2,3){\vector(1,0){1}}
+\put(3,3){\line(1,0){1}}
+\put(4,1){\circle*{0.1}}
+\put(4,3){\circle*{0.1}}
+\end{picture}
+\end{center}
+%
+The inputs are shown on the left and the outputs on the right. The
+outputs are computed by multiplying the incoming lines by their
+accompanying factors (shown next to the lines) and summing the results
+at each node.
+
+In general, denoting the bit for dual-node pairs by $\Delta$ and the
+remaining bits of $a$ and $b$ by ${\hat a}$ and ${\hat b}$, the
+butterfly is,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g({\hat b} + {\hat a}) \\
+g({\hat b} + \Delta + {\hat a}) \\
+\end{array}
+\right)
+\leftarrow
+\left(
+\begin{array}{c}
+g({\hat b} + {\hat a}) + W_{2\Delta}^{\hat a} g({\hat b} + \Delta + {\hat a})\\
+g({\hat b} + {\hat a}) - W_{2\Delta}^{\hat a} g({\hat b} + \Delta + {\hat a})
+\end{array}
+\right)
+\end{equation}
+%
+where ${\hat a}$ runs from $0 \dots \Delta-1$ and ${\hat b}$ runs
+through $0 \times 2\Delta$, $1\times 2\Delta$, $\dots$, $(N/\Delta -
+1)2\Delta$. The value of $\Delta$ is 1 on the first pass, 2 on the
+second pass and $2^{n-1}$ on the $n$-th pass. Each pass requires
+$N/2$ in-place computations, each involving two input locations and
+two output locations.
+
+In the example above $\Delta = [100] = 4$, ${\hat a} = [a_1 a_0]$ and
+${\hat b} = [b_0 0 0 0]$.
+
+This leads to the canonical radix-2 decimation-in-time FFT algorithm
+for $2^n$ data points stored in the array $g(0) \dots g(2^n-1)$.
+%
+\begin{algorithm}
+\STATE bit-reverse ordering of $g$
+\STATE {$\Delta \Leftarrow 1$}
+\FOR {$\mbox{pass} = 1 \dots n$}
+ \STATE {$W \Leftarrow \exp(-2 \pi i / 2\Delta)$}
+ \FOR {$(a = 0 ; a < \Delta ; a{++})$}
+ \FOR{$(b = 0 ; b < N ; b {+=} 2*\Delta)$}
+ \STATE{$t_0 \Leftarrow g(b+a) + W^a g(b+\Delta+a)$}
+ \STATE{$t_1 \Leftarrow g(b+a) - W^a g(b+\Delta+a)$}
+ \STATE{$g(b+a) \Leftarrow t_0$}
+ \STATE{$g(b+\Delta+a) \Leftarrow t_1$}
+ \ENDFOR
+ \ENDFOR
+ \STATE{$\Delta \Leftarrow 2\Delta$}
+\ENDFOR
+\end{algorithm}
+%
+%This algorithm appears in Numerical Recipes as the routine {\tt
+%four1}, where the implementation is attributed to N.M. Brenner.
+%
+\subsection{Details of the Implementation}
+It is straightforward to implement a simple radix-2 decimation-in-time
+routine from the algorithm above. Some optimizations can be made by
+pulling the special case of $a=0$ out of the loop over $a$, to avoid
+unnecessary multiplications when $W^a=1$,
+%
+\begin{algorithm}
+ \FOR{$(b = 0 ; b < N ; b {+=} 2*\Delta)$}
+ \STATE{$t_0 \Leftarrow g(b) + g(b+\Delta)$}
+ \STATE{$t_1 \Leftarrow g(b) - g(b+\Delta)$}
+ \STATE{$g(b) \Leftarrow t_0$}
+ \STATE{$g(b+\Delta) \Leftarrow t_1$}
+ \ENDFOR
+\end{algorithm}
+%
+There are several algorithms for doing fast bit-reversal. We use the
+Gold-Rader algorithm, which is simple and does not require any working
+space,
+%
+\begin{algorithm}
+\FOR{$i = 0 \dots n - 2$}
+ \STATE {$ k = n / 2 $}
+ \IF {$i < j$}
+ \STATE {swap $g(i)$ and $g(j)$}
+ \ENDIF
+
+ \WHILE {$k \leq j$}
+ \STATE{$j \Leftarrow j - k$}
+ \STATE{$k \Leftarrow k / 2$}
+ \ENDWHILE
+
+ \STATE{$j \Leftarrow j + k$}
+\ENDFOR
+\end{algorithm}
+%
+The Gold-Rader algorithm is typically twice as fast as a naive
+bit-reversal algorithm (where the bit reversal is carried out by
+left-shifts and right-shifts on the index). The library also has a
+routine for the Rodriguez bit reversal algorithm, which also does not
+require any working space~\cite{rodriguez89}. There are faster bit
+reversal algorithms, but they all use additional scratch
+space~\cite{rosel89}.
+
+Within the loop for $a$ we can compute $W^a$ using a trigonometric
+recursion relation,
+%
+\begin{eqnarray}
+W^{a+1} &=& W W^a \\
+ &=& (\cos(2\pi/2\Delta) + i \sin(2\pi/2\Delta)) W^a
+\end{eqnarray}
+%
+This requires only $2 \log_2 N$ trigonometric calls, to compute the
+initial values of $\exp(2\pi i /2\Delta)$ for each pass.
+
+\subsection{Radix-2 Decimation-in-Frequency (DIF)}
+%
+To derive the decimation-in-frequency algorithm we start by separating
+out the lowest order bit of the index $a$. Here is an example for the
+decimation-in-frequency $N=16$ DFT.
+%
+\begin{eqnarray}
+W_{16}^{[a_3 a_2 a_1 a_0][b_3 b_2 b_1 b_0]}
+&=&
+W_{16}^{[a_3 a_2 a_1 a_0][b_2 b_1 b_0]} W_{16}^{[a_3 a_2 a_1 a_0] [b_3
+0 0 0]} \\
+&=&
+W_8^{[a_3 a_2 a_1][b_2 b_1 b_0]} W_{16}^{a_0 [b_2 b_1 b_0]} W_2^{a_0
+b_3} \\
+&=&
+W_8^{[a_3 a_2 a_1][b_2 b_1 b_0]} W_{16}^{a_0 [b_2 b_1 b_0]} (-1)^{a_0 b_3}
+\end{eqnarray}
+%
+By repeating the same type of the expansion on the term,
+%
+\begin{equation}
+W_8^{[a_3 a_2 a_1][b_2 b_1 b_0]}
+\end{equation}
+%
+we can reduce the transform to an alternative simple form,
+%
+\begin{equation}
+h(a) =
+\sum_{b_0=0}^1 (-1)^{a_3 b_0} W_4^{a_2 b_0}
+\sum_{b_1=0}^1 (-1)^{a_2 b_1} W_8^{a_1 [b_1 b_0]}
+\sum_{b_2=0}^1 (-1)^{a_1 b_2} W_{16}^{a_0 [b_2 b_1 b_0]}
+\sum_{b_3=0}^1 (-1)^{a_0 b_3} g(b)
+\end{equation}
+%
+To implement this we can again write the sum recursively. In this case
+we do not have the problem of the order of $a$ being bit reversed --
+the calculation can be done in-place using the natural ordering of
+$a$ and $b$,
+%
+\begin{eqnarray}
+g_1([a_0 b_2 b_1 b_0])
+&=&
+W_{16}^{a_0 [b_2 b_1 b_0]}
+\sum_{b_3=0}^1 (-1)^{a_0 b_3} g([b_3 b_2 b_1 b_0]) \\
+g_2([a_0 a_1 b_1 b_0])
+&=&
+W_{8}^{a_1 [b_1 b_0]}
+\sum_{b_2=0}^1 (-1)^{a_1 b_2} g_1([a_0 b_2 b_1 b_0]) \\
+g_3([a_0 a_1 a_2 b_0])
+&=&
+W_{4}^{a_2 b_0}
+\sum_{b_1=0}^1 (-1)^{a_2 b_1} g_2([a_0 a_1 b_1 b_0]) \\
+h(a)
+=
+g_4([a_0 a_1 a_2 a_3])
+&=&
+\sum_{b_0=0}^1 (-1)^{a_3 b_0} g_3([a_0 a_1 a_2 b_0])
+\end{eqnarray}
+%
+The final pass leaves the data for $h(a)$ in bit-reversed order, but
+this is easily fixed by a final bit-reversal of the ordering.
+
+The basic in-place calculation or butterfly for each pass is slightly
+different from the decimation-in-time version,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g({\hat a} + {\hat b}) \\
+g({\hat a} + \Delta + {\hat b}) \\
+\end{array}
+\right)
+\leftarrow
+\left(
+\begin{array}{c}
+g({\hat a} + {\hat b}) + g({\hat a} + \Delta + {\hat b})\\
+W_{\Delta}^{\hat b}
+\left( g({\hat a} + {\hat b}) - g({\hat a} + \Delta + {\hat b}) \right)
+\end{array}
+\right)
+\end{equation}
+%
+In each pass ${\hat b}$ runs from $0 \dots \Delta-1$ and ${\hat
+a}$ runs from $0, 2\Delta, \dots, (N/\Delta -1) \Delta$. On the first
+pass we start with $\Delta=16$, and on subsequent passes $\Delta$ takes
+the values $8, 4, \dots, 1$.
+
+This leads to the canonical radix-2 decimation-in-frequency FFT
+algorithm for $2^n$ data points stored in the array $g(0) \dots
+g(2^n-1)$.
+%
+\begin{algorithm}
+\STATE {$\Delta \Leftarrow 2^{n-1}$}
+\FOR {$\mbox{pass} = 1 \dots n$}
+ \STATE {$W \Leftarrow \exp(-2 \pi i / 2\Delta)$}
+ \FOR {$(b = 0 ; b < \Delta ; b++)$}
+ \FOR{$(a = 0 ; a < N ; a += 2*\Delta)$}
+ \STATE{$t_0 \Leftarrow g(b+a) + g(a+\Delta+b)$}
+ \STATE{$t_1 \Leftarrow W^b \left( g(a+b) - g(a+\Delta+b) \right)$}
+ \STATE{$g(a+b) \Leftarrow t_0$}
+ \STATE{$g(a+\Delta+b) \Leftarrow t_1$}
+ \ENDFOR
+ \ENDFOR
+ \STATE{$\Delta \Leftarrow \Delta/2$}
+\ENDFOR
+\STATE bit-reverse ordering of $g$
+\end{algorithm}
+%
+
+\section{Self-Sorting Mixed-Radix Complex FFTs}
+%
+This section is based on the review article {\em Self-sorting
+Mixed-Radix Fast Fourier Transforms} by Clive
+Temperton~\cite{temperton83}. You should consult his article for full
+details of all the possible algorithms (there are many
+variations). Here I have annotated the derivation of the simplest
+mixed-radix decimation-in-frequency algorithm.
+
+For general-$N$ FFT algorithms the simple binary-notation of radix-2
+algorithms is no longer useful. The mixed-radix FFT has to be built
+up using products of matrices acting on a data vector. The aim is to
+take the full DFT matrix $W_N$ and factor it into a set of small,
+sparse matrices corresponding to each factor of $N$.
+
+
+We'll denote the components of matrices using either subscripts or
+function notation,
+%
+\begin{equation}
+M_{ij} = M(i,j)
+\end{equation}
+%
+with (C-like) indices running from 0 to $N-1$. Matrix products will be
+denoted using square brackets,
+%
+\begin{equation}
+[AB]_{ij} = \sum_{k} A_{ik} B_{kj}
+\end{equation}
+%
+%
+Three special matrices will be needed in the mixed-radix factorization
+of the DFT: the identity matrix, $I$, a permutation matrix, $P$ and a
+matrix of twiddle factors, $D$, as well as the normal DFT matrices
+$W_n$.
+
+We write the identity matrix of order $r$ as $I_r(n,m)$,
+%
+\begin{equation}
+I_r(n,m) = \delta_{nm}
+\end{equation}
+%
+for $0 \leq n,m \leq r-1$.
+
+We also need to define a permutation matrix $P^a_b$ that performs
+digit reversal of the ordering of a vector. If the index of a vector
+$j= 0\dots N-1$ is factorized into $j = la +m$, with $0 \leq l \leq
+b-1$ and $0 \leq m \leq a-1$ then the operation of the matrix $P$ will
+exchange positions $la+m$ and $mb+l$ in the vector (this sort of
+digit-reversal is the generalization of bit-reversal to a number
+system with exponents $a$ and $b$).
+
+In mathematical terms $P$ is a square matrix of size $ab \times ab$
+with the property,
+%
+\begin{eqnarray}
+P^a_b(j,k) &=& 1 ~\mbox{if}~ j=ra+s ~\mbox{and}~ k=sb+r \\
+ &=& 0 ~\mbox{otherwise}
+\end{eqnarray}
+%
+
+Finally the FFT algorithm needs a matrix of twiddle factors, $D^a_b$,
+for the trigonometric sums. $D^a_b$ is a diagonal square matrix of
+size $ab \times ab$ with the definition,
+%
+\begin{eqnarray}
+D^a_b(j,k) &=& \omega^{sr}_{ab} ~\mbox{if}~ j=k=sb+r \\
+ &=& 0 ~\mbox{otherwise}
+\end{eqnarray}
+%
+where $\omega_{ab} = e^{-2\pi i/ab}$.
+
+
+\subsection{The Kronecker Product}
+The Kronecker matrix product plays an important role in all the
+algorithms for combining operations on different subspaces. The
+Kronecker product $A \otimes B$ of two square matrices $A$ and $B$, of
+sizes $a \times a$ and $b \times b$ respectively, is a square matrix
+of size $a b \times a b$, defined as,
+%
+\begin{equation}
+[A \otimes B] (tb+u, rb+s) = A(t,r) B(u,s)
+\end{equation}
+%
+where $0 \leq u,s < b$ and $0 \leq t,r < a$. Let's examine a specific
+example. If we take a $2 \times 2$ matrix and a $3
+\times 3$ matrix,
+%
+\begin{equation}
+\begin{array}{ll}
+A =
+\left(
+\begin{array}{cc}
+a_{11} & a_{12} \\
+a_{21} & a_{22}
+\end{array}
+\right)
+&
+B =
+\left(
+\begin{array}{ccc}
+b_{11} & b_{12} & b_{13} \\
+b_{21} & b_{22} & b_{23} \\
+b_{31} & b_{32} & b_{33}
+\end{array}
+\right)
+\end{array}
+\end{equation}
+%
+then the Kronecker product $A \otimes B$ is,
+%
+\begin{eqnarray}
+A \otimes B &= &
+\left(
+\begin{array}{cc}
+a_{11} B & a_{12} B \\
+a_{12} B & a_{22} B
+\end{array}
+\right) \\
+ &=&
+\left(
+\begin{array}{cccccc}
+a_{11} b_{11} & a_{11} b_{12} & a_{11} b_{13} &
+ a_{12} b_{11} & a_{12} b_{12} & a_{12} b_{13} \\
+a_{11} b_{21} & a_{11} b_{22} & a_{11} b_{23} &
+ a_{12} b_{21} & a_{12} b_{22} & a_{12} b_{23} \\
+a_{11} b_{31} & a_{11} b_{32} & a_{11} b_{33} &
+ a_{12} b_{31} & a_{12} b_{32} & a_{12} b_{33} \\
+a_{21} b_{11} & a_{21} b_{12} & a_{21} b_{13} &
+ a_{22} b_{11} & a_{22} b_{12} & a_{22} b_{13} \\
+a_{21} b_{21} & a_{21} b_{22} & a_{21} b_{23} &
+ a_{22} b_{21} & a_{22} b_{22} & a_{22} b_{23} \\
+a_{21} b_{31} & a_{21} b_{32} & a_{21} b_{33} &
+ a_{22} b_{31} & a_{22} b_{32} & a_{22} b_{33}
+\end{array}
+\right)
+\end{eqnarray}
+%
+When the Kronecker product $A \otimes B$ acts on a vector of length
+$ab$, each matrix operates on a different subspace of the vector.
+Writing the index $i$ as $i=t b + u$, with $0\leq u \leq b-1$
+and $0\leq t\leq a$, we can see this explicitly by looking at components,
+%
+\begin{eqnarray}
+[(A \otimes B) v]_{(tb+u)}
+& = & \sum_{t'=0}^{a-1} \sum_{u'=0}^{b-1}
+ [A \otimes B]_{(tb+u,t'b+u')} v_{t'b+u'} \\
+& = & \sum_{t'u'} A_{tt'} B_{uu'} v_{t'b+u'}
+\end{eqnarray}
+%
+The matrix $B$ operates on the ``index'' $u'$, for all values of $t'$, and
+the matrix $A$ operates on the ``index'' $t'$, for all values of $u'$.
+%
+The most important property needed for deriving the FFT factorization
+is that the matrix product of two Kronecker products is the Kronecker
+product of the two matrix products,
+%
+\begin{equation}
+(A \otimes B)(C \otimes D) = (AC \otimes BD)
+\end{equation}
+%
+This follows straightforwardly from the original definition of the
+Kronecker product.
+
+\subsection{Two factor case, $N=ab$}
+%
+First consider the simplest possibility, where the data length $N$ can
+be divided into two factors, $N=ab$. The aim is to reduce the DFT
+matrix $W_N$ into simpler matrices corresponding to each factor. To
+make the derivation easier we will start from the known factorization
+and verify it (the initial factorization can be guessed by
+generalizing from simple cases). Here is the factorization we are
+going to prove,
+%
+\begin{equation}
+W_{ab} = (W_b \otimes I_a) P^a_b D^a_b (W_a \otimes I_b).
+\end{equation}
+%
+We can check it by expanding the product into components,
+%
+\begin{eqnarray}
+\lefteqn{[(W_b \otimes I_a) P^a_b D^a_b (W_a \otimes I_b)](la+m,rb+s)} \\
+& = &
+\sum_{u=0}^{b-1} \sum_{t=0}^{a-1}
+[(W_b \otimes I_a)](la+m,ua+t) [P^a_b D^a_b (W_a \otimes I_b)](ua+t,rb+s)
+\end{eqnarray}
+%
+where we have split the indices to match the Kronecker product $0 \leq
+m, r \leq a$, $0 \leq l, s \leq b$. The first term in the sum can
+easily be reduced to its component form,
+%
+\begin{eqnarray}
+[(W_b \otimes I_a)](la+m,ua+t)
+&=& W_b(l,u) I_a(m,t) \\
+&=& \omega_b^{lu} \delta_{mt}
+\end{eqnarray}
+%
+The second term is more complicated. We can expand the Kronecker
+product like this,
+\begin{eqnarray}
+(W_a \otimes I_b)(tb+u,rb+s)
+&=& W_a(t,r) I_a(u,s) \\
+&=& \omega_a^{tr} \delta_{us}
+\end{eqnarray}
+%
+and use this term to build up the product, $P^a_b D^a_b (W_a \otimes
+I_b)$. We first multiply by $D^a_b$,
+%
+\begin{equation}
+[D^a_b (W_a \otimes I_b)](tb+u,rb+s)
+=
+\omega^{tu}_{ab} \omega^{tr}_{a} \delta_{su}
+\end{equation}
+%
+and then apply the permutation matrix, $P^a_b$, which digit-reverses
+the ordering of the first index, to obtain,
+%
+\begin{equation}
+[P^a_b D^a_b (W_a \otimes I_b)](ua+t,rb+s)
+=
+\omega^{tu}_{ab} \omega^{tr}_{a} \delta_{su}
+\end{equation}
+%
+Combining the two terms in the matrix product we can obtain the full
+expansion in terms of the exponential $\omega$,
+%
+\begin{eqnarray}
+[(W_b \otimes I_a) P^a_b D^a_b (W_a \otimes I_b)](la+m,rb+s)
+&=&
+\sum_{u=0}^{b-1} \sum_{t=0}^{a-1}
+\omega_b^{lu} \delta_{mt} \omega^{tu}_{ab} \omega^{tr}_{a} \delta_{su}
+\end{eqnarray}
+%
+If we evaluate this sum explicitly we can make the connection between
+the product involving $W_a$ and $W_b$ (above) and the expansion of the
+full DFT matrix $W_{ab}$,
+%
+\begin{eqnarray}
+\sum_{u=0}^{b-1} \sum_{t=0}^{a-1}
+\omega_b^{lu} \delta_{mt} \omega^{tu}_{ab} \omega^{tr}_{a} \delta_{su}
+&=& \omega^{ls}_b \omega^{ms}_{ab} \omega^{mr}_a \\
+&=& \omega^{als + ms +bmr}_{ab} \\
+&=& \omega^{als + ms +bmr}_{ab} \omega^{lrab}_{ab} \quad\mbox{using~} \omega^{ab}_{ab} =1\\
+&=& \omega^{(la+m)(rb+s)}_{ab} \\
+&=& W_{ab}(la+m,rb+s)
+\end{eqnarray}
+%
+The final line shows that matrix product given above is identical to
+the full two-factor DFT matrix, $W_{ab}$.
+%
+Thus the full DFT matrix $W_{ab}$ for two factors $a$, $b$ can be
+broken down into a product of sub-transforms, $W_a$ and $W_b$, plus
+permutations, $P$, and twiddle factors, $D$, according to the formula,
+%
+\begin{equation}
+W_{ab} = (W_b \otimes I_a) P^a_b D^a_b (W_a \otimes I_b).
+\end{equation}
+%
+This relation is the foundation of the general-$N$ mixed-radix FFT algorithm.
+
+\subsection{Three factor case, $N=abc$}
+%
+The result for the two-factor expansion can easily be generalized to
+three factors. We first consider $abc$ as being a product of two
+factors $a$ and $(bc)$, and then further expand the product $(bc)$ into
+$b$ and $c$. The first step of the expansion looks like this,
+%
+\begin{eqnarray}
+W_{abc} &=& W_{a(bc)}\\
+&=& (W_{bc} \otimes I_a) P^a_{bc} D^a_{bc} (W_a \otimes I_{bc}) .
+\end{eqnarray}
+%
+And after using the two-factor result to expand out $W_{bc}$ we obtain
+the factorization of $W_{abc}$,
+%
+\begin{eqnarray}
+W_{abc} &=& (((W_c \otimes I_b) P^b_c D^b_c (W_b \otimes I_c)) \otimes I_a )
+P^a_{bc} D^a_{bc} (W_a \otimes I_{bc}) \\
+&=& (W_c \otimes I_{ab}) (P^b_c D^b_c \otimes I_a) (W_b \otimes I_{ac}) P^a_{bc} D^a_{bc} (W_a \otimes I_c)
+\end{eqnarray}
+%
+We can write this factorization in a product form, with one term for
+each factor,
+%
+\begin{equation}
+W_{abc} = T_3 T_2 T_1
+\end{equation}
+%
+where we read off $T_1$, $T_2$ and $T_3$,
+%
+\begin{eqnarray}
+T_1 &=& P^a_{bc} D^a_{bc} (W_a \otimes I_{bc}) \\
+T_2 &=& (P^b_c D^b_c \otimes I_a) (W_b \otimes I_{ac}) \\
+T_3 &=& (W_c \otimes I_{ab} )
+\end{eqnarray}
+%
+
+
+\subsection{General case, $N=f_1 f_2 \dots f_{n_f}$}
+%
+If we continue the procedure that we have used for two- and
+three-factors then a general pattern begins to emerge in the
+factorization of $W_{f_1 f_2 \dots f_{n_f}}$. To see the beginning of
+the pattern we can rewrite the three factor case as,
+%
+\begin{eqnarray}
+T_1 &=& (P^a_{bc} D^a_{bc} \otimes I_1) (W_a \otimes I_{bc}) \\
+T_2 &=& (P^b_c D^b_c \otimes I_a) (W_b \otimes I_{ac}) \\
+T_3 &=& (P^c_1 D^c_1 \otimes I_{ab}) (W_c \otimes I_{ab} )
+\end{eqnarray}
+%
+using the special cases $P^c_1 = D^c_1 = I_c$.
+%
+In general, we can write the factorization of $W_N$ for $N= f_1 f_2
+\dots f_{n_f}$ as,
+%
+\begin{equation}
+W_N = T_{n_f} \dots T_2 T_1
+\end{equation}
+%
+where the matrix factors $T_i$ are,
+%
+\begin{equation}
+T_i = (P^{f_i}_{q_i} D^{f_i}_{q_i} \otimes I_{p_{i-1}}) ( W_{f_i}
+\otimes I_{m_i})
+\end{equation}
+%
+We have defined the following three additional variables $p$, $q$ and
+$m$ to denote different partial products of the factors,
+%
+\begin{eqnarray}
+p_i &=& f_1 f_2 \dots f_i \quad (p_0 = 1) \\
+q_i &=& N / p_i \\
+m_i &=& N / f_i
+\end{eqnarray}
+%
+Note that the FFT modules $W$ are applied before the permutations $P$,
+which makes this a decimation-in-frequency algorithm.
+
+\subsection{Implementation}
+%
+Now to the implementation of the algorithm. We start with a vector of
+data, $z$, as input and want to apply the transform,
+%
+\begin{eqnarray}
+x &=& W_N z \\
+ &=& T_{n_f} \dots T_2 T_1 z
+\end{eqnarray}
+%
+where $T_i = (P^{f_i}_{q_i} D^{f_i}_{q_i} \otimes I_{p_{i-1}}) (
+W_{f_i} \otimes I_{m_i})$.
+
+The outer structure of the implementation will be a loop over the
+$n_f$ factors, applying each matrix $T_i$ to the vector in turn to
+build up the complete transform.
+%
+\begin{algorithm}
+\FOR{$(i = 1 \dots n_f)$}
+ \STATE{$v \Leftarrow T_i v $}
+\ENDFOR
+\end{algorithm}
+%
+The order of the factors is not important. Now we examine the iteration
+$v \Leftarrow T_i v$, which we'll write as,
+%
+\begin{equation}
+v' =
+(P^{f_i}_{q_i} D^{f_i}_{q_i} \otimes I_{p_{i-1}}) ~
+( W_{f_i} \otimes I_{m_i}) v
+\end{equation}
+%
+There are two Kronecker product matrices in this iteration. The
+rightmost matrix, which is the first to be applied, is a DFT of length
+$f_i$ applied to $N/f_i$ subsets of the data. We'll call this $t$,
+since it will be a temporary array,
+%
+\begin{equation}
+t = (W_{f_i} \otimes I_{m_i}) v
+\end{equation}
+%
+The second matrix applies a permutation and the exponential
+twiddle-factors. We'll call this $v'$, since it is the result of the
+full iteration on $v$,
+%
+\begin{equation}
+v' = (P^{f_i}_{q_i} D^{f_i}_{q_i} \otimes I_{p_{i-1}}) t
+\end{equation}
+
+The effect of the matrix $(W_{f_i} \otimes I_{m_i})$ is best seen by
+an example. Suppose the factor is $f_i = 3$, and the length of the FFT
+is $N=6$, then the relevant Kronecker product is,
+%
+\begin{equation}
+t = (W_3 \otimes I_2) v
+\end{equation}
+%
+which expands out to,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+t_0 \\
+t_1 \\
+t_2 \\
+t_3 \\
+t_4 \\
+t_5
+\end{array}
+\right)
+=
+\left(
+\begin{array}{cccccc}
+W_3(1,1) & 0 & W_3(1,2) & 0 & W_3(1,3) & 0 \\
+0 & W_3(1,1) & 0 & W_3(1,2) & 0 & W_3(1,3) \\
+W_3(2,1) & 0 & W_3(2,2) & 0 & W_3(2,3) & 0 \\
+0 & W_3(2,1) & 0 & W_3(2,2) & 0 & W_3(2,3) \\
+W_3(3,1) & 0 & W_3(3,2) & 0 & W_3(3,3) & 0 \\
+0 & W_3(3,1) & 0 & W_3(3,2) & 0 & W_3(3,3)
+\end{array}
+\right)
+\left(
+\begin{array}{c}
+v_0 \\
+v_1 \\
+v_2 \\
+v_3 \\
+v_4 \\
+v_5
+\end{array}
+\right)
+\end{equation}
+%
+We can rearrange the components in a computationally convenient form,
+\begin{equation}
+\left(
+\begin{array}{c}
+t_0 \\
+t_2 \\
+t_4 \\
+t_1 \\
+t_3 \\
+t_5
+\end{array}
+\right)
+=
+\left(
+\begin{array}{cccccc}
+W_3(1,1) & W_3(1,2) & W_3(1,3) & 0 & 0 & 0 \\
+W_3(2,1) & W_3(2,2) & W_3(2,3) & 0 & 0 & 0 \\
+W_3(3,1) & W_3(3,2) & W_3(3,3) & 0 & 0 & 0 \\
+0 & 0 & 0 & W_3(1,1) & W_3(1,2) & W_3(1,3) \\
+0 & 0 & 0 & W_3(2,1) & W_3(2,2) & W_3(2,3) \\
+0 & 0 & 0 & W_3(3,1) & W_3(3,2) & W_3(3,3)
+\end{array}
+\right)
+\left(
+\begin{array}{c}
+v_0 \\
+v_2 \\
+v_4 \\
+v_1 \\
+v_3 \\
+v_5
+\end{array}
+\right)
+\end{equation}
+%
+which clearly shows that we just need to apply the $3\times 3$ DFT
+matrix $W_3$ twice, once to the sub-vector of elements $(v_0, v_2, v_4)$,
+and independently to the remaining sub-vector $(v_1, v_3, v_5)$.
+
+In the general case, if we index $t$ as $t_k = t(\lambda,\mu) =
+t_{\lambda m + \mu}$ then $\lambda = 0 \dots f-1$ is an index within
+each transform of length $f$ and $\mu = 0 \dots m-1$ labels the
+independent subsets of data. We can see this by showing the
+calculation with all indices present,
+%
+\begin{equation}
+t = (W_f \otimes I_m) z
+\end{equation}
+%
+becomes,
+%
+\begin{eqnarray}
+t_{\lambda m + \mu} &=& \sum_{\lambda'=0}^{f-1} \sum_{\mu'=0}^{m-1}
+ (W_f \otimes I_m)_{(\lambda m + \mu)(\lambda' m + \mu')}
+ z_{\lambda'm + \mu} \\
+&=& \sum_{\lambda'\mu'} (W_f)_{\lambda\lambda'} \delta_{\mu\mu'}
+ z_{\lambda'm+\mu'} \\
+&=& \sum_{\lambda'} (W_f)_{\lambda\lambda'} z_{\lambda'm+\mu}
+\end{eqnarray}
+%
+The DFTs on the index $\lambda$ will be computed using
+special optimized modules for each $f$.
+
+To calculate the next stage,
+%
+\begin{equation}
+v'=(P^f_q D^f_q \otimes I_{p_{i-1}}) t
+\end{equation}
+%
+we note that the Kronecker product has the property of performing
+$p_{i-1}$ independent multiplications of $PD$ on $q_{i-1}$ different
+subsets of $t$. The index $\mu$ of $t(\lambda,\mu)$ which runs from 0
+to $m$ will include $q_i$ copies of each $PD$ operation because
+$m=p_{i-1}q$. i.e. we can split the index $\mu$ further into $\mu = a
+p_{i-1} + b$, where $a = 0 \dots q-1$ and $b=0 \dots p_{i-1}$,
+%
+\begin{eqnarray}
+\lambda m + \mu &=& \lambda m + a p_{i-1} + b \\
+ &=& (\lambda q + a) p_{i-1} + b.
+\end{eqnarray}
+%
+Now we can expand the second stage,
+%
+\begin{eqnarray}
+v'&=& (P^f_q D^f_q \otimes I_{p_{i-1}}) t \\
+v'_{\lambda m + \mu} &=& \sum_{\lambda' \mu'}
+ (P^f_q D^f_q \otimes I_{p_{i-1}})_{(\lambda m + \mu)(\lambda' m + \mu')}
+ t_{\lambda' m + \mu'} \\
+v'_{(\lambda q + a) p_{i-1} + b} &=& \sum_{\lambda' a' b'}
+(
+P^f_q D^f_q \otimes I_{p_{i-1}}
+)_{((\lambda q+ a)p_{i-1} + b)((\lambda' q+ a')p_{i-1} + b')}
+t_{(\lambda' q + a')p_{i-1} +b'}
+\end{eqnarray}
+%
+The first step in removing redundant indices is to take advantage of
+the identity matrix $I$ and separate the subspaces of the Kronecker
+product,
+%
+\begin{equation}
+(
+P^f_q D^f_q \otimes I_{p_{i-1}}
+)_{((\lambda q+ a)p_{i-1} + b)((\lambda' q+ a')p_{i-1} + b')}
+=
+(P^f_q D^f_q)_{(\lambda q + a)(\lambda' q + a')}
+\delta_{bb'}
+\end{equation}
+%
+This eliminates one sum, leaving us with,
+%
+\begin{equation}
+v'_{(\lambda q + a) p_{i-1} + b}
+=
+\sum_{\lambda' a' }
+(P^f_q D^f_q)_{(\lambda q + a)(\lambda' q + a')} t_{(\lambda'q+a')p_{i-1} + b}
+\end{equation}
+%
+We can insert the definition of $D^f_q$ to give,
+%
+\begin{equation}
+\phantom{v'_{(\lambda q + a) p_{i-1} + b}}
+= \sum_{\lambda'a'} (P^f_q)_{(\lambda q + a)(\lambda'q + a')}
+\omega^{\lambda'a'}_{q_{i-1}} t_{(\lambda'q+a')p_{i-1}+b}
+\end{equation}
+%
+Using the definition of $P^f_q$, which exchanges an index of $\lambda
+q + a$ with $a f + \lambda$, we get a final result with no matrix
+multiplication,
+%
+\begin{equation}
+v'_{(a f + \lambda) p_{i-1} + b}
+= \omega^{\lambda a}_{q_{i-1}} t_{(\lambda q + a)p_{i-1} + b}
+\end{equation}
+%
+All we have to do is premultiply each element of the temporary vector
+$t$ by an exponential twiddle factor and store the result in another
+index location, according to the digit reversal permutation of $P$.
+
+Here is the algorithm to implement the mixed-radix FFT,
+%
+\begin{algorithm}
+\FOR{$i = 1 \dots n_f$}
+\FOR{$a = 0 \dots q-1$}
+\FOR{$b = 0 \dots p_{i-1} - 1$}
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$t_\lambda \Leftarrow
+ \sum_{\lambda'=0}^{f-1} W_f(\lambda,\lambda') v_{b+\lambda'm+ap_{i-1}}$}
+ \COMMENT{DFT matrix-multiply module}
+\ENDFOR
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$v'_{(af+\lambda)p_{i-1}+b}
+ \Leftarrow \omega^{\lambda a}_{q_{i-1}} t_\lambda$}
+\ENDFOR
+\ENDFOR
+\ENDFOR
+\STATE{$v \Leftarrow v'$}
+\ENDFOR
+\end{algorithm}
+%
+\subsection{Details of the implementation}
+%
+First the function {\tt gsl\_fft\_complex\_wavetable\_alloc} allocates
+$n$ elements of scratch space (to hold the vector $v'$ for each
+iteration) and $n$ elements for a trigonometric lookup table of
+twiddle factors.
+
+Then the length $n$ must be factorized. There is a general
+factorization function {\tt gsl\_fft\_factorize} which takes a list of
+preferred factors. It first factors out the preferred factors and then
+removes general remaining prime factors.
+
+The algorithm used to generate the trigonometric lookup table is
+%
+\begin{algorithm}
+\FOR {$a = 1 \dots n_f$}
+\FOR {$b = 1 \dots f_i - 1$}
+\FOR {$c = 1 \dots q_i$}
+\STATE $\mbox{trig[k++]} = \exp(- 2\pi i b c p_{a-1}/N)$
+\ENDFOR
+\ENDFOR
+\ENDFOR
+\end{algorithm}
+%
+Note that $\sum_{1}^{n_f} \sum_{0}^{f_i-1} \sum_{1}^{q_i} =
+\sum_{1}^{n_f} (f_i-1)q_i = n - 1$ so $n$ elements are always
+sufficient to store the lookup table. This is chosen because we need
+to compute $\omega_{q_i-1}^{\lambda a} t_\lambda$ in
+the FFT. In terms of the lookup table we can write this as,
+%
+\begin{eqnarray}
+\omega_{q_{i-1}}^{\lambda a} t_\lambda
+&=& \exp(-2\pi i \lambda a/q_{i-1}) t_\lambda \\
+&=& \exp(-2\pi i \lambda a p_{i-1}/N) t_\lambda \\
+&=& \left\{
+ \begin{array}{ll}
+ t_\lambda & a=0 \\
+ \mbox{trig}[\mbox{twiddle[i]}+\lambda q+(a-1)] t_\lambda & a\not=0
+\end{array}
+\right.
+\end{eqnarray}
+%
+\begin{sloppypar}
+\noindent
+The array {\tt twiddle[i]} maintains a set of pointers into {\tt trig}
+for the starting points for the outer loop. The core of the
+implementation is {\tt gsl\_fft\_complex}. This function loops over
+the chosen factors of $N$, computing the iteration $v'=T_i v$ for each
+pass. When the DFT for a factor is implemented the iteration is
+handed-off to a dedicated small-$N$ module, such as {\tt
+gsl\_fft\_complex\_pass\_3} or {\tt
+gsl\_fft\_complex\_pass\_5}. Unimplemented factors are handled
+by the general-$N$ routine {\tt gsl\_fft\_complex\_pass\_n}. The
+structure of one of the small-$N$ modules is a simple transcription of
+the basic algorithm given above. Here is an example for {\tt
+gsl\_fft\_complex\_pass\_3}. For a pass with a factor of 3 we have to
+calculate the following expression,
+\end{sloppypar}%
+\begin{equation}
+v'_{(a f + \lambda) p_{i-1} + b}
+=
+\sum_{\lambda' = 0,1,2}
+\omega^{\lambda a}_{q_{i-1}} W^{\lambda \lambda'}_{3}
+v_{b + \lambda' m + a p_{i-1}}
+\end{equation}
+%
+for $b = 0 \dots p_{i-1} - 1$, $a = 0 \dots q_{i} - 1$ and $\lambda =
+0, 1, 2$. This is implemented as,
+%
+\begin{algorithm}
+\FOR {$a = 0 \dots q-1$}
+\FOR {$b = 0 \dots p_{i-1} - 1$}
+\STATE {$
+ \left(
+ \begin{array}{c}
+ t_0 \\ t_1 \\ t_2
+ \end{array}
+ \right)
+ =
+ \left(
+ \begin{array}{ccc}
+ W^{0}_3 & W^{0}_3 & W^{0}_3 \\
+ W^{0}_3 & W^{1}_3 & W^{2}_3 \\
+ W^{0}_3 & W^{2}_3 & W^{4}_3
+ \end{array}
+ \right)
+ \left(
+ \begin{array}{l}
+ v_{b + a p_{i-1}} \\
+ v_{b + a p_{i-1} + m} \\
+ v_{b + a p_{i-1} +2m}
+ \end{array}
+ \right)$}
+ \STATE {$ v'_{a p_{i} + b} = t_0$}
+ \STATE {$ v'_{a p_{i} + b + p_{i-1}} = \omega^{a}_{q_{i-1}} t_1$}
+ \STATE {$ v'_{a p_{i} + b + 2 p_{i-1}} = \omega^{2a}_{q_{i-1}} t_2$}
+\ENDFOR
+\ENDFOR
+\end{algorithm}
+%
+In the code we use the variables {\tt from0}, {\tt from1}, {\tt from2}
+to index the input locations,
+%
+\begin{eqnarray}
+\mbox{\tt from0} &=& b + a p_{i-1} \\
+\mbox{\tt from1} &=& b + a p_{i-1} + m \\
+\mbox{\tt from2} &=& b + a p_{i-1} + 2m
+\end{eqnarray}
+%
+and the variables {\tt to0}, {\tt to1}, {\tt to2} to index the output
+locations in the scratch vector $v'$,
+%
+\begin{eqnarray}
+\mbox{\tt to0} &=& b + a p_{i} \\
+\mbox{\tt to1} &=& b + a p_{i} + p_{i-1} \\
+\mbox{\tt to2} &=& b + a p_{i} + 2 p_{i-1}
+\end{eqnarray}
+%
+The DFT matrix multiplication is computed using the optimized
+sub-transform modules given in the next section. The twiddle factors
+$\omega^a_{q_{i-1}}$ are taken out of the {\tt trig} array.
+
+To compute the inverse transform we go back to the definition of the
+fourier transform and note that the inverse matrix is just the complex
+conjugate of the forward matrix (with a factor of $1/N$),
+%
+\begin{equation}
+W^{-1}_N = W^*_N / N
+\end{equation}
+%
+Therefore we can easily compute the inverse transform by conjugating
+all the complex elements of the DFT matrices and twiddle factors that
+we apply. (An alternative strategy is to conjugate the input data,
+take a forward transform, and then conjugate the output data).
+
+\section{Fast Sub-transform Modules}
+%
+To implement the mixed-radix FFT we still need to compute the
+small-$N$ DFTs for each factor. Fortunately many highly-optimized
+small-$N$ modules are available, following the work of Winograd who
+showed how to derive efficient small-$N$ sub-transforms by number
+theoretic techniques.
+
+The algorithms in this section all compute,
+%
+\begin{equation}
+x_a = \sum_{b=0}^{N-1} W_N^{ab} z_b
+\end{equation}
+%
+The sub-transforms given here are the ones recommended by Temperton
+and differ slightly from the canonical Winograd modules. According to
+Temperton~\cite{temperton83} they are slightly more robust against
+rounding errors and trade off some additions for multiplications.
+%
+For the $N=2$ DFT,
+%
+\begin{equation}
+\begin{array}{ll}
+x_0 = z_0 + z_1, &
+x_1 = z_0 - z_1.
+\end{array}
+\end{equation}
+%
+For the $N=3$ DFT,
+%
+\begin{equation}
+\begin{array}{lll}
+t_1 = z_1 + z_2, &
+t_2 = z_0 - t_1/2, &
+t_3 = \sin(\pi/3) (z_1 - z_2),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+x_0 = z_0 + t_1, &
+x_1 = t_2 + i t_3, &
+x_2 = t_2 - i t_3.
+\end{array}
+\end{equation}
+%
+The $N=4$ transform involves only additions and subtractions,
+%
+\begin{equation}
+\begin{array}{llll}
+t_1 = z_0 + z_2, &
+t_2 = z_1 + z_3, &
+t_3 = z_0 - z_2, &
+t_4 = z_1 - z_3,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+x_0 = t_1 + t_2, &
+x_1 = t_3 + i t_4, &
+x_2 = t_1 - t_2, &
+x_3 = t_3 - i t_4.
+\end{array}
+\end{equation}
+%
+For the $N=5$ DFT,
+%
+\begin{equation}
+\begin{array}{llll}
+t_1 = z_1 + z_4, &
+t_2 = z_2 + z_3, &
+t_3 = z_1 - z_4, &
+t_4 = z_2 - z_3,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+t_5 = t_1 + t_2, &
+t_6 = (\sqrt{5}/4) (t_1 - t_2), &
+t_7 = z_0 - t_5/4, \\
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+t_8 = t_7 + t_6, &
+t_9 = t_7 - t_6, \\
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+t_{10} = \sin(2\pi/5) t_3 + \sin(2\pi/10) t_4, &
+t_{11} = \sin(2\pi/10) t_3 - \sin(2\pi/5) t_4,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+x_0 = z_0 + t_5,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+x_1 = t_8 + i t_{10}, &
+x_2 = t_9 + i t_{11},
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{llll}
+x_3 = t_9 - i t_{11}, &
+x_4 = t_8 - i t_{10}.
+\end{array}
+\end{equation}
+%
+The DFT matrix for $N=6$ can be written as a combination of $N=3$ and
+$N=2$ transforms with index permutations,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+x_0 \\
+x_4 \\
+x_2 \\
+\hline x_3 \\
+x_1 \\
+x_5
+\end{array}
+\right)
+=
+\left(
+\begin{array}{ccc|ccc}
+ & & & & & \\
+ &W_3& & &W_3& \\
+ & & & & & \\
+\hline & & & & & \\
+ &W_3& & &-W_3& \\
+ & & & & &
+\end{array}
+\right)
+\left(
+\begin{array}{c}
+z_0 \\
+z_2 \\
+z_4 \\
+\hline z_3 \\
+z_5 \\
+z_1
+\end{array}
+\right)
+\end{equation}
+%
+This simplification is an example of the Prime Factor Algorithm, which
+can be used because the factors 2 and 3 are mutually prime. For more
+details consult one of the books on number theory for
+FFTs~\cite{elliott82,blahut}. We can take advantage of the simple
+indexing scheme of the PFA to write the $N=6$ DFT as,
+%
+\begin{equation}
+\begin{array}{lll}
+t_1 = z_2 + z_4, &
+t_2 = z_0 - t_1/2, &
+t_3 = \sin(\pi/3) (z_2 - z_4),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+t_4 = z_5 + z_1, &
+t_5 = z_3 - t_4/2, &
+t_6 = \sin(\pi/3) (z_5 - z_1),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+t_7 = z_0 + t_1, &
+t_8 = t_2 + i t_3, &
+t_9 = t_2 - i t_3,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+t_{10} = z_3 + t_4, &
+t_{11} = t_5 + i t_6, &
+t_{12} = t_5 - i t_6,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+x_0 = t_7 + t_{10}, &
+x_4 = t_8 + t_{11}, &
+x_2 = t_9 + t_{12},
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+x_3 = t_7 - t_{10}, &
+x_1 = t_8 - t_{11}, &
+x_5 = t_9 - t_{12}.
+\end{array}
+\end{equation}
+
+For any remaining general factors we use Singleton's efficient method
+for computing a DFT~\cite{singleton}. Although it is an $O(N^2)$
+algorithm it does reduce the number of multiplications by a factor of
+4 compared with a naive evaluation of the DFT. If we look at the
+general stucture of a DFT matrix, shown schematically below,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+h_0 \\
+h_1 \\
+h_2 \\
+\vdots \\
+h_{N-2} \\
+h_{N-1}
+\end{array}
+\right)
+=
+\left(
+\begin{array}{cccccc}
+1 & 1 & 1 & \cdots & 1 & 1 \\
+1 & W & W & \cdots & W & W \\
+1 & W & W & \cdots & W & W \\
+\vdots & \vdots & \vdots & \cdots & \vdots & \vdots \\
+1 & W & W & \cdots & W & W \\
+1 & W & W & \cdots & W & W
+\end{array}
+\right)
+\left(
+\begin{array}{c}
+g_0 \\
+g_1 \\
+g_2 \\
+\vdots \\
+g_{N-2} \\
+g_{N-1}
+\end{array}
+\right)
+\end{equation}
+%
+we see that the outer elements of the DFT matrix are all unity. We can
+remove these trivial multiplications but we will still be left with an
+$(N-1) \times (N-1)$ sub-matrix of complex entries, which would appear
+to require $(N-1)^2$ complex multiplications. Singleton's method,
+uses symmetries of the DFT matrix to convert the complex
+multiplications to an equivalent number of real multiplications. We
+start with the definition of the DFT in component form,
+%
+\begin{equation}
+a_k + i b_k = \sum_{j=0} (x_j+iy_j)(\cos(2\pi jk/f) - i\sin(2\pi jk/f))
+\end{equation}
+%
+The zeroth component can be computed using only additions,
+%
+\begin{equation}
+a_0 + i b_0 = \sum_{j=0}^{(f-1)} x_j + i y_j
+\end{equation}
+%
+We can rewrite the remaining components as,
+%
+\begin{eqnarray}
+a_k + i b_k & = x_0 + i y_0 & +
+ \sum_{j=1}^{(f-1)/2} (x_j + x_{f-j}) \cos(2\pi jk/f)
+ + (y_j - y_{f-j}) \sin(2\pi jk/f) \\
+& & + i\sum_{j=1}^{(f-1)/2} (y_j + y_{f-j}) \cos(2\pi jk/f)
+ - (x_j - x_{f-j}) \sin(2\pi jk/f)
+\end{eqnarray}
+%
+by using the following trigonometric identities,
+%
+\begin{eqnarray}
+ \cos(2\pi(f-j)k/f) &=& \phantom{-}\cos(2\pi jk/f) \\
+ \sin(2\pi(f-j)k/f) &=& -\sin(2\pi jk/f)
+\end{eqnarray}
+%
+These remaining components can all be computed using four partial
+sums,
+%
+\begin{eqnarray}
+a_k + i b_k & = & (a^+_k - a^-_k) + i (b^+_k + b^-_k) \\
+a_{f-k} + i b_{f-k} & = & (a^+_k + a^-_k) + i (b^+_k - b^-_k)
+\end{eqnarray}
+%
+for $k = 1, 2, \dots, (f-1)/2$, where,
+%
+\begin{eqnarray}
+a^+_k &=& x_0 + \sum_{j=1}^{(f-1)/2} (x_j + x_{f-j}) \cos(2\pi jk/f) \\
+a^-_k &=& \phantom{x_0} - \sum_{j=1}^{(f-1)/2} (y_j - y_{f-j}) \sin(2\pi jk/f) \\
+b^+_k &=& y_0 + \sum_{j=1}^{(f-1)/2} (y_j + y_{f-j}) \cos(2\pi jk/f) \\
+b^-_k &=& \phantom{y_0} - \sum_{j=1}^{(f-1)/2} (x_j - x_{f-j}) \sin(2\pi jk/f)
+\end{eqnarray}
+%
+Note that the higher components $k'=f-k$ can be obtained directly
+without further computation once $a^+$, $a^-$, $b^+$ and $b^-$ are
+known. There are $4 \times (f-1)/2$ different sums, each involving
+$(f-1)/2$ real multiplications, giving a total of $(f-1)^2$ real
+multiplications instead of $(f-1)^2$ complex multiplications.
+
+To implement Singleton's method we make use of the input and output
+vectors $v$ and $v'$ as scratch space, copying data back and forth
+between them to obtain the final result. First we use $v'$ to store
+the terms of the symmetrized and anti-symmetrized vectors of the form
+$x_j + x_{f-j}$ and $x_j - y_{f-j}$. Then we multiply these by the
+appropriate trigonometric factors to compute the partial sums $a^+$,
+$a^-$, $b^+$ and $b^-$, storing the results $a_k + i b_k$ and $a_{f-k}
++ i b_{f-k}$ back in $v$. Finally we multiply the DFT output by any
+necessary twiddle factors and place the results in $v'$.
+
+\section{FFTs for real data}
+%
+This section is based on the articles {\em Fast Mixed-Radix Real
+ Fourier Transforms} by Clive Temperton~\cite{temperton83real} and
+{\em Real-Valued Fast Fourier Transform Algorithms} by Sorensen,
+Jones, Heideman and Burrus~\cite{burrus87real}. The DFT of a real
+sequence has a special symmetry, called a {\em conjugate-complex} or
+{\em half-complex} symmetry,
+%
+\begin{equation}
+h(a) = h(N-a)^*
+\end{equation}
+%
+The element $h(0)$ is real, and when $N$ is even $h(N/2)$ is also
+real. It is straightforward to prove the symmetry,
+%
+\begin{eqnarray}
+h(a) &=& \sum W^{ab}_N g(b) \\
+h(N-a)^* &=& \sum W^{-(N-a)b}_N g(b)^* \\
+ &=& \sum W^{-Nb}_N W^{ab}_N g(b) \qquad{(W^N_N=1)} \\
+ &=& \sum W^{ab}_N g(b)
+\end{eqnarray}
+%
+Real-valued data is very common in practice (perhaps more common that
+complex data) so it is worth having efficient FFT routines for real
+data. In principle an FFT for real data should need half the
+operations of an FFT on the equivalent complex data (where the
+imaginary parts are set to zero). There are two different strategies
+for computing FFTs of real-valued data:
+
+One strategy is to ``pack'' the real data (of length $N$) into a
+complex array (of length $N/2$) by index transformations. A complex
+FFT routine can then be used to compute the transform of that array.
+By further index transformations the result can actually by
+``unpacked'' to the FFT of the original real data. It is also possible
+to do two real FFTs simultaneously by packing one in the real part and
+the other in the imaginary part of the complex array. These
+techniques have some disadvantages. The packing and unpacking
+procedures always add $O(N)$ operations, and packing a real array of
+length $N$ into a complex array of length $N/2$ is only possible if
+$N$ is even. In addition, if two unconnected datasets with very
+different magnitudes are packed together in the same FFT there could
+be ``cross-talk'' between them due to a loss of precision.
+
+A more straightforward strategy is to start with an FFT algorithm,
+such as the complex mixed-radix algorithm, and prune out all the
+operations involving the zero imaginary parts of the initial data. The
+FFT is linear so the imaginary part of the data can be decoupled from
+the real part. This procedure leads to a dedicated FFT for real-valued
+data which works for any length and does not perform any unnecessary
+operations. It also allows us to derive a corresponding inverse FFT
+routine which transforms a half-complex sequence back into real data.
+
+\subsection{Radix-2 FFTs for real data}
+%
+Before embarking on the full mixed-radix real FFT we'll start with the
+radix-2 case. It contains all the essential features of the
+general-$N$ algorithm. To make it easier to see the analogy between
+the two we will use the mixed-radix notation to describe the
+factors. The factors are all 2,
+%
+\begin{equation}
+f_1 = 2, f_2 = 2, \dots, f_{n_f} = 2
+\end{equation}
+%
+and the products $p_i$ are powers of 2,
+%
+\begin{eqnarray}
+p_0 & = & 1 \\
+p_1 & = & f_1 = 2 \\
+p_2 & = & f_1 f_2 = 4 \\
+\dots &=& \dots \\
+p_i & = & f_1 f_2 \dots f_i = 2^i
+\end{eqnarray}
+%
+Using this notation we can rewrite the radix-2 decimation-in-time
+algorithm as,
+%
+\begin{algorithm}
+\STATE bit-reverse ordering of $g$
+\FOR {$i = 1 \dots n$}
+ \FOR {$a = 0 \dots p_{i-1} - 1$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$
+ \left(
+ \begin{array}{c}
+ g(b p_i + a) \\
+ g(b p_i + p_{i-1} + a)
+ \end{array}
+ \right)
+ =
+ \left(
+ \begin{array}{c}
+ g(b p_i + a) + W^a_{p_i} g(b p_i + p_{i-1} + a) \\
+ g(b p_i + a) - W^a_{p_i} g(b p_i + p_{i-1} + a)
+ \end{array}
+ \right) $}
+ \ENDFOR
+ \ENDFOR
+\ENDFOR
+\end{algorithm}
+%
+where we have used $p_i = 2 \Delta$, and factored $2 \Delta$ out of
+the original definition of $b$ ($b \to b p_i$).
+
+If we go back to the original recurrence relations we can see how to
+write the intermediate results in a way which make the
+real/half-complex symmetries explicit at each step. The first pass is
+just a set of FFTs of length-2 on real values,
+%
+\begin{equation}
+g_1([b_0 b_1 b_2 a_0]) = \sum_{b_3} W^{a_0 b_3}_2 g([b_0 b_1 b_2 b_3])
+\end{equation}
+%
+Using the symmetry $FFT(x)_k = FFT(x)^*_{N-k}$ we have the reality
+condition,
+%
+\begin{eqnarray}
+g_1([b_0 b_1 b_2 0]) &=& \mbox{real} \\
+g_1([b_0 b_1 b_2 1]) &=& \mbox{real'}
+\end{eqnarray}
+%
+In the next pass we have a set of length-4 FFTs on the original data,
+%
+\begin{eqnarray}
+g_2([b_0 b_1 b_1 a_0])
+&=&
+\sum_{b_2}\sum_{b_3}
+W^{[a_1 a_0]b_2}_4 W^{a_0 b_3}_2
+g([b_0 b_1 b_2 b_3]) \\
+&=&
+\sum_{b_2}\sum_{b_3}
+W^{[a_1 a_0][b_3 b_2]}_4
+g([b_0 b_1 b_2 b_3])
+\end{eqnarray}
+%
+This time symmetry gives us the following conditions on the
+transformed data,
+%
+\begin{eqnarray}
+g_2([b_0 b_1 0 0]) &=& \mbox{real} \\
+g_2([b_0 b_1 0 1]) &=& x + i y \\
+g_2([b_0 b_1 1 0]) &=& \mbox{real'} \\
+g_2([b_0 b_1 1 1]) &=& x - i y
+\end{eqnarray}
+%
+We can see a pattern emerging here: the $i$-th pass computes a set of
+independent length-$2^i$ FFTs on the original real data,
+%
+\begin{eqnarray}
+g_i ( b p_i + a ) = \sum_{a' = 0}^{p_i-1} W_{p_i}^{aa'} g(b p_i + a')
+\quad
+\mbox{for $b = 0 \dots q_i - 1$}
+\end{eqnarray}
+%
+As a consequence the we can apply the symmetry for an FFT of real data
+to all the intermediate results -- not just the final result.
+In general after the $i$-th pass we will
+have the symmetry,
+%
+\begin{eqnarray}
+g_i(b p_i) &=& \mbox{real} \\
+g_i(b p_i + a) &=& g_i(b p_i + p_i - a)^* \qquad a = 1 \dots p_{i}/2 - 1 \\
+g_i(b p_i + p_{i}/2) &=& \mbox{real'}
+\end{eqnarray}
+%
+In the next section we'll show that this is a general property of
+decimation-in-time algorithms. The same is not true for the
+decimation-in-frequency algorithm, which does not have any simple
+symmetries in the intermediate results.
+
+Since we can obtain the values of $g_i(b p_i + a)$ for $a > p_i/2$
+from the values for $a < p_i/2$ we can cut our computation and
+storage in half compared with the full-complex case.
+%
+We can easily rewrite the algorithm to show how the computation can be
+halved, simply by limiting all terms to involve only values for $a
+\leq p_{i}/2$. Whenever we encounter a term $g_i(b p_i + a)$ with $a >
+p_{i}/2$ we rewrite it in terms of its complex symmetry partner,
+$g_i(b p_i + a')^*$, where $a' = p_i - a$. The butterfly computes two
+values for each value of $a$, $b p_i + a$ and $b p_i + p_{i-1} - a$,
+so we actually only need to compute from $a = 0$ to $p_{i-1}/2$. This
+gives the following algorithm,
+%
+\begin{algorithm}
+\FOR {$a = 0 \dots p_{i-1}/2$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$
+ \left(
+ \begin{array}{c}
+ g(b p_i + a) \\
+ g(b p_i + p_{i-1} - a)^*
+ \end{array}
+ \right)
+ =
+ \left(
+ \begin{array}{c}
+ g(b p_{i} + a) + W^a_{p_i} g(b p_i + p_{i-1} + a) \\
+ g(b p_{i} + a) - W^a_{p_i} g(b p_i + p_{i-1} + a)
+ \end{array}
+ \right) $}
+ \ENDFOR
+ \ENDFOR
+\end{algorithm}
+%
+Although we have halved the number of operations we also need a
+storage arrangement which will halve the memory requirement. The
+algorithm above is still formulated in terms of a complex array $g$,
+but the input to our routine will naturally be an array of $N$ real
+values which we want to use in-place.
+
+Therefore we need a storage scheme which lays out the real and
+imaginary parts within the real array, in a natural way so that there
+is no need for complicated index calculations. In the radix-2
+algorithm we do not have any additional scratch space. The storage
+scheme has to be designed to accommodate the in-place calculation
+taking account of dual node pairs.
+
+Here is a scheme which takes these restrictions into account: On the
+$i$-th pass we store the real part of $g(b p_i + a)$ in location $b
+p_i + a$. We store the imaginary part in location $b p_i + p_i -
+a$. This is the redundant location which corresponds to the conjugate
+term $g(b p_i + a)^* = g(b p_i + p_i -a)$, so it is not needed. When
+the results are purely real (as in the case $a = 0$ and $a = p_i/2$ we
+store only the real part and drop the zero imaginary part).
+
+This storage scheme has to work in-place, because the radix-2 routines
+should not use any scratch space. We will now check the in-place
+property for each butterfly. A crucial point is that the scheme is
+pass-dependent. Namely, when we are computing the result for pass $i$
+we are reading the results of pass $i-1$, and we must access them
+using the scheme from the previous pass, i.e. we have to remember that
+the results from the previous pass were stored using $b p_{i-1} + a$,
+not $b p_i + a$, and the symmetry for these results will be $g_{i-1}(b
+p_{i-1} + a) = g_{i-1}(b p_{i-1} + p_{i-1} - a)^*$. To take this into
+account we'll write the right hand side of the iteration, $g_{i-1}$,
+in terms of $p_{i-1}$. For example, instead of $b p_i$, which occurs
+naturally in $g_i(b p_i + a)$ we will use $2 b p_{i-1}$, since $p_i =
+2 p_{i-1}$.
+
+Let's start with the butterfly for $a = 0$,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g(b p_i) \\
+g(b p_i + p_{i-1})^*
+\end{array}
+\right)
+=
+\left(
+\begin{array}{c}
+g(2 b p_{i-1}) + g((2 b + 1) p_{i-1}) \\
+g(2 b p_{i-1}) - g((2 b + 1) p_{i-1})
+\end{array}
+\right)
+\end{equation}
+%
+By the symmetry $g_{i-1}(b p_{i-1} + a) = g_{i-1}(b p_{i-1} + p_{i-1}
+- a)^*$ all the inputs are purely real. The input $g(2 b p_{i-1})$ is
+read from location $2 b p_{i-1}$ and $g((2 b + 1) p_{i-1})$ is read
+from the location $(2 b + 1) p_{i-1}$. Here is the full breakdown,
+%
+\begin{center}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|lll|}
+\hline Term & & Location & \\
+\hline
+$g(2 b p_{i-1})$
+ & real part & $2 b p_{i-1} $ &$= b p_i$ \\
+ & imag part & --- & \\
+$g((2 b+1) p_{i-1})$
+ & real part & $(2 b + 1) p_{i-1} $&$= b p_i + p_{i-1} $ \\
+ & imag part & --- & \\
+\hline
+$g(b p_{i})$
+ & real part & $b p_i$ &\\
+ & imag part & --- & \\
+$g(b p_{i} + p_{i-1})$
+ & real part & $b p_i + p_{i-1}$& \\
+ & imag part & --- & \\
+\hline
+\end{tabular}
+\end{center}
+%
+The conjugation of the output term $g(b p_i + p_{i-1})^*$ is
+irrelevant here since the results are purely real. The real results
+are stored in locations $b p_i$ and $b p_i + p_{i-1}$, which
+overwrites the inputs in-place.
+
+The general butterfly for $a = 1 \dots p_{i-1}/2 - 1$ is,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g(b p_i + a) \\
+g(b p_i + p_{i-1} - a)^*
+\end{array}
+\right)
+=
+\left(
+\begin{array}{c}
+g(2 b p_{i-1} + a) + W^a_{p_i} g((2 b + 1) p_{i-1} + a) \\
+g(2 b p_{i-1} + a) - W^a_{p_i} g((2 b + 1) p_{i-1} + a)
+\end{array}
+\right)
+\end{equation}
+%
+All the terms are complex. To store a conjugated term like $g(b' p_i +
+a')^*$ where $a > p_i/2$ we take the real part and store it in
+location $b' p_i + a'$ and then take imaginary part, negate it, and
+store the result in location $b' p_i + p_i - a'$.
+
+Here is the full breakdown of the inputs and outputs from the
+butterfly,
+%
+\begin{center}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|lll|}
+\hline Term & & Location & \\
+\hline
+$g(2 b p_{i-1} + a)$
+ & real part & $2 b p_{i-1} + a $ &$= b p_i + a$ \\
+ & imag part & $2 b p_{i-1} + p_{i-1} - a$ &$= b p_i + p_{i-1} - a$ \\
+$g((2 b+1) p_{i-1} + a)$
+ & real part & $(2 b+1) p_{i-1} + a $&$= b p_i + p_{i-1} + a $ \\
+ & imag part & $(2 b+1) p_{i-1} + p_{i-1} - a $&$= b p_i + p_i - a$\\
+\hline
+$g(b p_{i} + a)$
+ & real part & $b p_i + a$ &\\
+ & imag part & $b p_i + p_i - a$& \\
+$g(b p_{i} + p_{i-1} - a)$
+ & real part & $b p_i + p_{i-1} - a$& \\
+ & imag part & $b p_i + p_{i-1} + a$& \\
+\hline
+\end{tabular}
+\end{center}
+%
+By comparing the input locations and output locations we can see
+that the calculation is done in place.
+
+The final butterfly for $a = p_{i-1}/2$ is,
+%
+\begin{equation}
+\left(
+\begin{array}{c}
+g(b p_i + p_{i-1}/2) \\
+g(b p_i + p_{i-1} - p_{i-1}/2)^*
+\end{array}
+\right)
+=
+\left(
+\begin{array}{c}
+g(2 b p_{i-1} + p_{i-1}/2) - i g((2 b + 1) p_{i-1} + p_{i-1}/2) \\
+g(2 b p_{i-1} + p_{i-1}/2) + i g((2 b + 1) p_{i-1} + p_{i-1}/2)
+\end{array}
+\right)
+\end{equation}
+%
+where we have substituted for the twiddle factor, $W^a_{p_i} = -i$,
+%
+\begin{eqnarray}
+W^{p_{i-1}/2}_{p_i} &=& \exp(-2\pi i p_{i-1}/2 p_i) \\
+ &=& \exp(-2\pi i /4) \\
+ &=& -i
+\end{eqnarray}
+%
+For this butterfly the second line is just the conjugate of the first,
+because $p_{i-1} - p_{i-1}/2 = p_{i-1}/2$. Therefore we only need to
+consider the first line. The breakdown of the inputs and outputs is,
+%
+\begin{center}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|lll|}
+\hline Term & & Location & \\
+\hline
+$g(2 b p_{i-1} + p_{i-1}/2)$
+ & real part & $2 b p_{i-1} + p_{i-1}/2 $ &$= b p_i + p_{i-1}/2$ \\
+ & imag part & --- & \\
+$g((2 b + 1) p_{i-1} + p_{i-1}/2)$
+ & real part & $(2 b + 1) p_{i-1} + p_{i-1}/2 $&$= b p_i + p_{i} - p_{i-1}/2 $ \\
+ & imag part & --- & \\
+\hline
+$g(b p_{i} + p_{i-1}/2)$
+ & real part & $b p_i + p_{i-1}/2$ &\\
+ & imag part & $b p_i + p_i - p_{i-1}/2$& \\
+\hline
+\end{tabular}
+\end{center}
+%
+By comparing the locations of the inputs and outputs with the
+operations in the butterfly we find that this computation is very
+simple: the effect of the butterfly is to negate the location $b p_i +
+p_i - p_{i-1}/2$ and leave other locations unchanged. This is clearly
+an in-place operation.
+
+Here is the radix-2 algorithm for real data, in full, with the cases
+of $a=0$, $a=1\dots p_{i-1}/2 - 1$ and $a = p_{i-1}/2$ in separate
+blocks,
+%
+\begin{algorithm}
+\STATE bit-reverse ordering of $g$
+\FOR {$i = 1 \dots n$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$\left(
+ \begin{array}{c}
+ g(b p_i) \\
+ g(b p_i + p_{i-1})
+ \end{array}
+ \right)
+ \Leftarrow
+ \left(
+ \begin{array}{c}
+ g(b p_{i}) + g(b p_{i} + p_{i-1}) \\
+ g(b p_{i}) - g(b p_{i} + p_{i-1})
+ \end{array}
+ \right)$}
+ \ENDFOR
+
+ \FOR {$a = 1 \dots p_{i-1}/2 - 1$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$(\Real z_0, \Imag z_0) \Leftarrow
+ (g(b p_i + a), g(b p_i + p_{i-1} - a))$}
+ \STATE{$(\Real z_1, \Imag z_1) \Leftarrow
+ (g(b p_i + p_{i-1} + a), g(b p_i + p_{i} - a))$}
+ \STATE{$t_0 \Leftarrow z_0 + W^a_{p_i} z_1$}
+ \STATE{$t_1 \Leftarrow z_0 - W^a_{p_i} z_1$}
+ \STATE{$(g(b p_{i} + a),g(b p_{i} + p_i - a) \Leftarrow
+ (\Real t_0, \Imag t_0)$}
+ \STATE{$(g(b p_{i} + p_{i-1} - a), g(b p_{i} + p_{i-1} + a))
+ \Leftarrow
+ (\Real t_1, -\Imag t_1)$}
+ \ENDFOR
+ \ENDFOR
+
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$g(b p_{i} - p_{i-1}/2) \Leftarrow -g(b p_{i} - p_{i-1}/2)$}
+ \ENDFOR
+
+\ENDFOR
+\end{algorithm}
+%
+We split the loop over $a$ into three parts, $a=0$, $a=1\dots
+p_{i-1}/2-1$ and $a = p_{i-1}/2$ for efficiency. When $a=0$ we have
+$W^a_{p_i}=1$ so we can eliminate a complex multiplication within the
+loop over $b$. When $a=p_{i-1}/2$ we have $W^a_{p_i} = -i$ which does
+not require a full complex multiplication either.
+
+
+\subsubsection{Calculating the Inverse}
+%
+The inverse FFT of complex data was easy to calculate, simply by
+taking the complex conjugate of the DFT matrix. The input data and
+output data were both complex and did not have any special
+symmetry. For real data the inverse FFT is more complicated because
+the half-complex symmetry of the transformed data is
+different from the purely real input data.
+
+We can compute an inverse by stepping backwards through the forward
+transform. To simplify the inversion it's convenient to write the
+forward algorithm with the butterfly in matrix form,
+%
+\begin{algorithm}
+\FOR {$i = 1 \dots n$}
+ \FOR {$a = 0 \dots p_{i-1}/2$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$
+ \left(
+ \begin{array}{c}
+ g(b p_i + a) \\
+ g(b p_i + p_{i-1} + a)
+ \end{array}
+ \right)
+ =
+ \left(
+ \begin{array}{cc}
+ 1 & W^a_{p_{i}} \\
+ 1 & -W^a_{p_{i}}
+ \end{array}
+ \right)
+ \left(
+ \begin{array}{c}
+ g(2 b p_{i-1} + a) \\
+ g((2 b + 1) p_{i-1} + a)
+ \end{array}
+ \right) $}
+ \ENDFOR
+ \ENDFOR
+\ENDFOR
+\end{algorithm}
+%
+To invert the algorithm we run the iterations backwards and invert the
+matrix multiplication in the innermost loop,
+%
+\begin{algorithm}
+\FOR {$i = n \dots 1$}
+ \FOR {$a = 0 \dots p_{i-1}/2$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$
+ \left(
+ \begin{array}{c}
+ g(2 b p_{i-1} + a) \\
+ g((2 b + 1) p_{i-1} + a)
+ \end{array}
+ \right)
+ =
+ \left(
+ \begin{array}{cc}
+ 1 & W^a_{p_{i}} \\
+ 1 & -W^a_{p_{i}}
+ \end{array}
+ \right)^{-1}
+ \left(
+ \begin{array}{c}
+ g(b p_i + a) \\
+ g(b p_i + p_{i-1} + a)
+ \end{array}
+ \right) $}
+ \ENDFOR
+ \ENDFOR
+\ENDFOR
+\end{algorithm}
+%
+There is no need to reverse the loops over $a$ and $b$ because the
+result is independent of their order. The inverse of the matrix that
+appears is,
+%
+\begin{equation}
+\left(
+\begin{array}{cc}
+1 & W^a_{p_{i}} \\
+1 & -W^a_{p_{i}}
+\end{array}
+\right)^{-1}
+=
+{1 \over 2}
+\left(
+\begin{array}{cc}
+1 & 1 \\
+W^{-a}_{p_{i}} & -W^{-a}_{p_{i}}
+\end{array}
+\right)
+\end{equation}
+%
+To save divisions we remove the factor of $1/2$ inside the loop. This
+computes the unnormalized inverse, and the normalized inverse can be
+retrieved by dividing the final result by $N = 2^n$.
+
+Here is the radix-2 half-complex to real inverse FFT algorithm, taking
+into account the radix-2 storage scheme,
+%
+\begin{algorithm}
+\FOR {$i = n \dots 1$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$\left(
+ \begin{array}{c}
+ g(b p_i) \\
+ g(b p_i + p_{i-1})
+ \end{array}
+ \right)
+ \Leftarrow
+ \left(
+ \begin{array}{c}
+ g(b p_{i}) + g(b p_{i} + p_{i-1}) \\
+ g(b p_{i}) - g(b p_{i} + p_{i-1})
+ \end{array}
+ \right)$}
+ \ENDFOR
+
+ \FOR {$a = 1 \dots p_{i-1}/2 - 1$}
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$(\Real z_0, \Imag z_0)
+ \Leftarrow
+ (g(b p_i + a), g(b p_i + p_{i} - a))$}
+ \STATE{$(\Real z_1, \Imag z_1)
+ \Leftarrow
+ (g(b p_i + p_{i-1} - a), -g(b p_i + p_{i-1} + a))$}
+ \STATE{$t_0 \Leftarrow z_0 + z_1$}
+ \STATE{$t_1 \Leftarrow z_0 - z_1$}
+ \STATE{$(g(b p_{i} + a), g(b p_{i} + p_{i-1} - a))
+ \Leftarrow
+ (\Real t_0, \Imag t_0) $}
+ \STATE{$(g(b p_{i} + p_{i-1} + a),g(b p_{i} + p_{i} - a))
+ \Leftarrow
+ (\Real(W^a_{p_i}t_1), \Imag(W^a_{p_i}t_1))$}
+ \ENDFOR
+ \ENDFOR
+
+ \FOR{$b = 0 \dots q_i - 1$}
+ \STATE{$g(b p_{i} + p_{i-1}/2) \Leftarrow 2 g(b p_{i} + p_{i-1}/2)$}
+ \STATE{$g(b p_{i} + p_{i-1} + p_{i-1}/2) \Leftarrow -2 g(b p_{i} + p_{i-1} + p_{i-1}/2)$}
+ \ENDFOR
+
+\ENDFOR
+\STATE bit-reverse ordering of $g$
+\end{algorithm}
+
+
+
+\subsection{Mixed-Radix FFTs for real data}
+%
+As discussed earlier the radix-2 decimation-in-time algorithm had the
+special property that its intermediate passes are interleaved fourier
+transforms of the original data, and this generalizes to the
+mixed-radix algorithm. The complex mixed-radix algorithm that we
+derived earlier was a decimation-in-frequency algorithm, but we can
+obtain a decimation-in-time version by taking the transpose of the
+decimation-in-frequency DFT matrix like this,
+%
+\begin{eqnarray}
+W_N &=& W_N^T \\
+&=& (T_{n_f} \dots T_2 T_1)^T \\
+&=& T_1^T T_2^T \dots T_{n_f}^T
+\end{eqnarray}
+%
+with,
+%
+\begin{eqnarray}
+T_i^T &=& \left( (P^{f_i}_{q_i} D^{f_i}_{q_i} \otimes I_{p_{i-1}})
+ (W_{f_i} \otimes I_{m_i}) \right)^T \\
+ &=& (W_{f_i} \otimes I_{m_i})
+ ( D^{f_i}_{q_i} (P^{f_i}_{q_i})^T \otimes I_{p_{i-1}}).
+\end{eqnarray}
+%
+We have used the fact that $W$, $D$ and $I$ are symmetric and that the
+permutation matrix $P$ obeys,
+%
+\begin{equation}
+(P^a_b)^T = P^b_a.
+\end{equation}
+%
+From the definitions of $D$ and $P$ we can derive the following identity,
+%
+\begin{equation}
+D^a_b P^b_a = P^b_a D^b_a.
+\end{equation}
+%
+This allows us to put the transpose into a simple form,
+%
+\begin{equation}
+T_i^T = (W_{f_i} \otimes I_{m_i})
+ (P^{q_i}_{f_i} D^{q_i}_{f_i} \otimes I_{p_{i-1}}).
+\end{equation}
+%
+The transposed matrix, $T^T$ applies the digit-reversal $P$ before the
+DFT $W$, giving the required decimation-in-time algorithm. The
+transpose reverses the order of the factors --- $T_{n_f}$ is applied
+first and $T_1$ is applied last. For convenience we can reverse the
+order of the factors, $f_1 \leftrightarrow f_{n_f}$, $f_2
+\leftrightarrow f_{n_f-1}$, \dots and make the corresponding
+substitution $p_{i-1} \leftrightarrow q_i$. These substitutions give
+us a decimation-in-time algorithm with the same ordering as the
+decimation-in-frequency algorithm,
+%
+\begin{equation}
+W_N = T_{n_f} \dots T_2 T_1
+\end{equation}
+%
+\begin{equation}
+T_i = (W_{f_i} \otimes I_{m_i})
+ (P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i} \otimes I_{q_i})
+\end{equation}
+%
+where $p_i$, $q_i$ and $m_i$ now have the same meanings as before,
+namely,
+%
+\begin{eqnarray}
+p_i &=& f_1 f_2 \dots f_i \quad (p_0 = 1) \\
+q_i &=& N / p_i \\
+m_i &=& N / f_i
+\end{eqnarray}
+%
+Now we would like to prove that the iteration for computing $x = W z =
+T_{n_f} \dots T_2 T_1 z$ has the special property interleaving
+property. If we write the result of each intermediate pass as
+$v^{(i)}$,
+%
+\begin{eqnarray}
+v^{(0)} &=& z \\
+v^{(1)} &=& T_1 v^{(0)} \\
+v^{(2)} &=& T_2 v^{(1)} \\
+\dots &=& \dots \\
+v^{(i)} &=& T_i v^{(i-1)}
+\end{eqnarray}
+%
+then we will show that the intermediate results $v^{(i)}$ on any pass
+can be written as,
+%
+\begin{equation}
+v^{(i)} = (W_{p_i} \otimes I_{q_i}) z
+\end{equation}
+%
+Each intermediate stage will be a set of $q_i$ interleaved fourier
+transforms, each of length $p_i$. We can prove this result by
+induction. First we assume that the result is true for $v^{(i-1)}$,
+%
+\begin{equation}
+v^{(i-1)} = (W_{p_{i-1}} \otimes I_{q_{i-1}}) z \qquad \mbox{(assumption)}
+\end{equation}
+%
+And then we examine the next iteration using this assumption,
+%
+\begin{eqnarray}
+v^{(i)} &=& T_i v^{(i-1)} \\
+ &=& T_i (W_{p_{i-1}} \otimes I_{q_{i-1}}) z \\
+ &=& (W_{f_i} \otimes I_{m_i})
+ (P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i} \otimes I_{q_i})
+ (W_{p_{i-1}} \otimes I_{q_{i-1}}) z \label{dit-induction}
+\end{eqnarray}
+%
+Using the relation $m_i = p_{i-1} q_i$, we can write $I_{m_i}$ as
+$I_{p_{i-1} q_i}$ and $I_{q_{i-1}}$ as $I_{f_i q_i}$. By combining these
+with the basic matrix identity,
+%
+\begin{equation}
+I_{ab} = I_a \otimes I_b
+\end{equation}
+%
+we can rewrite $v^{(i)}$ in the following form,
+%
+\begin{equation}
+v^{(i)} = (((W_{f_i} \otimes I_{p_{i-1}})
+ (P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i})
+ (W_{p_{i-1}} \otimes I_{f_i})) \otimes I_{q_i}) z .
+\end{equation}
+%
+The first part of this matrix product is the two-factor expansion of
+$W_{ab}$, for $a = p_{i-1}$ and $b = f_i$,
+%
+\begin{equation}
+W_{p_{i-1} f_i} = ((W_{f_i} \otimes I_{p_{i-1}})
+ (P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i})
+ (W_{p_{i-1}} \otimes I_{f_i})).
+\end{equation}
+%
+If we substitute this result, remembering that $p_i = p_{i-1} f_i$, we
+obtain,
+%
+\begin{equation}
+v^{(i)} = (W_{p_i} \otimes I_{q_i}) z
+\end{equation}
+%
+which is the desired result. The case $i=1$ can be verified
+explicitly, and induction then shows that the result is true for all
+$i$. As discussed for the radix-2 algorithm this result is important
+because if the initial data $z$ is real then each intermediate pass is
+a set of interleaved fourier transforms of $z$, having half-complex
+symmetries (appropriately applied in the subspaces of the Kronecker
+product). Consequently only $N$ real numbers are needed to store the
+intermediate and final results.
+
+\subsection{Implementation}
+%
+The implementation of the mixed-radix real FFT algorithm follows the
+same principles as the full complex transform. Some of the steps are
+applied in the opposite order because we are dealing with a decimation
+in time algorithm instead of a decimation in frequency algorithm, but
+the basic outer structure of the algorithm is the same. We want to
+apply the factorized version of the DFT matrix $W_N$ to the input
+vector $z$,
+%
+\begin{eqnarray}
+x &=& W_N z \\
+ &=& T_{n_f} \dots T_2 T_1 z
+\end{eqnarray}
+%
+We loop over the $n_f$ factors, applying each matrix $T_i$ to the
+vector in turn to build up the complete transform,
+%
+\begin{algorithm}
+\FOR{$(i = 1 \dots n_f)$}
+ \STATE{$v \Leftarrow T_i v $}
+\ENDFOR
+\end{algorithm}
+%
+In this case the definition of $T_i$ is different because we have
+taken the transpose,
+%
+\begin{equation}
+T_i =
+ (W_{f_i} \otimes I_{m_i})
+ (P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i} \otimes I_{q_i}).
+\end{equation}
+%
+We'll define a temporary vector $t$ to denote the results of applying the
+rightmost matrix,
+%
+\begin{equation}
+t = (P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i} \otimes I_{q_i}) v
+\end{equation}
+%
+If we expand this out into individual components, as before, we find a
+similar simplification,
+%
+\begin{eqnarray}
+t_{aq+b}
+&=&
+\sum_{a'b'}
+(P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i} \otimes I_{q_i})_{(aq+b)(a'q+b')}
+v_{a'q+b'} \\
+&=&
+\sum_{a'}
+(P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i})_{a a'}
+v_{a'q+b}
+\end{eqnarray}
+%
+We have factorized the indices into the form $aq+b$, with $0 \leq a <
+p_{i}$ and $0 \leq b < q$. Just as in the decimation in frequency
+algorithm we can split the index $a$ to remove the matrix
+multiplication completely. We have to write $a$ as $\mu f + \lambda$,
+where $0 \leq \mu < p_{i-1}$ and $0 \leq \lambda < f$,
+%
+\begin{eqnarray}
+t_{(\mu f + \lambda)q+b}
+&=&
+\sum_{\mu'\lambda'}
+(P^{p_{i-1}}_{f_i} D^{p_{i-1}}_{f_i})_{(\mu f + \lambda)(\mu' f + \lambda')}
+v_{(\mu' f + \lambda')q+b}
+\\
+&=&
+\sum_{\mu'\lambda'}
+(P^{p_{i-1}}_{f_i})_{(\mu f + \lambda)(\mu' f + \lambda')}
+\omega^{\mu'\lambda'}_{p_{i}}
+v_{(\mu' f + \lambda')q+b}
+\end{eqnarray}
+%
+The matrix $P^{p_{i-1}}_{f_i}$ exchanges an index of $(\mu f +
+\lambda) q + b$ with $(\lambda p_{i-1} + \mu) q + b$, giving a final
+result of,
+%
+\begin{eqnarray}
+t_{(\lambda p_{i-1} + \mu) q + b}
+=
+w^{\mu\lambda}_{p_i} v_{(\mu f + \lambda)q +b}
+\end{eqnarray}
+%
+To calculate the next stage,
+%
+\begin{equation}
+v' = (W_{f_i} \otimes I_{m_i}) t,
+\end{equation}
+%
+we temporarily rearrange the index of $t$ to separate the $m_{i}$
+independent DFTs in the Kronecker product,
+%
+\begin{equation}
+v'_{(\lambda p_{i-1} + \mu) q + b}
+=
+\sum_{\lambda' \mu' b'}
+(W_{f_i} \otimes I_{m_i})_{
+((\lambda p_{i-1} + \mu) q + b)
+((\lambda' p_{i-1} + \mu') q + b')}
+t_{(\lambda' p_{i-1} + \mu') q + b'}
+\end{equation}
+%
+If we use the identity $m = p_{i-1} q$ to rewrite the index of $t$
+like this,
+%
+\begin{equation}
+t_{(\lambda p_{i-1} + \mu) q + b} = t_{\lambda m + (\mu q + b)}
+\end{equation}
+%
+we can split the Kronecker product,
+%
+\begin{eqnarray}
+v'_{(\lambda p_{i-1} + \mu) q + b}
+&=&
+\sum_{\lambda' \mu' b'}
+(W_{f_i} \otimes I_{m_i})_{
+((\lambda p_{i-1} + \mu) q + b)
+((\lambda' p_{i-1} + \mu') q + b')}
+t_{(\lambda' p_{i-1} + \mu') q + b'}\\
+&=&
+\sum_{\lambda'}
+(W_{f_i})_{\lambda \lambda'}
+t_{\lambda' m_i + (\mu q + b)}
+\end{eqnarray}
+%
+If we switch back to the original form of the index in the last line we obtain,
+%
+\begin{eqnarray}
+\phantom{v'_{(\lambda p_{i-1} + \mu) q + b}}
+&=&
+\sum_{\lambda'}
+(W_{f_i})_{\lambda \lambda'}
+t_{(\lambda p_{i-1} + \mu) q + b}
+\end{eqnarray}
+%
+which allows us to substitute our previous result for $t$,
+%
+\begin{equation}
+v'_{(\lambda p_{i-1} + \mu) q + b}
+=
+\sum_{\lambda'}
+(W_{f_i})_{\lambda \lambda'}
+w^{\mu\lambda'}_{p_i} v_{(\mu f + \lambda')q + b}
+\end{equation}
+%
+This gives us the basic decimation-in-time mixed-radix algorithm for
+complex data which we will be able to specialize to real data,
+%
+\begin{algorithm}
+\FOR{$i = 1 \dots n_f$}
+\FOR{$\mu = 0 \dots p_{i-1} - 1$}
+\FOR{$b = 0 \dots q-1$}
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$t_\lambda \Leftarrow
+ \omega^{\mu\lambda'}_{p_{i}} v_{(\mu f + \lambda')q + b}$}
+\ENDFOR
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$v'_{(\lambda p_{i-1} + \mu)q + b} =
+ \sum_{\lambda'=0}^{f-1} W_f(\lambda,\lambda') t_{\lambda'}$}
+ \COMMENT{DFT matrix-multiply module}
+\ENDFOR
+\ENDFOR
+\ENDFOR
+\STATE{$v \Leftarrow v'$}
+\ENDFOR
+\end{algorithm}
+%
+We are now at the point where we can convert an algorithm formulated
+in terms of complex variables to one in terms of real variables by
+choosing a suitable storage scheme. We will adopt the FFTPACK storage
+convention. FFTPACK uses a scheme where individual FFTs are
+contiguous, not interleaved, and real-imaginary pairs are stored in
+neighboring locations. This has better locality than was possible for
+the radix-2 case.
+
+The interleaving of the intermediate FFTs results from the Kronecker
+product, $W_p \otimes I_q$. The FFTs can be made contiguous if we
+reorder the Kronecker product on the intermediate passes,
+%
+\begin{equation}
+W_p \otimes I_q \Rightarrow I_q \otimes W_p
+\end{equation}
+%
+This can be implemented by a simple change in indexing. On pass-$i$
+we store element $v_{a q_i + b}$ in location $v_{b p_i+a}$. We
+compensate for this change by making the same transposition when
+reading the data. Note that this only affects the indices of the
+intermediate passes. On the zeroth iteration the transposition has no
+effect because $p_0 = 1$. Similarly there is no effect on the last
+iteration, which has $q_{n_f} = 1$. This is how the algorithm above
+looks after this index transformation,
+%
+\begin{algorithm}
+\FOR{$i = 1 \dots n_f$}
+\FOR{$\mu = 0 \dots p_{i-1} - 1$}
+\FOR{$b = 0 \dots q-1$}
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$t_\lambda \Leftarrow
+ \omega^{\mu\lambda'}_{p_{i}} v_{(\lambda'q + b)p_{i-1} + \mu}$}
+\ENDFOR
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$v'_{b p + (\lambda p_{i-1} + \mu)} =
+ \sum_{\lambda'=0}^{f-1} W_f(\lambda,\lambda') t_{\lambda'}$}
+ \COMMENT{DFT matrix-multiply module}
+\ENDFOR
+\ENDFOR
+\ENDFOR
+\STATE{$v \Leftarrow v'$}
+\ENDFOR
+\end{algorithm}
+%
+We transpose the input terms by writing the index in the form $a
+q_{i-1} + b$, to take account of the pass-dependence of the scheme,
+%
+\begin{equation}
+v_{(\mu f + \lambda')q + b} = v_{\mu q_{i-1} + \lambda'q + b}
+\end{equation}
+%
+We used the identity $q_{i-1} = f q$ to split the index. Note that in
+this form $\lambda'q + b$ runs from 0 to $q_{i-1} - 1$ as $b$ runs
+from 0 to $q-1$ and $\lambda'$ runs from 0 to $f-1$. The transposition
+for the input terms then gives,
+%
+\begin{equation}
+v_{\mu q_{i-1} + \lambda'q + b} \Rightarrow v_{(\lambda'q + b) p_{i-1} + \mu}
+\end{equation}
+%
+In the FFTPACK scheme the intermediate output data have the same
+half-complex symmetry as the radix-2 example, namely,
+%
+\begin{equation}
+v^{(i)}_{b p + a} = v^{(i)*}_{b p + (p - a)}
+\end{equation}
+%
+and on the input data from the previous pass have the symmetry,
+%
+\begin{equation}
+v^{(i-1)}_{(\lambda' q + b) p_{i-1} + \mu} = v^{(i-1)*}_{(\lambda' q +
+b) p_{i-1} + (p_{i-1} - \mu)}
+\end{equation}
+%
+Using these symmetries we can halve the storage and computation
+requirements for each pass. Compared with the radix-2 algorithm we
+have more freedom because the computation does not have to be done in
+place. The storage scheme adopted by FFTPACK places elements
+sequentially with real and imaginary parts in neighboring
+locations. Imaginary parts which are known to be zero are not
+stored. Here are the full details of the scheme,
+%
+\begin{center}
+\renewcommand{\arraystretch}{1.5}
+\begin{tabular}{|l|lll|}
+\hline Term & & Location & \\
+\hline
+$g(b p_i)$
+ & real part & $b p_{i} $ & \\
+ & imag part & --- & \\
+\hline
+$g(b p_i + a)$
+ & real part & $b p_{i} + 2a - 1 $& for $a = 1 \dots p_i/2 - 1$ \\
+ & imag part & $b p_{i} + 2a$ & \\
+\hline
+$g(b p_{i} + p_{i}/2)$
+ & real part & $b p_i + p_{i} - 1$ & if $p_i$ is even\\
+ & imag part & --- & \\
+\hline
+\end{tabular}
+\end{center}
+%
+The real element for $a=0$ is stored in location $bp$. The real parts
+for $a = 1 \dots p/2 - 1$ are stored in locations $bp + 2a -1$ and the
+imaginary parts are stored in locations $b p + 2 a$. When $p$ is even
+the term for $a = p/2$ is purely real and we store it in location $bp
++ p - 1$. The zero imaginary part is not stored.
+
+When we compute the basic iteration,
+%
+\begin{equation}
+v^{(i)}_{b p + (\lambda p_{i-1} + \mu)} = \sum_{\lambda'}
+W^{\lambda \lambda'}_f
+\omega^{\mu\lambda'}_{p_i} v^{(i-1)}_{(\lambda' q + b)p_{i-1} + \mu}
+\end{equation}
+%
+we eliminate the redundant conjugate terms with $a > p_{i}/2$ as we
+did in the radix-2 algorithm. Whenever we need to store a term with $a
+> p_{i}/2$ we consider instead the corresponding conjugate term with
+$a' = p - a$. Similarly when reading data we replace terms with $\mu >
+p_{i-1}/2$ with the corresponding conjugate term for $\mu' = p_{i-1} -
+\mu$.
+
+Since the input data on each stage has half-complex symmetry we only
+need to consider the range $\mu=0 \dots p_{i-1}/2$. We can consider
+the best ways to implement the basic iteration for each pass, $\mu = 0
+\dots p_{i-1}/2$.
+
+On the first pass where $\mu=0$ we will be accessing elements which
+are the zeroth components of the independent transforms $W_{p_{i-1}}
+\otimes I_{q_{i-1}}$, and are purely real.
+%
+We can code the pass with $\mu=0$ as a special case for real input
+data, and conjugate-complex output. When $\mu=0$ the twiddle factors
+$\omega^{\mu\lambda'}_{p_i}$ are all unity, giving a further saving.
+We can obtain small-$N$ real-data DFT modules by removing the
+redundant operations from the complex modules.
+%
+For example the $N=3$ module was,
+%
+\begin{equation}
+\begin{array}{lll}
+t_1 = z_1 + z_2, &
+t_2 = z_0 - t_1/2, &
+t_3 = \sin(\pi/3) (z_1 - z_2),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+x_0 = z_0 + t_1, &
+x_1 = t_2 + i t_3, &
+x_2 = t_2 - i t_3.
+\end{array}
+\end{equation}
+%
+In the complex case all the operations were complex, for complex input
+data $z_0$, $z_1$, $z_2$. In the real case $z_0$, $z_1$ and $z_2$ are
+all real. Consequently $t_1$, $t_2$ and $t_3$ are also real, and the
+symmetry $x_1 = t_1 + i t_2 = x^*_2$ means that we do not have to
+compute $x_2$ once we have computed $x_1$.
+
+For subsequent passes $\mu = 1 \dots p_{i-1}/2 - 1$ the input data is
+complex and we have to compute full complex DFTs using the same
+modules as in the complex case. Note that the inputs are all of the
+form $v_{(\lambda q + b) p_{i-1} + \mu}$ with $\mu < p_{i-1}/2$ so we
+never need to use the symmetry to access the conjugate elements with
+$\mu > p_{i-1}/2$.
+
+If $p_{i-1}$ is even then we reach the halfway point $\mu=p_{i-1}/2$,
+which is another special case. The input data in this case is purely
+real because $\mu = p_{i-1} - \mu$ for $\mu = p_{i-1}/2$. We can code
+this as a special case, using real inputs and real-data DFT modules as
+we did for $\mu=0$. However, for $\mu = p_{i-1}/2$ the twiddle factors
+are not unity,
+%
+\begin{eqnarray}
+\omega^{\mu\lambda'}_{p_i} &=& \omega^{(p_{i-1}/2)\lambda'}_{p_i} \\
+&=& \exp(-i\pi\lambda'/f_i)
+\end{eqnarray}
+%
+These twiddle factors introduce an additional phase which modifies the
+symmetry of the outputs. Instead of the conjugate-complex symmetry
+which applied for $\mu=0$ there is a shifted conjugate-complex
+symmetry,
+%
+\begin{equation}
+t_\lambda = t^*_{f-(\lambda+1)}
+\end{equation}
+%
+This is easily proved,
+%
+\begin{eqnarray}
+t_\lambda
+&=&
+\sum e^{-2\pi i \lambda\lambda'/f_i} e^{-i\pi \lambda'/f_i} r_{\lambda'} \\
+t_{f - (\lambda + 1)}
+&=&
+\sum e^{-2\pi i (f-\lambda-1)\lambda'/f_i} e^{-i\pi \lambda'/f_i} r_{\lambda'} \\
+&=&
+\sum e^{2\pi i \lambda\lambda'/f_i} e^{i\pi \lambda'/f_i} r_{\lambda'} \\
+&=& t^*_\lambda
+\end{eqnarray}
+%
+The symmetry of the output means that we only need to compute half of
+the output terms, the remaining terms being conjugates or zero
+imaginary parts. For example, when $f=4$ the outputs are $(x_0 + i
+y_0, x_1 + i y_1, x_1 - i y_1, x_0 - i y_0)$. For $f=5$ the outputs
+are $(x_0 + i y_0, x_1 + i y_1, x_2, x_1 - i y_1, x_0 - i y_0)$. By
+combining the twiddle factors and DFT matrix we can make a combined
+module which applies both at the same time. By starting from the
+complex DFT modules and bringing in twiddle factors we can derive
+optimized modules. Here are the modules given by Temperton for $z = W
+\Omega x$ where $x$ is real and $z$ has the shifted conjugate-complex
+symmetry. The matrix of twiddle factors, $\Omega$, is given by,
+%
+\begin{equation}
+\Omega = \mathrm{diag}(1, e^{-i\pi/f}, e^{-2\pi i/f}, \dots, e^{-i\pi(f-1)/f})
+\end{equation}
+%
+We write $z$ in terms of two real vectors $z = a + i b$.
+%
+For $N=2$,
+%
+\begin{equation}
+\begin{array}{ll}
+a_0 = x_0, &
+b_0 = - x_1.
+\end{array}
+\end{equation}
+%
+For $N=3$,
+%
+\begin{equation}
+\begin{array}{l}
+t_1 = x_1 - x_2,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_0 = x_0 + t_1/2, & b_0 = x_0 - t_1,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{l}
+a_1 = - \sin(\pi/3) (x_1 + x_2)
+\end{array}
+\end{equation}
+%
+For $N=4$,
+%
+\begin{equation}
+\begin{array}{ll}
+t_1 = (x_1 - x_3)/\sqrt{2}, & t_2 = (x_1 + x_3)/\sqrt{2},
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_0 = x_0 + t_1, & b_0 = -x_2 - t_2,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_1 = x_0 - t_1, & b_1 = x_2 - t_2.
+\end{array}
+\end{equation}
+%
+For $N=5$,
+%
+\begin{equation}
+\begin{array}{ll}
+t_1 = x_1 - x_4, & t_2 = x_1 + x_4,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_3 = x_2 - x_3, & t_4 = x_2 + x_3,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_5 = t_1 - t_3, & t_6 = x_0 + t_5 / 4,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_7 = (\sqrt{5}/4)(t_1 + t_3) &
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_0 = t_6 + t_7, & b_0 = -\sin(2\pi/10) t_2 - \sin(2\pi/5) t_4,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_1 = t_6 - t_7, & b_1 = -\sin(2\pi/5) t_2 + \sin(2\pi/10) t_4,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_2 = x_0 - t_5 &
+\end{array}
+\end{equation}
+%
+For $N=6$,
+%
+\begin{equation}
+\begin{array}{ll}
+t_1 = \sin(\pi/3)(x_5 - x_1), & t_2 = \sin(\pi/3) (x_2 + x_4),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_3 = x_2 - x_4, & t_4 = x_1 + x_5,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_5 = x_0 + t_3 / 2, & t_6 = -x_3 - t_4 / 2,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_0 = t_5 - t_1, & b_0 = t_6 - t_2,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_1 = x_0 - t_3, & b_1 = x_3 - t_4,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+a_2 = t_5 + t_1, & b_2 = t_6 + t_2
+\end{array}
+\end{equation}
+
+\section{Computing the mixed-radix inverse for real data}
+%
+To compute the inverse of the mixed-radix FFT on real data we step
+through the algorithm in reverse and invert each operation.
+
+This gives the following algorithm using FFTPACK indexing,
+%
+\begin{algorithm}
+\FOR{$i = n_f \dots 1$}
+\FOR{$\mu = 0 \dots p_{i-1} - 1$}
+\FOR{$b = 0 \dots q-1$}
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$t_{\lambda'} =
+ \sum_{\lambda'=0}^{f-1} W_f(\lambda,\lambda')
+ v_{b p + (\lambda p_{i-1} + \mu)}$}
+ \COMMENT{DFT matrix-multiply module}
+\ENDFOR
+\FOR{$\lambda = 0 \dots f-1$}
+\STATE{$v'_{(\lambda'q + b)p_{i-1} + \mu} \Leftarrow
+ \omega^{-\mu\lambda'}_{p_{i}} t_\lambda$}
+\ENDFOR
+
+\ENDFOR
+\ENDFOR
+\STATE{$v \Leftarrow v'$}
+\ENDFOR
+\end{algorithm}
+%
+When $\mu=0$ we are applying an inverse DFT to half-complex data,
+giving a real result. The twiddle factors are all unity. We can code
+this as a special case, just as we did for the forward routine. We
+start with complex module and eliminate the redundant terms. In this
+case it is the final result which has the zero imaginary part, and we
+eliminate redundant terms by using the half-complex symmetry of the
+input data.
+
+When $\mu=1 \dots p_{i-1}/2 - 1$ we have full complex transforms on
+complex data, so no simplification is possible.
+
+When $\mu = p_{i-1}/2$ (which occurs only when $p_{i-1}$ is even) we
+have a combination of twiddle factors and DFTs on data with the
+shifted half-complex symmetry which give a real result. We implement
+this as a special module, essentially by inverting the system of
+equations given for the forward case. We use the modules given by
+Temperton, appropriately modified for our version of the algorithm. He
+uses a slightly different convention which differs by factors of two
+for some terms (consult his paper for details~\cite{temperton83real}).
+
+For $N=2$,
+%
+\begin{equation}
+\begin{array}{ll}
+x_0 = 2 a_0, & x_1 = - 2 b_0 .
+\end{array}
+\end{equation}
+%
+For $N=3$,
+%
+\begin{equation}
+\begin{array}{ll}
+t_1 = a_0 - a_1, & t_2 = \sqrt{3} b_1, \\
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{lll}
+x_0 = 2 a_0 + a_1, & x_1 = t_1 - t_2, & x_2 = - t_1 - t_2
+\end{array}
+\end{equation}
+%
+For $N=4$,
+\begin{equation}
+\begin{array}{ll}
+t_1 = \sqrt{2} (b_0 + b_1), & t_2 = \sqrt{2} (a_0 - a_1),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+x_0 = 2(a_0 + a_1), & x_1 = t_2 - t_1 ,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+x_2 = 2(b_1 - b_0), & x_3 = -(t_2 + t_1).
+\end{array}
+\end{equation}
+%
+For $N=5$,
+%
+\begin{equation}
+\begin{array}{ll}
+t_1 = 2 (a_0 + a_1), & t_2 = t_1 / 4 - a_2,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_3 = (\sqrt{5}/2) (a_0 - a_1),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{l}
+t_4 = 2(\sin(2\pi/10) b_0 + \sin(2\pi/5) b_1),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{l}
+t_5 = 2(\sin(2\pi/10) b_0 - \sin(2\pi/5) b_1),
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+t_6 = t_3 + t_2, & t_7 = t_3 - t_2,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+x_0 = t_1 + a_2, & x_1 = t_6 - t_4 ,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+x_2 = t_7 - t_5, & x_3 = - t_7 - t_5,
+\end{array}
+\end{equation}
+\begin{equation}
+\begin{array}{ll}
+x_4 = -t_6 - t_4.
+\end{array}
+\end{equation}
+
+\section{Conclusions}
+%
+We have described the basic algorithms for one-dimensional radix-2 and
+mixed-radix FFTs. It would be nice to have a pedagogical explanation
+of the split-radix FFT algorithm, which is faster than the simple
+radix-2 algorithm we used. We could also have a whole chapter on
+multidimensional FFTs.
+%
+%\section{Multidimensional FFTs}
+%\section{Testing FFTs, Numerical Analysis}
+
+%\nocite{*}
+\bibliographystyle{unsrt}
+\bibliography{fftalgorithms}
+
+\end{document}
+
+
+
+
diff --git a/gsl-1.9/doc/final-route.eps b/gsl-1.9/doc/final-route.eps
new file mode 100644
index 0000000..c2df8d1
--- /dev/null
+++ b/gsl-1.9/doc/final-route.eps
@@ -0,0 +1,11635 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Thu Jan 4 10:56:46 2007
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 101 194 489 610
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources:
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+/DrawDict 50 dict def
+DrawDict begin
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources:
+%%PageBoundingBox: 101 194 489 610
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3590 10017
+3590 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3605 10017
+3605 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+3502 10017
+3487 9930
+3487 10017
+3707 10017
+3707 9930
+3693 10017
+6 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3546 9710
+3649 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3971 9973
+3986 10017
+3986 9930
+3971 9973
+3942 10003
+3898 10017
+3854 10017
+3810 10003
+3781 9973
+3781 9944
+3795 9915
+3810 9900
+3839 9886
+3927 9856
+3957 9842
+3986 9812
+16 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3781 9944
+3810 9915
+3839 9900
+3927 9871
+3957 9856
+3971 9842
+3986 9812
+3986 9754
+3957 9724
+3913 9710
+3869 9710
+3825 9724
+3795 9754
+3781 9798
+3781 9710
+3795 9754
+16 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4103 10017
+4103 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4118 10017
+4118 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4059 10017
+4235 10017
+4279 10003
+4294 9988
+4308 9959
+4308 9915
+4294 9886
+4279 9871
+4235 9856
+4118 9856
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4235 10017
+4264 10003
+4279 9988
+4294 9959
+4294 9915
+4279 9886
+4264 9871
+4235 9856
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4059 9710
+4162 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4646 9842
+4910 9842
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+5437 10003
+5423 9988
+5437 9973
+5452 9988
+5437 10003
+5408 10017
+5364 10017
+5320 10003
+5291 9973
+5276 9930
+5276 9710
+11 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+5364 10017
+5335 10003
+5305 9973
+5291 9930
+5291 9710
+5 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5437 9915
+5437 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5452 9915
+5452 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5232 9915
+5452 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5232 9710
+5335 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5393 9710
+5496 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5599 9915
+5599 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5613 9915
+5613 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5613 9871
+5643 9900
+5687 9915
+5716 9915
+5760 9900
+5775 9871
+5775 9710
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5716 9915
+5745 9900
+5760 9871
+5760 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5555 9915
+5613 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5555 9710
+5657 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5716 9710
+5819 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+5921 9886
+5921 9871
+5907 9871
+5907 9886
+5921 9900
+5951 9915
+6009 9915
+6039 9900
+6053 9886
+6068 9856
+6068 9754
+6083 9724
+6097 9710
+13 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+6053 9886
+6053 9754
+6068 9724
+6097 9710
+6112 9710
+5 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+6053 9856
+6039 9842
+5951 9827
+5907 9812
+5892 9783
+5892 9754
+5907 9724
+5951 9710
+5995 9710
+6024 9724
+6053 9754
+11 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+5951 9827
+5921 9812
+5907 9783
+5907 9754
+5921 9724
+5951 9710
+6 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6215 10017
+6215 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6229 10017
+6229 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6171 10017
+6229 10017
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6171 9710
+6273 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6361 9842
+6625 9842
+2 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6845 9915
+6889 9900
+6918 9871
+6933 9827
+6933 9798
+6918 9754
+6889 9724
+6845 9710
+6816 9710
+6772 9724
+6742 9754
+6728 9798
+6728 9827
+6742 9871
+6772 9900
+6816 9915
+16 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6816 9915
+6786 9900
+6757 9871
+6742 9827
+6742 9798
+6757 9754
+6786 9724
+6816 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6845 9710
+6874 9724
+6904 9754
+6918 9798
+6918 9827
+6904 9871
+6874 9900
+6845 9915
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7050 9915
+7050 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7065 9915
+7065 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7065 9827
+7080 9871
+7109 9900
+7138 9915
+7182 9915
+7197 9900
+7197 9886
+7182 9871
+7168 9886
+7182 9900
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7006 9915
+7065 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7006 9710
+7109 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7446 10017
+7446 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7461 10017
+7461 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+7446 9871
+7417 9900
+7387 9915
+7358 9915
+7314 9900
+7285 9871
+7270 9827
+7270 9798
+7285 9754
+7314 9724
+7358 9710
+7387 9710
+7417 9724
+7446 9754
+14 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7358 9915
+7329 9900
+7299 9871
+7285 9827
+7285 9798
+7299 9754
+7329 9724
+7358 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7402 10017
+7461 10017
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7446 9710
+7505 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+7593 9827
+7769 9827
+7769 9856
+7754 9886
+7739 9900
+7710 9915
+7666 9915
+7622 9900
+7593 9871
+7578 9827
+7578 9798
+7593 9754
+7622 9724
+7666 9710
+7695 9710
+7739 9724
+7769 9754
+17 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+7754 9827
+7754 9871
+7739 9900
+3 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7666 9915
+7637 9900
+7607 9871
+7593 9827
+7593 9798
+7607 9754
+7637 9724
+7666 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7886 9915
+7886 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7901 9915
+7901 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7901 9827
+7915 9871
+7945 9900
+7974 9915
+8018 9915
+8033 9900
+8033 9886
+8018 9871
+8003 9886
+8018 9900
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7842 9915
+7901 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7842 9710
+7945 9710
+2 MLine
+End
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2059 2097
+2172 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2235 2147
+2247 2153
+2266 2172
+2266 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2260 2166
+2260 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2235 2040
+2291 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2361 2147
+2373 2153
+2392 2172
+2392 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2386 2166
+2386 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2361 2040
+2417 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2524 2159
+2524 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2530 2172
+2530 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2530 2172
+2461 2078
+2562 2078
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2505 2040
+2549 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2827 2097
+2940 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3003 2147
+3015 2153
+3034 2172
+3034 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3028 2166
+3028 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3003 2040
+3059 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3129 2147
+3141 2153
+3160 2172
+3160 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3154 2166
+3154 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3129 2040
+3185 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+3242 2147
+3248 2141
+3242 2134
+3235 2141
+3235 2147
+3242 2159
+3248 2166
+3267 2172
+3292 2172
+3311 2166
+3317 2159
+3323 2147
+3323 2134
+3317 2122
+3298 2109
+3267 2097
+3254 2090
+3242 2078
+3235 2059
+3235 2040
+20 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3292 2172
+3304 2166
+3311 2159
+3317 2147
+3317 2134
+3311 2122
+3292 2109
+3267 2097
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+3235 2053
+3242 2059
+3254 2059
+3286 2046
+3304 2046
+3317 2053
+3323 2059
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+3254 2059
+3286 2040
+3311 2040
+3317 2046
+3323 2059
+3323 2072
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 9216
+3072 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 2304
+3072 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3595 2097
+3708 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3771 2147
+3783 2153
+3802 2172
+3802 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3796 2166
+3796 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3771 2040
+3827 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3897 2147
+3909 2153
+3928 2172
+3928 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3922 2166
+3922 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3897 2040
+3953 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4054 2172
+4072 2166
+4085 2147
+4091 2115
+4091 2097
+4085 2065
+4072 2046
+4054 2040
+4041 2040
+4022 2046
+4010 2065
+4003 2097
+4003 2115
+4010 2147
+4022 2166
+4041 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4041 2172
+4029 2166
+4022 2159
+4016 2147
+4010 2115
+4010 2097
+4016 2065
+4022 2053
+4029 2046
+4041 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4054 2040
+4066 2046
+4072 2053
+4079 2065
+4085 2097
+4085 2115
+4079 2147
+4072 2159
+4066 2166
+4054 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 9216
+3840 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 2304
+3840 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4363 2097
+4476 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4539 2147
+4551 2153
+4570 2172
+4570 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4564 2166
+4564 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4539 2040
+4595 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4696 2172
+4715 2166
+4727 2147
+4734 2115
+4734 2097
+4727 2065
+4715 2046
+4696 2040
+4683 2040
+4665 2046
+4652 2065
+4646 2097
+4646 2115
+4652 2147
+4665 2166
+4683 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4683 2172
+4671 2166
+4665 2159
+4658 2147
+4652 2115
+4652 2097
+4658 2065
+4665 2053
+4671 2046
+4683 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4696 2040
+4709 2046
+4715 2053
+4721 2065
+4727 2097
+4727 2115
+4721 2147
+4715 2159
+4709 2166
+4696 2172
+10 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+4828 2172
+4847 2166
+4853 2153
+4853 2134
+4847 2122
+4828 2115
+4803 2115
+4784 2122
+4778 2134
+4778 2153
+4784 2166
+4803 2172
+12 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+4803 2172
+4790 2166
+4784 2153
+4784 2134
+4790 2122
+4803 2115
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+4828 2115
+4840 2122
+4847 2134
+4847 2153
+4840 2166
+4828 2172
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4803 2115
+4784 2109
+4778 2103
+4771 2090
+4771 2065
+4778 2053
+4784 2046
+4803 2040
+4828 2040
+4847 2046
+4853 2053
+4859 2065
+4859 2090
+4853 2103
+4847 2109
+4828 2115
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4803 2115
+4790 2109
+4784 2103
+4778 2090
+4778 2065
+4784 2053
+4790 2046
+4803 2040
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4828 2040
+4840 2046
+4847 2053
+4853 2065
+4853 2090
+4847 2103
+4840 2109
+4828 2115
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5131 2097
+5244 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5307 2147
+5319 2153
+5338 2172
+5338 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5332 2166
+5332 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5307 2040
+5363 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5464 2172
+5483 2166
+5495 2147
+5502 2115
+5502 2097
+5495 2065
+5483 2046
+5464 2040
+5451 2040
+5433 2046
+5420 2065
+5414 2097
+5414 2115
+5420 2147
+5433 2166
+5451 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5451 2172
+5439 2166
+5433 2159
+5426 2147
+5420 2115
+5420 2097
+5426 2065
+5433 2053
+5439 2046
+5451 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5464 2040
+5477 2046
+5483 2053
+5489 2065
+5495 2097
+5495 2115
+5489 2147
+5483 2159
+5477 2166
+5464 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+5615 2153
+5608 2147
+5615 2141
+5621 2147
+5621 2153
+5615 2166
+5602 2172
+5583 2172
+5565 2166
+5552 2153
+5546 2141
+5539 2115
+5539 2078
+5546 2059
+5558 2046
+5577 2040
+5590 2040
+5608 2046
+5621 2059
+5627 2078
+5627 2084
+5621 2103
+5608 2115
+5590 2122
+5583 2122
+5565 2115
+5552 2103
+5546 2084
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+5583 2172
+5571 2166
+5558 2153
+5552 2141
+5546 2115
+5546 2078
+5552 2059
+5565 2046
+5577 2040
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5590 2040
+5602 2046
+5615 2059
+5621 2078
+5621 2084
+5615 2103
+5602 2115
+5590 2122
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 9216
+5376 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 2304
+5376 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5899 2097
+6012 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6075 2147
+6087 2153
+6106 2172
+6106 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6100 2166
+6100 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6075 2040
+6131 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6232 2172
+6251 2166
+6263 2147
+6270 2115
+6270 2097
+6263 2065
+6251 2046
+6232 2040
+6219 2040
+6201 2046
+6188 2065
+6182 2097
+6182 2115
+6188 2147
+6201 2166
+6219 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6219 2172
+6207 2166
+6201 2159
+6194 2147
+6188 2115
+6188 2097
+6194 2065
+6201 2053
+6207 2046
+6219 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6232 2040
+6245 2046
+6251 2053
+6257 2065
+6263 2097
+6263 2115
+6257 2147
+6251 2159
+6245 2166
+6232 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6364 2159
+6364 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6370 2172
+6370 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6370 2172
+6301 2078
+6402 2078
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6345 2040
+6389 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 9216
+6144 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 2304
+6144 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6667 2097
+6780 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6843 2147
+6855 2153
+6874 2172
+6874 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6868 2166
+6868 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6843 2040
+6899 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7000 2172
+7019 2166
+7031 2147
+7038 2115
+7038 2097
+7031 2065
+7019 2046
+7000 2040
+6987 2040
+6969 2046
+6956 2065
+6950 2097
+6950 2115
+6956 2147
+6969 2166
+6987 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6987 2172
+6975 2166
+6969 2159
+6962 2147
+6956 2115
+6956 2097
+6962 2065
+6969 2053
+6975 2046
+6987 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7000 2040
+7013 2046
+7019 2053
+7025 2065
+7031 2097
+7031 2115
+7025 2147
+7019 2159
+7013 2166
+7000 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+7082 2147
+7088 2141
+7082 2134
+7075 2141
+7075 2147
+7082 2159
+7088 2166
+7107 2172
+7132 2172
+7151 2166
+7157 2159
+7163 2147
+7163 2134
+7157 2122
+7138 2109
+7107 2097
+7094 2090
+7082 2078
+7075 2059
+7075 2040
+20 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7132 2172
+7144 2166
+7151 2159
+7157 2147
+7157 2134
+7151 2122
+7132 2109
+7107 2097
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7075 2053
+7082 2059
+7094 2059
+7126 2046
+7144 2046
+7157 2053
+7163 2059
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+7094 2059
+7126 2040
+7151 2040
+7157 2046
+7163 2059
+7163 2072
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7435 2097
+7548 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+7611 2147
+7623 2153
+7642 2172
+7642 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7636 2166
+7636 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7611 2040
+7667 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7768 2172
+7787 2166
+7799 2147
+7806 2115
+7806 2097
+7799 2065
+7787 2046
+7768 2040
+7755 2040
+7737 2046
+7724 2065
+7718 2097
+7718 2115
+7724 2147
+7737 2166
+7755 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7755 2172
+7743 2166
+7737 2159
+7730 2147
+7724 2115
+7724 2097
+7730 2065
+7737 2053
+7743 2046
+7755 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7768 2040
+7781 2046
+7787 2053
+7793 2065
+7799 2097
+7799 2115
+7793 2147
+7787 2159
+7781 2166
+7768 2172
+10 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7894 2172
+7912 2166
+7925 2147
+7931 2115
+7931 2097
+7925 2065
+7912 2046
+7894 2040
+7881 2040
+7862 2046
+7850 2065
+7843 2097
+7843 2115
+7850 2147
+7862 2166
+7881 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7881 2172
+7869 2166
+7862 2159
+7856 2147
+7850 2115
+7850 2097
+7856 2065
+7862 2053
+7869 2046
+7881 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7894 2040
+7906 2046
+7912 2053
+7919 2065
+7925 2097
+7925 2115
+7919 2147
+7912 2159
+7906 2166
+7894 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 9216
+7680 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 2304
+7680 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8266 2097
+8379 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+8505 2128
+8498 2109
+8486 2097
+8467 2090
+8461 2090
+8442 2097
+8429 2109
+8423 2128
+8423 2134
+8429 2153
+8442 2166
+8461 2172
+8473 2172
+8492 2166
+8505 2153
+8511 2134
+8511 2097
+8505 2072
+8498 2059
+8486 2046
+8467 2040
+8448 2040
+8435 2046
+8429 2059
+8429 2065
+8435 2072
+8442 2065
+8435 2059
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8461 2090
+8448 2097
+8435 2109
+8429 2128
+8429 2134
+8435 2153
+8448 2166
+8461 2172
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+8473 2172
+8486 2166
+8498 2153
+8505 2134
+8505 2097
+8498 2072
+8492 2059
+8479 2046
+8467 2040
+9 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+8605 2172
+8624 2166
+8630 2153
+8630 2134
+8624 2122
+8605 2115
+8580 2115
+8561 2122
+8555 2134
+8555 2153
+8561 2166
+8580 2172
+12 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8580 2172
+8567 2166
+8561 2153
+8561 2134
+8567 2122
+8580 2115
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8605 2115
+8618 2122
+8624 2134
+8624 2153
+8618 2166
+8605 2172
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8580 2115
+8561 2109
+8555 2103
+8549 2090
+8549 2065
+8555 2053
+8561 2046
+8580 2040
+8605 2040
+8624 2046
+8630 2053
+8637 2065
+8637 2090
+8630 2103
+8624 2109
+8605 2115
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8580 2115
+8567 2109
+8561 2103
+8555 2090
+8555 2065
+8561 2053
+8567 2046
+8580 2040
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8605 2040
+8618 2046
+8624 2053
+8630 2065
+8630 2090
+8624 2103
+8618 2109
+8605 2115
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 9216
+8448 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 2304
+8448 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9034 2097
+9147 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+9273 2128
+9266 2109
+9254 2097
+9235 2090
+9229 2090
+9210 2097
+9197 2109
+9191 2128
+9191 2134
+9197 2153
+9210 2166
+9229 2172
+9241 2172
+9260 2166
+9273 2153
+9279 2134
+9279 2097
+9273 2072
+9266 2059
+9254 2046
+9235 2040
+9216 2040
+9203 2046
+9197 2059
+9197 2065
+9203 2072
+9210 2065
+9203 2059
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+9229 2090
+9216 2097
+9203 2109
+9197 2128
+9197 2134
+9203 2153
+9216 2166
+9229 2172
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+9241 2172
+9254 2166
+9266 2153
+9273 2134
+9273 2097
+9266 2072
+9260 2059
+9247 2046
+9235 2040
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+9392 2153
+9386 2147
+9392 2141
+9398 2147
+9398 2153
+9392 2166
+9379 2172
+9361 2172
+9342 2166
+9329 2153
+9323 2141
+9317 2115
+9317 2078
+9323 2059
+9335 2046
+9354 2040
+9367 2040
+9386 2046
+9398 2059
+9405 2078
+9405 2084
+9398 2103
+9386 2115
+9367 2122
+9361 2122
+9342 2115
+9329 2103
+9323 2084
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+9361 2172
+9348 2166
+9335 2153
+9329 2141
+9323 2115
+9323 2078
+9329 2059
+9342 2046
+9354 2040
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+9367 2040
+9379 2046
+9392 2059
+9398 2078
+9398 2084
+9392 2103
+9379 2115
+9367 2122
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2688 9216
+2688 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2688 2304
+2688 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 9216
+3072 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 2304
+3072 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 9216
+3456 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 2304
+3456 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 9216
+3840 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 2304
+3840 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4224 9216
+4224 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4224 2304
+4224 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4992 9216
+4992 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4992 2304
+4992 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 9216
+5376 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 2304
+5376 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 9216
+6144 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 2304
+6144 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6528 9216
+6528 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6528 2304
+6528 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7296 9216
+7296 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7296 2304
+7296 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 9216
+7680 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 2304
+7680 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 9216
+8064 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 2304
+8064 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 9216
+8448 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 2304
+8448 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8832 9216
+8832 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8832 2304
+8832 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 2354
+1980 2348
+1974 2342
+1968 2348
+1968 2354
+1974 2367
+1980 2373
+1999 2379
+2024 2379
+2043 2373
+2050 2361
+2050 2342
+2043 2329
+2024 2323
+2006 2323
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 2379
+2037 2373
+2043 2361
+2043 2342
+2037 2329
+2024 2323
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 2323
+2037 2317
+2050 2304
+2056 2291
+2056 2273
+2050 2260
+2043 2254
+2024 2247
+1999 2247
+1980 2254
+1974 2260
+1968 2273
+1968 2279
+1974 2285
+1980 2279
+1974 2273
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 2310
+2050 2291
+2050 2273
+2043 2260
+2037 2254
+2024 2247
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+2100 2354
+2106 2348
+2100 2342
+2093 2348
+2093 2354
+2100 2367
+2106 2373
+2125 2379
+2150 2379
+2169 2373
+2175 2367
+2181 2354
+2181 2342
+2175 2329
+2156 2317
+2125 2304
+2112 2298
+2100 2285
+2093 2266
+2093 2247
+20 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2150 2379
+2163 2373
+2169 2367
+2175 2354
+2175 2342
+2169 2329
+2150 2317
+2125 2304
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2093 2260
+2100 2266
+2112 2266
+2144 2254
+2163 2254
+2175 2260
+2181 2266
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2112 2266
+2144 2247
+2169 2247
+2175 2254
+2181 2266
+2181 2279
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 3506
+1980 3500
+1974 3494
+1968 3500
+1968 3506
+1974 3519
+1980 3525
+1999 3531
+2024 3531
+2043 3525
+2050 3513
+2050 3494
+2043 3481
+2024 3475
+2006 3475
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 3531
+2037 3525
+2043 3513
+2043 3494
+2037 3481
+2024 3475
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 3475
+2037 3469
+2050 3456
+2056 3443
+2056 3425
+2050 3412
+2043 3406
+2024 3399
+1999 3399
+1980 3406
+1974 3412
+1968 3425
+1968 3431
+1974 3437
+1980 3431
+1974 3425
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 3462
+2050 3443
+2050 3425
+2043 3412
+2037 3406
+2024 3399
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+2100 3506
+2106 3500
+2100 3494
+2093 3500
+2093 3506
+2100 3519
+2106 3525
+2125 3531
+2150 3531
+2169 3525
+2175 3513
+2175 3494
+2169 3481
+2150 3475
+2131 3475
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2150 3531
+2163 3525
+2169 3513
+2169 3494
+2163 3481
+2150 3475
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2150 3475
+2163 3469
+2175 3456
+2181 3443
+2181 3425
+2175 3412
+2169 3406
+2150 3399
+2125 3399
+2106 3406
+2100 3412
+2093 3425
+2093 3431
+2100 3437
+2106 3431
+2100 3425
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2169 3462
+2175 3443
+2175 3425
+2169 3412
+2163 3406
+2150 3399
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9078 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2442 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 4658
+1980 4652
+1974 4646
+1968 4652
+1968 4658
+1974 4671
+1980 4677
+1999 4683
+2024 4683
+2043 4677
+2050 4665
+2050 4646
+2043 4633
+2024 4627
+2006 4627
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 4683
+2037 4677
+2043 4665
+2043 4646
+2037 4633
+2024 4627
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 4627
+2037 4621
+2050 4608
+2056 4595
+2056 4577
+2050 4564
+2043 4558
+2024 4551
+1999 4551
+1980 4558
+1974 4564
+1968 4577
+1968 4583
+1974 4589
+1980 4583
+1974 4577
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 4614
+2050 4595
+2050 4577
+2043 4564
+2037 4558
+2024 4551
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2150 4671
+2150 4551
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2156 4683
+2156 4551
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2156 4683
+2087 4589
+2188 4589
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2131 4551
+2175 4551
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9078 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2442 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 5810
+1980 5804
+1974 5798
+1968 5804
+1968 5810
+1974 5823
+1980 5829
+1999 5835
+2024 5835
+2043 5829
+2050 5817
+2050 5798
+2043 5785
+2024 5779
+2006 5779
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 5835
+2037 5829
+2043 5817
+2043 5798
+2037 5785
+2024 5779
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 5779
+2037 5773
+2050 5760
+2056 5747
+2056 5729
+2050 5716
+2043 5710
+2024 5703
+1999 5703
+1980 5710
+1974 5716
+1968 5729
+1968 5735
+1974 5741
+1980 5735
+1974 5729
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 5766
+2050 5747
+2050 5729
+2043 5716
+2037 5710
+2024 5703
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2106 5835
+2093 5773
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+2093 5773
+2106 5785
+2125 5791
+2144 5791
+2163 5785
+2175 5773
+2181 5754
+2181 5741
+2175 5722
+2163 5710
+2144 5703
+2125 5703
+2106 5710
+2100 5716
+2093 5729
+2093 5735
+2100 5741
+2106 5735
+2100 5729
+19 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2144 5791
+2156 5785
+2169 5773
+2175 5754
+2175 5741
+2169 5722
+2156 5710
+2144 5703
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2106 5835
+2169 5835
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2106 5829
+2137 5829
+2169 5835
+3 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9078 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2442 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 6962
+1980 6956
+1974 6950
+1968 6956
+1968 6962
+1974 6975
+1980 6981
+1999 6987
+2024 6987
+2043 6981
+2050 6969
+2050 6950
+2043 6937
+2024 6931
+2006 6931
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 6987
+2037 6981
+2043 6969
+2043 6950
+2037 6937
+2024 6931
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 6931
+2037 6925
+2050 6912
+2056 6899
+2056 6881
+2050 6868
+2043 6862
+2024 6855
+1999 6855
+1980 6862
+1974 6868
+1968 6881
+1968 6887
+1974 6893
+1980 6887
+1974 6881
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 6918
+2050 6899
+2050 6881
+2043 6868
+2037 6862
+2024 6855
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2169 6969
+2163 6962
+2169 6956
+2175 6962
+2175 6969
+2169 6981
+2156 6987
+2137 6987
+2119 6981
+2106 6969
+2100 6956
+2093 6931
+2093 6893
+2100 6874
+2112 6862
+2131 6855
+2144 6855
+2163 6862
+2175 6874
+2181 6893
+2181 6899
+2175 6918
+2163 6931
+2144 6937
+2137 6937
+2119 6931
+2106 6918
+2100 6899
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2137 6987
+2125 6981
+2112 6969
+2106 6956
+2100 6931
+2100 6893
+2106 6874
+2119 6862
+2131 6855
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2144 6855
+2156 6862
+2169 6874
+2175 6893
+2175 6899
+2169 6918
+2156 6931
+2144 6937
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6912
+9078 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6912
+2442 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 8114
+1980 8108
+1974 8102
+1968 8108
+1968 8114
+1974 8127
+1980 8133
+1999 8139
+2024 8139
+2043 8133
+2050 8121
+2050 8102
+2043 8089
+2024 8083
+2006 8083
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 8139
+2037 8133
+2043 8121
+2043 8102
+2037 8089
+2024 8083
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 8083
+2037 8077
+2050 8064
+2056 8051
+2056 8033
+2050 8020
+2043 8014
+2024 8007
+1999 8007
+1980 8014
+1974 8020
+1968 8033
+1968 8039
+1974 8045
+1980 8039
+1974 8033
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 8070
+2050 8051
+2050 8033
+2043 8020
+2037 8014
+2024 8007
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2093 8139
+2093 8102
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2093 8114
+2100 8127
+2112 8139
+2125 8139
+2156 8121
+2169 8121
+2175 8127
+2181 8139
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2100 8127
+2112 8133
+2125 8133
+2156 8121
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2181 8139
+2181 8121
+2175 8102
+2150 8070
+2144 8058
+2137 8039
+2137 8007
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+2175 8102
+2144 8070
+2137 8058
+2131 8039
+2131 8007
+5 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8064
+9078 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8064
+2442 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 9266
+1980 9260
+1974 9254
+1968 9260
+1968 9266
+1974 9279
+1980 9285
+1999 9291
+2024 9291
+2043 9285
+2050 9273
+2050 9254
+2043 9241
+2024 9235
+2006 9235
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 9291
+2037 9285
+2043 9273
+2043 9254
+2037 9241
+2024 9235
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 9235
+2037 9229
+2050 9216
+2056 9203
+2056 9185
+2050 9172
+2043 9166
+2024 9159
+1999 9159
+1980 9166
+1974 9172
+1968 9185
+1968 9191
+1974 9197
+1980 9191
+1974 9185
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 9222
+2050 9203
+2050 9185
+2043 9172
+2037 9166
+2024 9159
+6 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+2150 9291
+2169 9285
+2175 9273
+2175 9254
+2169 9241
+2150 9235
+2125 9235
+2106 9241
+2100 9254
+2100 9273
+2106 9285
+2125 9291
+12 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2125 9291
+2112 9285
+2106 9273
+2106 9254
+2112 9241
+2125 9235
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2150 9235
+2163 9241
+2169 9254
+2169 9273
+2163 9285
+2150 9291
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2125 9235
+2106 9229
+2100 9222
+2093 9210
+2093 9185
+2100 9172
+2106 9166
+2125 9159
+2150 9159
+2169 9166
+2175 9172
+2181 9185
+2181 9210
+2175 9222
+2169 9229
+2150 9235
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2125 9235
+2112 9229
+2106 9222
+2100 9210
+2100 9185
+2106 9172
+2112 9166
+2125 9159
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2150 9159
+2163 9166
+2169 9172
+2175 9185
+2175 9210
+2169 9222
+2163 9229
+2150 9235
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2880
+9161 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2880
+2359 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9161 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2359 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9161 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2359 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9161 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2359 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5184
+9161 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5184
+2359 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6336
+9161 6336
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6336
+2359 6336
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6912
+9161 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6912
+2359 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7488
+9161 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7488
+2359 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8064
+9161 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8064
+2359 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8640
+9161 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8640
+2359 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4384 1906
+4384 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4390 1906
+4390 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4365 1906
+4390 1906
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4365 1774
+4409 1774
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4491 1862
+4510 1856
+4522 1843
+4528 1824
+4528 1812
+4522 1793
+4510 1780
+4491 1774
+4478 1774
+4459 1780
+4447 1793
+4440 1812
+4440 1824
+4447 1843
+4459 1856
+4478 1862
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4478 1862
+4466 1856
+4453 1843
+4447 1824
+4447 1812
+4453 1793
+4466 1780
+4478 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4491 1774
+4503 1780
+4516 1793
+4522 1812
+4522 1824
+4516 1843
+4503 1856
+4491 1862
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4579 1862
+4579 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4585 1862
+4585 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+4585 1843
+4598 1856
+4616 1862
+4629 1862
+4648 1856
+4654 1843
+4654 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4629 1862
+4642 1856
+4648 1843
+4648 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4560 1862
+4585 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4560 1774
+4604 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4629 1774
+4673 1774
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4748 1862
+4761 1856
+4767 1849
+4773 1837
+4773 1824
+4767 1812
+4761 1805
+4748 1799
+4736 1799
+4723 1805
+4717 1812
+4711 1824
+4711 1837
+4717 1849
+4723 1856
+4736 1862
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4723 1856
+4717 1843
+4717 1818
+4723 1805
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4761 1805
+4767 1818
+4767 1843
+4761 1856
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+4767 1849
+4773 1856
+4786 1862
+4786 1856
+4773 1856
+5 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+4717 1812
+4711 1805
+4704 1793
+4704 1787
+4711 1774
+4729 1768
+4761 1768
+4780 1761
+4786 1755
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+4704 1787
+4711 1780
+4729 1774
+4761 1774
+4780 1768
+4786 1755
+4786 1749
+4780 1736
+4761 1730
+4723 1730
+4704 1736
+4698 1749
+4698 1755
+4704 1768
+4723 1774
+15 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4843 1900
+4836 1893
+4830 1900
+4836 1906
+4 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4836 1862
+4836 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4843 1862
+4843 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4817 1862
+4843 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4817 1774
+4861 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+4905 1906
+4905 1799
+4912 1780
+4924 1774
+4937 1774
+4949 1780
+4956 1793
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4912 1906
+4912 1799
+4918 1780
+4924 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4887 1862
+4937 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5000 1862
+5000 1793
+5006 1780
+5025 1774
+5037 1774
+5056 1780
+5069 1793
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5006 1862
+5006 1793
+5012 1780
+5025 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 1862
+5069 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5075 1862
+5075 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4981 1862
+5006 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5050 1862
+5075 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 1774
+5094 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5201 1906
+5201 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5207 1906
+5207 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+5201 1843
+5188 1856
+5176 1862
+5163 1862
+5144 1856
+5132 1843
+5125 1824
+5125 1812
+5132 1793
+5144 1780
+5163 1774
+5176 1774
+5188 1780
+5201 1793
+14 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5163 1862
+5150 1856
+5138 1843
+5132 1824
+5132 1812
+5138 1793
+5150 1780
+5163 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5182 1906
+5207 1906
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5201 1774
+5226 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5264 1824
+5339 1824
+5339 1837
+5333 1849
+5326 1856
+5314 1862
+5295 1862
+5276 1856
+5264 1843
+5257 1824
+5257 1812
+5264 1793
+5276 1780
+5295 1774
+5308 1774
+5326 1780
+5339 1793
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5333 1824
+5333 1843
+5326 1856
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5295 1862
+5282 1856
+5270 1843
+5264 1824
+5264 1812
+5270 1793
+5282 1780
+5295 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5528 1931
+5515 1918
+5502 1900
+5490 1875
+5484 1843
+5484 1818
+5490 1787
+5502 1761
+5515 1743
+5528 1730
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5515 1918
+5502 1893
+5496 1875
+5490 1843
+5490 1818
+5496 1787
+5502 1768
+5515 1743
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5571 1831
+5685 1831
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5842 1862
+5842 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5848 1862
+5848 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5848 1843
+5861 1856
+5879 1862
+5892 1862
+5911 1856
+5917 1843
+5917 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5892 1862
+5905 1856
+5911 1843
+5911 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5917 1843
+5930 1856
+5949 1862
+5961 1862
+5980 1856
+5986 1843
+5986 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5961 1862
+5974 1856
+5980 1843
+5980 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5823 1862
+5848 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5823 1774
+5867 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5892 1774
+5936 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5961 1774
+6005 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+6043 1824
+6118 1824
+6118 1837
+6112 1849
+6106 1856
+6093 1862
+6074 1862
+6055 1856
+6043 1843
+6036 1824
+6036 1812
+6043 1793
+6055 1780
+6074 1774
+6087 1774
+6106 1780
+6118 1793
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6112 1824
+6112 1843
+6106 1856
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6074 1862
+6062 1856
+6049 1843
+6043 1824
+6043 1812
+6049 1793
+6062 1780
+6074 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+6168 1849
+6168 1843
+6162 1843
+6162 1849
+6168 1856
+6181 1862
+6206 1862
+6219 1856
+6225 1849
+6231 1837
+6231 1793
+6238 1780
+6244 1774
+13 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+6225 1849
+6225 1793
+6231 1780
+6244 1774
+6250 1774
+5 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+6225 1837
+6219 1831
+6181 1824
+6162 1818
+6156 1805
+6156 1793
+6162 1780
+6181 1774
+6200 1774
+6212 1780
+6225 1793
+11 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6181 1824
+6168 1818
+6162 1805
+6162 1793
+6168 1780
+6181 1774
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6294 1862
+6294 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6300 1862
+6300 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6300 1843
+6313 1856
+6332 1862
+6344 1862
+6363 1856
+6370 1843
+6370 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6344 1862
+6357 1856
+6363 1843
+6363 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6275 1862
+6300 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6275 1774
+6319 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6344 1774
+6388 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6483 1849
+6489 1862
+6489 1837
+6483 1849
+6476 1856
+6464 1862
+6439 1862
+6426 1856
+6420 1849
+6420 1837
+6426 1831
+6439 1824
+6470 1812
+6483 1805
+6489 1799
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6420 1843
+6426 1837
+6439 1831
+6470 1818
+6483 1812
+6489 1805
+6489 1787
+6483 1780
+6470 1774
+6445 1774
+6432 1780
+6426 1787
+6420 1799
+6420 1774
+6426 1787
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6633 1862
+6659 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6640 1862
+6659 1793
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6684 1862
+6659 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6684 1862
+6709 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6690 1862
+6709 1793
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6734 1862
+6709 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6615 1862
+6659 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6715 1862
+6753 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+6784 1824
+6860 1824
+6860 1837
+6853 1849
+6847 1856
+6835 1862
+6816 1862
+6797 1856
+6784 1843
+6778 1824
+6778 1812
+6784 1793
+6797 1780
+6816 1774
+6828 1774
+6847 1780
+6860 1793
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6853 1824
+6853 1843
+6847 1856
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6816 1862
+6803 1856
+6791 1843
+6784 1824
+6784 1812
+6791 1793
+6803 1780
+6816 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6960 1849
+6966 1862
+6966 1837
+6960 1849
+6954 1856
+6941 1862
+6916 1862
+6904 1856
+6897 1849
+6897 1837
+6904 1831
+6916 1824
+6948 1812
+6960 1805
+6966 1799
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6897 1843
+6904 1837
+6916 1831
+6948 1818
+6960 1812
+6966 1805
+6966 1787
+6960 1780
+6948 1774
+6922 1774
+6910 1780
+6904 1787
+6897 1799
+6897 1774
+6904 1787
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7017 1906
+7017 1799
+7023 1780
+7036 1774
+7048 1774
+7061 1780
+7067 1793
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+7023 1906
+7023 1799
+7029 1780
+7036 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6998 1862
+7048 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7098 1931
+7111 1918
+7124 1900
+7136 1875
+7142 1843
+7142 1818
+7136 1787
+7124 1761
+7111 1743
+7098 1730
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7111 1918
+7124 1893
+7130 1875
+7136 1843
+7136 1818
+7130 1787
+7124 1768
+7111 1743
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 5370
+1804 5370
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 5377
+1804 5377
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 5352
+1672 5377
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 5352
+1804 5396
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+1729 5440
+1735 5440
+1735 5433
+1729 5433
+1723 5440
+1716 5452
+1716 5477
+1723 5490
+1729 5496
+1742 5502
+1786 5502
+1798 5509
+1804 5515
+13 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+1729 5496
+1786 5496
+1798 5502
+1804 5515
+1804 5521
+5 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+1742 5496
+1748 5490
+1754 5452
+1760 5433
+1773 5427
+1786 5427
+1798 5433
+1804 5452
+1804 5471
+1798 5484
+1786 5496
+11 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1754 5452
+1760 5440
+1773 5433
+1786 5433
+1798 5440
+1804 5452
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1672 5565
+1779 5565
+1798 5571
+1804 5584
+1804 5597
+1798 5609
+1786 5615
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1672 5571
+1779 5571
+1798 5578
+1804 5584
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5546
+1716 5597
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1679 5666
+1685 5659
+1679 5653
+1672 5659
+4 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5659
+1804 5659
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5666
+1804 5666
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5641
+1716 5666
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 5641
+1804 5685
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1672 5729
+1779 5729
+1798 5735
+1804 5747
+1804 5760
+1798 5773
+1786 5779
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1672 5735
+1779 5735
+1798 5741
+1804 5747
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5710
+1716 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1716 5823
+1786 5823
+1798 5829
+1804 5848
+1804 5861
+1798 5879
+1786 5892
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 5829
+1786 5829
+1798 5835
+1804 5848
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5892
+1804 5892
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5898
+1804 5898
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5804
+1716 5829
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5873
+1716 5898
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 5892
+1804 5917
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 6024
+1804 6024
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 6030
+1804 6030
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+1735 6024
+1723 6011
+1716 5999
+1716 5986
+1723 5967
+1735 5955
+1754 5949
+1767 5949
+1786 5955
+1798 5967
+1804 5986
+1804 5999
+1798 6011
+1786 6024
+14 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1716 5986
+1723 5974
+1735 5961
+1754 5955
+1767 5955
+1786 5961
+1798 5974
+1804 5986
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 6005
+1672 6030
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 6024
+1804 6049
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+1754 6087
+1754 6162
+1742 6162
+1729 6156
+1723 6150
+1716 6137
+1716 6118
+1723 6099
+1735 6087
+1754 6080
+1767 6080
+1786 6087
+1798 6099
+1804 6118
+1804 6131
+1798 6150
+1786 6162
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1754 6156
+1735 6156
+1723 6150
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1716 6118
+1723 6106
+1735 6093
+1754 6087
+1767 6087
+1786 6093
+1798 6106
+1804 6118
+8 MLine
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5395 6543 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6451 5080 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8920 3214 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5084 2696 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3045 4078 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4324 6359 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4385 8467 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4658 8398 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4669 5933 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5138 5898 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5268 6785 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5407 6647 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5395 6543 32 Circ
+End
+
+Begin %I Poly
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+5407 6647
+5268 6785
+5138 5898
+4669 5933
+4658 8398
+4385 8467
+4324 6359
+3045 4078
+5084 2696
+8920 3214
+6451 5080
+5395 6543
+12 Poly
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/fit-exp.eps b/gsl-1.9/doc/fit-exp.eps
new file mode 100644
index 0000000..da25ffe
--- /dev/null
+++ b/gsl-1.9/doc/fit-exp.eps
@@ -0,0 +1,767 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: tmp.eps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Sun Sep 24 21:06:38 2000
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%Orientation: Portrait
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+392 420 M
+63 0 V
+6577 0 R
+-63 0 V
+308 420 M
+(0) Rshow
+392 1056 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(1) Rshow
+392 1692 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(2) Rshow
+392 2328 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(3) Rshow
+392 2964 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(4) Rshow
+392 3600 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(5) Rshow
+392 4236 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(6) Rshow
+392 4872 M
+63 0 V
+6577 0 R
+-63 0 V
+-6661 0 R
+(7) Rshow
+392 420 M
+0 63 V
+0 4389 R
+0 -63 V
+392 280 M
+(0) Cshow
+1222 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(5) Cshow
+2052 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(10) Cshow
+2882 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(15) Cshow
+3712 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(20) Cshow
+4542 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(25) Cshow
+5372 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(30) Cshow
+6202 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(35) Cshow
+7032 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(40) Cshow
+1.000 UL
+LTb
+392 420 M
+6640 0 V
+0 4452 V
+-6640 0 V
+392 420 L
+0 2646 M
+currentpoint gsave translate 90 rotate 0 0 M
+(y) Cshow
+grestore
+3712 140 M
+(t) Cshow
+1.000 UP
+1.000 UL
+LT0
+6381 4739 M
+('data' using 2:3:4) Rshow
+6465 4739 M
+399 0 V
+-399 31 R
+0 -62 V
+399 62 R
+0 -62 V
+392 4100 M
+0 127 V
+361 4100 M
+62 0 V
+-62 127 R
+62 0 V
+558 3929 M
+0 128 V
+527 3929 M
+62 0 V
+-62 128 R
+62 0 V
+724 3679 M
+0 127 V
+693 3679 M
+62 0 V
+-62 127 R
+62 0 V
+890 3396 M
+0 127 V
+859 3396 M
+62 0 V
+-62 127 R
+62 0 V
+135 -334 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -359 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -372 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -186 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -361 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -370 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -123 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -161 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -220 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -447 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -12 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -378 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -120 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -125 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -283 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -69 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -272 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -173 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -48 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -249 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -57 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -278 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -88 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -155 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -73 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -349 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 59 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -260 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -146 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -39 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -218 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -135 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -156 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -72 R
+0 127 V
+-31 -127 R
+62 0 V
+-62 127 R
+62 0 V
+135 -86 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+135 -159 R
+0 128 V
+-31 -128 R
+62 0 V
+-62 128 R
+62 0 V
+392 4164 Pls
+558 3993 Pls
+724 3742 Pls
+890 3459 Pls
+1056 3253 Pls
+1222 3021 Pls
+1388 2776 Pls
+1554 2717 Pls
+1720 2483 Pls
+1886 2239 Pls
+2052 2244 Pls
+2218 2211 Pls
+2384 2118 Pls
+2550 1798 Pls
+2716 1912 Pls
+2882 1662 Pls
+3048 1669 Pls
+3214 1672 Pls
+3380 1517 Pls
+3546 1575 Pls
+3712 1429 Pls
+3878 1384 Pls
+4044 1463 Pls
+4210 1342 Pls
+4376 1411 Pls
+4542 1261 Pls
+4708 1301 Pls
+4874 1273 Pls
+5040 1327 Pls
+5206 1104 Pls
+5372 1290 Pls
+5538 1158 Pls
+5704 1139 Pls
+5870 1228 Pls
+6036 1136 Pls
+6202 1129 Pls
+6368 1100 Pls
+6534 1156 Pls
+6700 1197 Pls
+6866 1166 Pls
+6664 4739 Pls
+1.000 UL
+LT1
+6381 4599 M
+(f\(x\)) Rshow
+6465 4599 M
+399 0 V
+392 4251 M
+67 -127 V
+67 -122 V
+67 -117 V
+67 -112 V
+67 -108 V
+67 -104 V
+67 -99 V
+68 -96 V
+67 -92 V
+67 -88 V
+67 -84 V
+67 -81 V
+67 -78 V
+67 -75 V
+67 -72 V
+67 -69 V
+67 -66 V
+67 -64 V
+67 -61 V
+67 -59 V
+67 -56 V
+68 -54 V
+67 -52 V
+67 -50 V
+67 -48 V
+67 -46 V
+67 -44 V
+67 -42 V
+67 -41 V
+67 -39 V
+67 -38 V
+67 -36 V
+67 -34 V
+67 -33 V
+67 -32 V
+68 -31 V
+67 -29 V
+67 -29 V
+67 -27 V
+67 -26 V
+67 -25 V
+67 -24 V
+67 -23 V
+67 -22 V
+67 -21 V
+67 -20 V
+67 -20 V
+67 -19 V
+67 -18 V
+68 -17 V
+67 -17 V
+67 -16 V
+67 -15 V
+67 -15 V
+67 -14 V
+67 -14 V
+67 -13 V
+67 -12 V
+67 -12 V
+67 -12 V
+67 -11 V
+67 -11 V
+67 -10 V
+68 -10 V
+67 -9 V
+67 -9 V
+67 -9 V
+67 -8 V
+67 -8 V
+67 -8 V
+67 -7 V
+67 -7 V
+67 -7 V
+67 -7 V
+67 -6 V
+67 -6 V
+67 -6 V
+68 -5 V
+67 -6 V
+67 -5 V
+67 -5 V
+67 -4 V
+67 -5 V
+67 -4 V
+67 -4 V
+67 -4 V
+67 -4 V
+67 -4 V
+67 -4 V
+67 -3 V
+67 -3 V
+68 -3 V
+67 -3 V
+67 -3 V
+67 -3 V
+67 -3 V
+67 -2 V
+67 -3 V
+67 -2 V
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/gsl-1.9/doc/fit-wlinear.eps b/gsl-1.9/doc/fit-wlinear.eps
new file mode 100644
index 0000000..2b2737b
--- /dev/null
+++ b/gsl-1.9/doc/fit-wlinear.eps
@@ -0,0 +1,6958 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 1.6
+%%Title: PostScript plot
+%%CreationDate: Sun Aug 6 11:26:34 2000
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 85 180 500 576
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources:
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+/DrawDict 50 dict def
+DrawDict begin
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/arrowWidth 4 def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eofill
+} {
+eoclip
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eofill
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources:
+%%PageBoundingBox: 85 180 500 576
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Poly
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2304 2304
+2304 9216
+9216 9216
+9216 2304
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1930 2107
+1952 2118
+1985 2151
+1985 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1974 2140
+1974 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1930 1920
+2029 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2260 2074
+2249 2041
+2227 2019
+2194 2008
+2183 2008
+2150 2019
+2128 2041
+2117 2074
+2117 2085
+2128 2118
+2150 2140
+2183 2151
+2205 2151
+2238 2140
+2260 2118
+2271 2085
+2271 2019
+2260 1975
+2249 1953
+2227 1931
+2194 1920
+2161 1920
+2139 1931
+2128 1953
+2128 1964
+2139 1975
+2150 1964
+2139 1953
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2183 2008
+2161 2019
+2139 2041
+2128 2074
+2128 2085
+2139 2118
+2161 2140
+2183 2151
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2205 2151
+2227 2140
+2249 2118
+2260 2085
+2260 2019
+2249 1975
+2238 1953
+2216 1931
+2194 1920
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2469 2118
+2458 2107
+2469 2096
+2480 2107
+2480 2118
+2469 2140
+2447 2151
+2414 2151
+2381 2140
+2359 2118
+2348 2096
+2337 2052
+2337 1986
+2348 1953
+2370 1931
+2403 1920
+2425 1920
+2458 1931
+2480 1953
+2491 1986
+2491 1997
+2480 2030
+2458 2052
+2425 2063
+2414 2063
+2381 2052
+2359 2030
+2348 1997
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2414 2151
+2392 2140
+2370 2118
+2359 2096
+2348 2052
+2348 1986
+2359 1953
+2381 1931
+2403 1920
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2425 1920
+2447 1931
+2469 1953
+2480 1986
+2480 1997
+2469 2030
+2447 2052
+2425 2063
+8 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2623 2151
+2590 2140
+2568 2107
+2557 2052
+2557 2019
+2568 1964
+2590 1931
+2623 1920
+2645 1920
+2678 1931
+2700 1964
+2711 2019
+2711 2052
+2700 2107
+2678 2140
+2645 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2623 2151
+2601 2140
+2590 2129
+2579 2107
+2568 2052
+2568 2019
+2579 1964
+2590 1942
+2601 1931
+2623 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2645 1920
+2667 1931
+2678 1942
+2689 1964
+2700 2019
+2700 2052
+2689 2107
+2678 2129
+2667 2140
+2645 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3313 2107
+3335 2118
+3368 2151
+3368 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3357 2140
+3357 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3313 1920
+3411 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+3642 2074
+3631 2041
+3609 2019
+3576 2008
+3565 2008
+3532 2019
+3510 2041
+3499 2074
+3499 2085
+3510 2118
+3532 2140
+3565 2151
+3587 2151
+3620 2140
+3642 2118
+3653 2085
+3653 2019
+3642 1975
+3631 1953
+3609 1931
+3576 1920
+3543 1920
+3521 1931
+3510 1953
+3510 1964
+3521 1975
+3532 1964
+3521 1953
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3565 2008
+3543 2019
+3521 2041
+3510 2074
+3510 2085
+3521 2118
+3543 2140
+3565 2151
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+3587 2151
+3609 2140
+3631 2118
+3642 2085
+3642 2019
+3631 1975
+3620 1953
+3598 1931
+3576 1920
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3719 2151
+3719 2085
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3719 2107
+3730 2129
+3752 2151
+3774 2151
+3829 2118
+3851 2118
+3862 2129
+3873 2151
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3730 2129
+3752 2140
+3774 2140
+3829 2118
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+3873 2151
+3873 2118
+3862 2085
+3818 2030
+3807 2008
+3796 1975
+3796 1920
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+3862 2085
+3807 2030
+3796 2008
+3785 1975
+3785 1920
+5 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4005 2151
+3972 2140
+3950 2107
+3939 2052
+3939 2019
+3950 1964
+3972 1931
+4005 1920
+4027 1920
+4060 1931
+4082 1964
+4093 2019
+4093 2052
+4082 2107
+4060 2140
+4027 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4005 2151
+3983 2140
+3972 2129
+3961 2107
+3950 2052
+3950 2019
+3961 1964
+3972 1942
+3983 1931
+4005 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4027 1920
+4049 1931
+4060 1942
+4071 1964
+4082 2019
+4082 2052
+4071 2107
+4060 2129
+4049 2140
+4027 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4695 2107
+4717 2118
+4750 2151
+4750 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4739 2140
+4739 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4695 1920
+4794 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+5025 2074
+5014 2041
+4992 2019
+4959 2008
+4948 2008
+4915 2019
+4893 2041
+4882 2074
+4882 2085
+4893 2118
+4915 2140
+4948 2151
+4970 2151
+5003 2140
+5025 2118
+5036 2085
+5036 2019
+5025 1975
+5014 1953
+4992 1931
+4959 1920
+4926 1920
+4904 1931
+4893 1953
+4893 1964
+4904 1975
+4915 1964
+4904 1953
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4948 2008
+4926 2019
+4904 2041
+4893 2074
+4893 2085
+4904 2118
+4926 2140
+4948 2151
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+4970 2151
+4992 2140
+5014 2118
+5025 2085
+5025 2019
+5014 1975
+5003 1953
+4981 1931
+4959 1920
+9 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+5157 2151
+5124 2140
+5113 2118
+5113 2085
+5124 2063
+5157 2052
+5201 2052
+5234 2063
+5245 2085
+5245 2118
+5234 2140
+5201 2151
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+5157 2151
+5135 2140
+5124 2118
+5124 2085
+5135 2063
+5157 2052
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+5201 2052
+5223 2063
+5234 2085
+5234 2118
+5223 2140
+5201 2151
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5157 2052
+5124 2041
+5113 2030
+5102 2008
+5102 1964
+5113 1942
+5124 1931
+5157 1920
+5201 1920
+5234 1931
+5245 1942
+5256 1964
+5256 2008
+5245 2030
+5234 2041
+5201 2052
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5157 2052
+5135 2041
+5124 2030
+5113 2008
+5113 1964
+5124 1942
+5135 1931
+5157 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5201 1920
+5223 1931
+5234 1942
+5245 1964
+5245 2008
+5234 2030
+5223 2041
+5201 2052
+8 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5388 2151
+5355 2140
+5333 2107
+5322 2052
+5322 2019
+5333 1964
+5355 1931
+5388 1920
+5410 1920
+5443 1931
+5465 1964
+5476 2019
+5476 2052
+5465 2107
+5443 2140
+5410 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5388 2151
+5366 2140
+5355 2129
+5344 2107
+5333 2052
+5333 2019
+5344 1964
+5355 1942
+5366 1931
+5388 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5410 1920
+5432 1931
+5443 1942
+5454 1964
+5465 2019
+5465 2052
+5454 2107
+5443 2129
+5432 2140
+5410 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6077 2107
+6099 2118
+6132 2151
+6132 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6121 2140
+6121 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6077 1920
+6176 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+6407 2074
+6396 2041
+6374 2019
+6341 2008
+6330 2008
+6297 2019
+6275 2041
+6264 2074
+6264 2085
+6275 2118
+6297 2140
+6330 2151
+6352 2151
+6385 2140
+6407 2118
+6418 2085
+6418 2019
+6407 1975
+6396 1953
+6374 1931
+6341 1920
+6308 1920
+6286 1931
+6275 1953
+6275 1964
+6286 1975
+6297 1964
+6286 1953
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6330 2008
+6308 2019
+6286 2041
+6275 2074
+6275 2085
+6286 2118
+6308 2140
+6330 2151
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+6352 2151
+6374 2140
+6396 2118
+6407 2085
+6407 2019
+6396 1975
+6385 1953
+6363 1931
+6341 1920
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+6627 2074
+6616 2041
+6594 2019
+6561 2008
+6550 2008
+6517 2019
+6495 2041
+6484 2074
+6484 2085
+6495 2118
+6517 2140
+6550 2151
+6572 2151
+6605 2140
+6627 2118
+6638 2085
+6638 2019
+6627 1975
+6616 1953
+6594 1931
+6561 1920
+6528 1920
+6506 1931
+6495 1953
+6495 1964
+6506 1975
+6517 1964
+6506 1953
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6550 2008
+6528 2019
+6506 2041
+6495 2074
+6495 2085
+6506 2118
+6528 2140
+6550 2151
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+6572 2151
+6594 2140
+6616 2118
+6627 2085
+6627 2019
+6616 1975
+6605 1953
+6583 1931
+6561 1920
+9 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6770 2151
+6737 2140
+6715 2107
+6704 2052
+6704 2019
+6715 1964
+6737 1931
+6770 1920
+6792 1920
+6825 1931
+6847 1964
+6858 2019
+6858 2052
+6847 2107
+6825 2140
+6792 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6770 2151
+6748 2140
+6737 2129
+6726 2107
+6715 2052
+6715 2019
+6726 1964
+6737 1942
+6748 1931
+6770 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6792 1920
+6814 1931
+6825 1942
+6836 1964
+6847 2019
+6847 2052
+6836 2107
+6825 2129
+6814 2140
+6792 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+7438 2107
+7449 2096
+7438 2085
+7427 2096
+7427 2107
+7438 2129
+7449 2140
+7482 2151
+7526 2151
+7559 2140
+7570 2129
+7581 2107
+7581 2085
+7570 2063
+7537 2041
+7482 2019
+7460 2008
+7438 1986
+7427 1953
+7427 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7526 2151
+7548 2140
+7559 2129
+7570 2107
+7570 2085
+7559 2063
+7526 2041
+7482 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7427 1942
+7438 1953
+7460 1953
+7515 1931
+7548 1931
+7570 1942
+7581 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+7460 1953
+7515 1920
+7559 1920
+7570 1931
+7581 1953
+7581 1975
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7713 2151
+7680 2140
+7658 2107
+7647 2052
+7647 2019
+7658 1964
+7680 1931
+7713 1920
+7735 1920
+7768 1931
+7790 1964
+7801 2019
+7801 2052
+7790 2107
+7768 2140
+7735 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7713 2151
+7691 2140
+7680 2129
+7669 2107
+7658 2052
+7658 2019
+7669 1964
+7680 1942
+7691 1931
+7713 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7735 1920
+7757 1931
+7768 1942
+7779 1964
+7790 2019
+7790 2052
+7779 2107
+7768 2129
+7757 2140
+7735 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7933 2151
+7900 2140
+7878 2107
+7867 2052
+7867 2019
+7878 1964
+7900 1931
+7933 1920
+7955 1920
+7988 1931
+8010 1964
+8021 2019
+8021 2052
+8010 2107
+7988 2140
+7955 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7933 2151
+7911 2140
+7900 2129
+7889 2107
+7878 2052
+7878 2019
+7889 1964
+7900 1942
+7911 1931
+7933 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7955 1920
+7977 1931
+7988 1942
+7999 1964
+8010 2019
+8010 2052
+7999 2107
+7988 2129
+7977 2140
+7955 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8152 2151
+8120 2140
+8098 2107
+8087 2052
+8087 2019
+8098 1964
+8120 1931
+8152 1920
+8174 1920
+8207 1931
+8229 1964
+8240 2019
+8240 2052
+8229 2107
+8207 2140
+8174 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8152 2151
+8131 2140
+8120 2129
+8109 2107
+8098 2052
+8098 2019
+8109 1964
+8120 1942
+8131 1931
+8152 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8174 1920
+8196 1931
+8207 1942
+8218 1964
+8229 2019
+8229 2052
+8218 2107
+8207 2129
+8196 2140
+8174 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+8820 2107
+8831 2096
+8820 2085
+8809 2096
+8809 2107
+8820 2129
+8831 2140
+8864 2151
+8908 2151
+8941 2140
+8952 2129
+8963 2107
+8963 2085
+8952 2063
+8919 2041
+8864 2019
+8842 2008
+8820 1986
+8809 1953
+8809 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8908 2151
+8930 2140
+8941 2129
+8952 2107
+8952 2085
+8941 2063
+8908 2041
+8864 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+8809 1942
+8820 1953
+8842 1953
+8897 1931
+8930 1931
+8952 1942
+8963 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8842 1953
+8897 1920
+8941 1920
+8952 1931
+8963 1953
+8963 1975
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9095 2151
+9062 2140
+9040 2107
+9029 2052
+9029 2019
+9040 1964
+9062 1931
+9095 1920
+9117 1920
+9150 1931
+9172 1964
+9183 2019
+9183 2052
+9172 2107
+9150 2140
+9117 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9095 2151
+9073 2140
+9062 2129
+9051 2107
+9040 2052
+9040 2019
+9051 1964
+9062 1942
+9073 1931
+9095 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9117 1920
+9139 1931
+9150 1942
+9161 1964
+9172 2019
+9172 2052
+9161 2107
+9150 2129
+9139 2140
+9117 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+9282 2107
+9304 2118
+9337 2151
+9337 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9326 2140
+9326 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9282 1920
+9381 1920
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9535 2151
+9502 2140
+9480 2107
+9469 2052
+9469 2019
+9480 1964
+9502 1931
+9535 1920
+9557 1920
+9590 1931
+9612 1964
+9623 2019
+9623 2052
+9612 2107
+9590 2140
+9557 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9535 2151
+9513 2140
+9502 2129
+9491 2107
+9480 2052
+9480 2019
+9491 1964
+9502 1942
+9513 1931
+9535 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9557 1920
+9579 1931
+9590 1942
+9601 1964
+9612 2019
+9612 2052
+9601 2107
+9590 2129
+9579 2140
+9557 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2580 9216
+2580 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2580 2304
+2580 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2857 9216
+2857 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2857 2304
+2857 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3133 9216
+3133 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3133 2304
+3133 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3410 9216
+3410 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3410 2304
+3410 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3963 9216
+3963 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3963 2304
+3963 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4239 9216
+4239 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4239 2304
+4239 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4516 9216
+4516 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4516 2304
+4516 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4792 9216
+4792 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4792 2304
+4792 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5345 9216
+5345 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5345 2304
+5345 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5622 9216
+5622 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5622 2304
+5622 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5898 9216
+5898 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5898 2304
+5898 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6175 9216
+6175 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6175 2304
+6175 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6728 9216
+6728 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6728 2304
+6728 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7004 9216
+7004 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7004 2304
+7004 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7281 9216
+7281 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7281 2304
+7281 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7557 9216
+7557 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7557 2304
+7557 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8110 9216
+8110 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8110 2304
+8110 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8387 9216
+8387 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8387 2304
+8387 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8663 9216
+8663 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8663 2304
+8663 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8940 9216
+8940 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8940 2304
+8940 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2079 2436
+2046 2425
+2024 2392
+2013 2337
+2013 2304
+2024 2249
+2046 2216
+2079 2205
+2101 2205
+2134 2216
+2156 2249
+2167 2304
+2167 2337
+2156 2392
+2134 2425
+2101 2436
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 2436
+2057 2425
+2046 2414
+2035 2392
+2024 2337
+2024 2304
+2035 2249
+2046 2227
+2057 2216
+2079 2205
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 2205
+2123 2216
+2134 2227
+2145 2249
+2156 2304
+2156 2337
+2145 2392
+2134 2414
+2123 2425
+2101 2436
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 4164
+2013 4054
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+2013 4054
+2035 4076
+2068 4087
+2101 4087
+2134 4076
+2156 4054
+2167 4021
+2167 3999
+2156 3966
+2134 3944
+2101 3933
+2068 3933
+2035 3944
+2024 3955
+2013 3977
+2013 3988
+2024 3999
+2035 3988
+2024 3977
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2101 4087
+2123 4076
+2145 4054
+2156 4021
+2156 3999
+2145 3966
+2123 3944
+2101 3933
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 4164
+2145 4164
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2035 4153
+2090 4153
+2145 4164
+3 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9078 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2442 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1826 5848
+1848 5859
+1881 5892
+1881 5661
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1870 5881
+1870 5661
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1826 5661
+1925 5661
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2079 5892
+2046 5881
+2024 5848
+2013 5793
+2013 5760
+2024 5705
+2046 5672
+2079 5661
+2101 5661
+2134 5672
+2156 5705
+2167 5760
+2167 5793
+2156 5848
+2134 5881
+2101 5892
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 5892
+2057 5881
+2046 5870
+2035 5848
+2024 5793
+2024 5760
+2035 5705
+2046 5683
+2057 5672
+2079 5661
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 5661
+2123 5672
+2134 5683
+2145 5705
+2156 5760
+2156 5793
+2145 5848
+2134 5870
+2123 5881
+2101 5892
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9078 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2442 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1826 7576
+1848 7587
+1881 7620
+1881 7389
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1870 7609
+1870 7389
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1826 7389
+1925 7389
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 7620
+2013 7510
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+2013 7510
+2035 7532
+2068 7543
+2101 7543
+2134 7532
+2156 7510
+2167 7477
+2167 7455
+2156 7422
+2134 7400
+2101 7389
+2068 7389
+2035 7400
+2024 7411
+2013 7433
+2013 7444
+2024 7455
+2035 7444
+2024 7433
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2101 7543
+2123 7532
+2145 7510
+2156 7477
+2156 7455
+2145 7422
+2123 7400
+2101 7389
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 7620
+2145 7620
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2035 7609
+2090 7609
+2145 7620
+3 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7488
+9078 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7488
+2442 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+1804 9304
+1815 9293
+1804 9282
+1793 9293
+1793 9304
+1804 9326
+1815 9337
+1848 9348
+1892 9348
+1925 9337
+1936 9326
+1947 9304
+1947 9282
+1936 9260
+1903 9238
+1848 9216
+1826 9205
+1804 9183
+1793 9150
+1793 9117
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 9348
+1914 9337
+1925 9326
+1936 9304
+1936 9282
+1925 9260
+1892 9238
+1848 9216
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1793 9139
+1804 9150
+1826 9150
+1881 9128
+1914 9128
+1936 9139
+1947 9150
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1826 9150
+1881 9117
+1925 9117
+1936 9128
+1947 9150
+1947 9172
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2079 9348
+2046 9337
+2024 9304
+2013 9249
+2013 9216
+2024 9161
+2046 9128
+2079 9117
+2101 9117
+2134 9128
+2156 9161
+2167 9216
+2167 9249
+2156 9304
+2134 9337
+2101 9348
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 9348
+2057 9337
+2046 9326
+2035 9304
+2024 9249
+2024 9216
+2035 9161
+2046 9139
+2057 9128
+2079 9117
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 9117
+2123 9128
+2134 9139
+2145 9161
+2156 9216
+2156 9249
+2145 9304
+2134 9326
+2123 9337
+2101 9348
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2650
+9161 2650
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2650
+2359 2650
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2995
+9161 2995
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2995
+2359 2995
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3341
+9161 3341
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3341
+2359 3341
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3686
+9161 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2359 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9161 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2359 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4378
+9161 4378
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4378
+2359 4378
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4723
+9161 4723
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4723
+2359 4723
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5069
+9161 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2359 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5414
+9161 5414
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5414
+2359 5414
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6106
+9161 6106
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6106
+2359 6106
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6451
+9161 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2359 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6797
+9161 6797
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6797
+2359 6797
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7142
+9161 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7142
+2359 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7488
+9161 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7488
+2359 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7834
+9161 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2359 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8179
+9161 8179
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8179
+2359 8179
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8525
+9161 8525
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8525
+2359 8525
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8870
+9161 8870
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8870
+2359 8870
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5694 1621
+5815 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5705 1621
+5826 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5826 1621
+5694 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5672 1621
+5738 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5782 1621
+5848 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5672 1467
+5738 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5782 1467
+5848 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1354 5700
+1508 5765
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1354 5711
+1486 5765
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+1354 5831
+1508 5765
+1552 5744
+1574 5722
+1585 5700
+1585 5689
+1574 5678
+1563 5689
+1574 5700
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1354 5678
+1354 5744
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1354 5787
+1354 5853
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3583 5358
+3790 5358
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 5358
+3686 7544
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3583 7544
+3790 7544
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3622 6451
+3751 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 6386
+3686 6516
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4965 5333
+5172 5333
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 5333
+5069 6878
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4965 6878
+5172 6878
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5004 6106
+5134 6106
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 6041
+5069 6170
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6348 6511
+6555 6511
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 6511
+6451 7773
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6348 7773
+6555 7773
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6386 7142
+6516 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 7078
+6451 7207
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7730 6250
+7937 6250
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6250
+7834 7343
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7730 7343
+7937 7343
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7769 6797
+7898 6797
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6732
+7834 6862
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 160
+2442 6126
+2484 6133
+2525 6139
+2567 6145
+2608 6151
+2650 6157
+2691 6164
+2733 6170
+2774 6176
+2815 6182
+2857 6189
+2898 6195
+2940 6201
+2981 6207
+3023 6213
+3064 6220
+3106 6226
+3147 6232
+3189 6238
+3230 6245
+3272 6251
+3313 6257
+3355 6263
+3396 6269
+3438 6276
+3479 6282
+3521 6288
+3562 6294
+3603 6301
+3645 6307
+3686 6313
+3728 6319
+3769 6325
+3811 6332
+3852 6338
+3894 6344
+3935 6350
+3977 6357
+4018 6363
+4060 6369
+4101 6375
+4143 6381
+4184 6388
+4226 6394
+4267 6400
+4308 6406
+4350 6412
+4391 6419
+4433 6425
+4474 6431
+4516 6437
+4557 6444
+4599 6450
+4640 6456
+4682 6462
+4723 6468
+4765 6475
+4806 6481
+4848 6487
+4889 6493
+4931 6500
+4972 6506
+5014 6512
+5055 6518
+5096 6524
+5138 6531
+5179 6537
+5221 6543
+5262 6549
+5304 6556
+5345 6562
+5387 6568
+5428 6574
+5470 6580
+5511 6587
+5553 6593
+5594 6599
+5636 6605
+5677 6612
+5719 6618
+5760 6624
+5801 6630
+5843 6636
+5884 6643
+5926 6649
+5967 6655
+6009 6661
+6050 6668
+6092 6674
+6133 6680
+6175 6686
+6216 6692
+6258 6699
+6299 6705
+6341 6711
+6382 6717
+6424 6724
+6465 6730
+6506 6736
+6548 6742
+6589 6748
+6631 6755
+6672 6761
+6714 6767
+6755 6773
+6797 6780
+6838 6786
+6880 6792
+6921 6798
+6963 6804
+7004 6811
+7046 6817
+7087 6823
+7129 6829
+7170 6836
+7212 6842
+7253 6848
+7294 6854
+7336 6860
+7377 6867
+7419 6873
+7460 6879
+7502 6885
+7543 6891
+7585 6898
+7626 6904
+7668 6910
+7709 6916
+7751 6923
+7792 6929
+7834 6935
+7875 6941
+7917 6947
+7958 6954
+7999 6960
+8041 6966
+8082 6972
+8124 6979
+8165 6985
+8207 6991
+8248 6997
+8290 7003
+8331 7010
+8373 7016
+8414 7022
+8456 7028
+8497 7035
+8539 7041
+8580 7047
+8622 7053
+8663 7059
+8705 7066
+8746 7072
+8787 7078
+8829 7084
+8870 7091
+8912 7097
+8953 7103
+8995 7109
+9036 7115
+160 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 34952
+1 0 0 [ 1 3 1 3 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 160
+2442 7186
+2484 7183
+2525 7179
+2567 7176
+2608 7172
+2650 7169
+2691 7165
+2733 7162
+2774 7158
+2815 7155
+2857 7151
+2898 7148
+2940 7144
+2981 7141
+3023 7138
+3064 7134
+3106 7131
+3147 7127
+3189 7124
+3230 7121
+3272 7118
+3313 7114
+3355 7111
+3396 7108
+3438 7105
+3479 7101
+3521 7098
+3562 7095
+3603 7092
+3645 7089
+3686 7086
+3728 7083
+3769 7080
+3811 7077
+3852 7074
+3894 7071
+3935 7068
+3977 7065
+4018 7062
+4060 7060
+4101 7057
+4143 7054
+4184 7051
+4226 7049
+4267 7046
+4308 7044
+4350 7041
+4391 7039
+4433 7037
+4474 7034
+4516 7032
+4557 7030
+4599 7028
+4640 7026
+4682 7024
+4723 7022
+4765 7020
+4806 7018
+4848 7016
+4889 7015
+4931 7013
+4972 7012
+5014 7011
+5055 7009
+5096 7008
+5138 7007
+5179 7007
+5221 7006
+5262 7005
+5304 7005
+5345 7004
+5387 7004
+5428 7004
+5470 7004
+5511 7005
+5553 7005
+5594 7006
+5636 7007
+5677 7008
+5719 7009
+5760 7010
+5801 7012
+5843 7014
+5884 7016
+5926 7019
+5967 7021
+6009 7024
+6050 7027
+6092 7031
+6133 7035
+6175 7039
+6216 7043
+6258 7048
+6299 7053
+6341 7058
+6382 7063
+6424 7069
+6465 7075
+6506 7082
+6548 7089
+6589 7096
+6631 7103
+6672 7111
+6714 7119
+6755 7127
+6797 7136
+6838 7145
+6880 7154
+6921 7163
+6963 7173
+7004 7183
+7046 7193
+7087 7203
+7129 7214
+7170 7225
+7212 7236
+7253 7247
+7294 7259
+7336 7271
+7377 7283
+7419 7295
+7460 7307
+7502 7319
+7543 7332
+7585 7345
+7626 7358
+7668 7371
+7709 7384
+7751 7397
+7792 7410
+7834 7424
+7875 7437
+7917 7451
+7958 7465
+7999 7479
+8041 7493
+8082 7507
+8124 7521
+8165 7535
+8207 7550
+8248 7564
+8290 7579
+8331 7593
+8373 7608
+8414 7622
+8456 7637
+8497 7652
+8539 7667
+8580 7682
+8622 7697
+8663 7712
+8705 7727
+8746 7742
+8787 7757
+8829 7772
+8870 7787
+8912 7802
+8953 7818
+8995 7833
+9036 7848
+160 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 34952
+1 0 0 [ 1 3 1 3 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 160
+2442 5066
+2484 5082
+2525 5098
+2567 5114
+2608 5130
+2650 5146
+2691 5162
+2733 5178
+2774 5194
+2815 5210
+2857 5226
+2898 5242
+2940 5258
+2981 5273
+3023 5289
+3064 5305
+3106 5321
+3147 5337
+3189 5352
+3230 5368
+3272 5384
+3313 5400
+3355 5415
+3396 5431
+3438 5447
+3479 5462
+3521 5478
+3562 5494
+3603 5509
+3645 5525
+3686 5540
+3728 5556
+3769 5571
+3811 5587
+3852 5602
+3894 5617
+3935 5633
+3977 5648
+4018 5663
+4060 5678
+4101 5694
+4143 5709
+4184 5724
+4226 5739
+4267 5754
+4308 5769
+4350 5784
+4391 5799
+4433 5813
+4474 5828
+4516 5843
+4557 5857
+4599 5872
+4640 5886
+4682 5901
+4723 5915
+4765 5930
+4806 5944
+4848 5958
+4889 5972
+4931 5986
+4972 6000
+5014 6013
+5055 6027
+5096 6041
+5138 6054
+5179 6067
+5221 6080
+5262 6094
+5304 6106
+5345 6119
+5387 6132
+5428 6144
+5470 6157
+5511 6169
+5553 6181
+5594 6192
+5636 6204
+5677 6215
+5719 6227
+5760 6238
+5801 6248
+5843 6259
+5884 6269
+5926 6279
+5967 6289
+6009 6298
+6050 6308
+6092 6317
+6133 6325
+6175 6334
+6216 6342
+6258 6350
+6299 6357
+6341 6364
+6382 6371
+6424 6378
+6465 6384
+6506 6390
+6548 6396
+6589 6401
+6631 6406
+6672 6411
+6714 6415
+6755 6419
+6797 6423
+6838 6427
+6880 6430
+6921 6433
+6963 6436
+7004 6438
+7046 6441
+7087 6443
+7129 6444
+7170 6446
+7212 6447
+7253 6448
+7294 6449
+7336 6450
+7377 6451
+7419 6451
+7460 6451
+7502 6451
+7543 6451
+7585 6451
+7626 6450
+7668 6450
+7709 6449
+7751 6448
+7792 6447
+7834 6446
+7875 6445
+7917 6444
+7958 6442
+7999 6441
+8041 6439
+8082 6438
+8124 6436
+8165 6434
+8207 6432
+8248 6430
+8290 6428
+8331 6426
+8373 6424
+8414 6422
+8456 6420
+8497 6417
+8539 6415
+8580 6412
+8622 6410
+8663 6407
+8705 6405
+8746 6402
+8787 6399
+8829 6397
+8870 6394
+8912 6391
+8953 6388
+8995 6385
+9036 6383
+160 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/fit-wlinear2.eps b/gsl-1.9/doc/fit-wlinear2.eps
new file mode 100644
index 0000000..a59a809
--- /dev/null
+++ b/gsl-1.9/doc/fit-wlinear2.eps
@@ -0,0 +1,5908 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 1.6
+%%Title: PostScript plot
+%%CreationDate: Sun Jul 29 14:10:38 2001
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 117 195 492 580
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/arrowWidth 4 def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eofill
+} {
+eoclip
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eofill
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 117 195 492 580
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Poly
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2304 2304
+2304 9216
+9216 9216
+9216 2304
+4 Poly
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 120.5899 213.1332 ] concat
+%I
+[
+(0.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 206.9899 213.1332 ] concat
+%I
+[
+(0.5)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 9216
+4032 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 2304
+4032 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 293.3899 213.1332 ] concat
+%I
+[
+(1.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 379.7899 213.1332 ] concat
+%I
+[
+(1.5)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 9216
+7488 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 2304
+7488 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 466.1899 213.1332 ] concat
+%I
+[
+(2.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 9216
+2650 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 2304
+2650 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 9216
+2995 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 2304
+2995 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 9216
+3341 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 2304
+3341 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 9216
+4032 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 2304
+4032 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 9216
+4378 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 2304
+4378 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 9216
+4723 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 2304
+4723 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 9216
+5414 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 2304
+5414 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 9216
+6106 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 2304
+6106 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 9216
+6797 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 2304
+6797 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 9216
+7142 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 2304
+7142 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 9216
+7488 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 2304
+7488 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 9216
+8179 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 2304
+8179 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 9216
+8525 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 2304
+8525 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 9216
+8870 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 2304
+8870 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 229.3306 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 278.702 ] concat
+%I
+[
+(1)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3291
+9078 3291
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3291
+2442 3291
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 328.0734 ] concat
+%I
+[
+(2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4279
+9078 4279
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4279
+2442 4279
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 377.4449 ] concat
+%I
+[
+(3)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5266
+9078 5266
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5266
+2442 5266
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 426.8163 ] concat
+%I
+[
+(4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6254
+9078 6254
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6254
+2442 6254
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 476.1877 ] concat
+%I
+[
+(5)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7241
+9078 7241
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7241
+2442 7241
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 525.5592 ] concat
+%I
+[
+(6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8229
+9078 8229
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8229
+2442 8229
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 574.9306 ] concat
+%I
+[
+(7)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2798
+9161 2798
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2798
+2359 2798
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3291
+9161 3291
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3291
+2359 3291
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3785
+9161 3785
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3785
+2359 3785
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4279
+9161 4279
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4279
+2359 4279
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4773
+9161 4773
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4773
+2359 4773
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5266
+9161 5266
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5266
+2359 5266
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6254
+9161 6254
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6254
+2359 6254
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6747
+9161 6747
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6747
+2359 6747
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7241
+9161 7241
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7241
+2359 7241
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7735
+9161 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7735
+2359 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8229
+9161 8229
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8229
+2359 8229
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8722
+9161 8722
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8722
+2359 8722
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2546 3162
+2753 3162
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 3162
+2650 3380
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2546 3380
+2753 3380
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 3206
+2650 3336
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 3271
+2706 3303
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 3271
+2593 3239
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 3271
+2706 3239
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 3271
+2593 3303
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2892 3503
+3099 3503
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 3503
+2995 3744
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2892 3744
+3099 3744
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 3558
+2995 3688
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 3623
+3051 3656
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 3623
+2939 3591
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 3623
+3051 3591
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 3623
+2939 3656
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3237 3677
+3444 3677
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 3677
+3341 3944
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3237 3944
+3444 3944
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 3746
+3341 3875
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 3811
+3397 3843
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 3811
+3285 3778
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 3811
+3397 3778
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 3811
+3285 3843
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3583 3740
+3790 3740
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 3740
+3686 4034
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3583 4034
+3790 4034
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 3822
+3686 3952
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 3887
+3743 3919
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 3887
+3630 3855
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 3887
+3743 3855
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 3887
+3630 3919
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3928 3936
+4136 3936
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 3936
+4032 4261
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3928 4261
+4136 4261
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 4034
+4032 4163
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 4098
+4088 4131
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 4098
+3976 4066
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 4098
+4088 4066
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 4098
+3976 4131
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4274 4025
+4481 4025
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 4025
+4378 4384
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4274 4384
+4481 4384
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 4140
+4378 4269
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 4205
+4434 4237
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 4205
+4321 4172
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 4205
+4434 4172
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 4205
+4321 4237
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4620 4013
+4827 4013
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 4013
+4723 4411
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4620 4411
+4827 4411
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 4147
+4723 4277
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 4212
+4779 4245
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 4212
+4667 4180
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 4212
+4779 4180
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 4212
+4667 4245
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4965 4563
+5172 4563
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 4563
+5069 5003
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4965 5003
+5172 5003
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 4718
+5069 4848
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 4783
+5125 4816
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 4783
+5013 4751
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 4783
+5125 4751
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 4783
+5013 4816
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5311 4481
+5518 4481
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 4481
+5414 4967
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5311 4967
+5518 4967
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 4659
+5414 4789
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 4724
+5471 4756
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 4724
+5358 4692
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 4724
+5471 4692
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 4724
+5358 4756
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5656 4257
+5864 4257
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 4257
+5760 4794
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5656 4794
+5864 4794
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 4460
+5760 4590
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 4525
+5816 4558
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 4525
+5704 4493
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 4525
+5816 4493
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 4525
+5704 4558
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6002 5058
+6209 5058
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 5058
+6106 5651
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6002 5651
+6209 5651
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 5290
+6106 5420
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 5355
+6162 5387
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 5355
+6049 5322
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 5355
+6162 5322
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 5355
+6049 5387
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6348 5751
+6555 5751
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 5751
+6451 6407
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6348 6407
+6555 6407
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 6014
+6451 6144
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 6079
+6507 6111
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 6079
+6395 6047
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 6079
+6507 6047
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 6079
+6395 6111
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6693 6156
+6900 6156
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 6156
+6797 6880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6693 6880
+6900 6880
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 6453
+6797 6583
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 6518
+6853 6550
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 6518
+6741 6486
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 6518
+6853 6486
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 6518
+6741 6550
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7039 5122
+7246 5122
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 5122
+7142 5923
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7039 5923
+7246 5923
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 5458
+7142 5588
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 5523
+7199 5555
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 5523
+7086 5490
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 5523
+7199 5490
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 5523
+7086 5555
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7384 6788
+7592 6788
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 6788
+7488 7673
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7384 7673
+7592 7673
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 7166
+7488 7295
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 7230
+7544 7263
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 7230
+7432 7198
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 7230
+7544 7198
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 7230
+7432 7263
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7730 5908
+7937 5908
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 5908
+7834 6886
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7730 6886
+7937 6886
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6332
+7834 6462
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6397
+7890 6430
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6397
+7777 6365
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6397
+7890 6365
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 6397
+7777 6430
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8076 6922
+8283 6922
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 6922
+8179 8003
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8076 8003
+8283 8003
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 7397
+8179 7527
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 7462
+8235 7495
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 7462
+8123 7430
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 7462
+8235 7430
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 7462
+8123 7495
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8421 8010
+8628 8010
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 8010
+8525 9205
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8421 9205
+8628 9205
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 8543
+8525 8672
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 8608
+8581 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 8608
+8469 8575
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 8608
+8581 8575
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 8608
+8469 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8767 7571
+8974 7571
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 7571
+8870 8891
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8767 8891
+8974 8891
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 8167
+8870 8296
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 8231
+8927 8264
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 8231
+8814 8199
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 8231
+8927 8199
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 8231
+8814 8264
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 200
+2304 3314
+2339 3324
+2373 3334
+2408 3343
+2442 3353
+2477 3364
+2511 3374
+2546 3385
+2580 3395
+2615 3406
+2650 3417
+2684 3429
+2719 3440
+2753 3452
+2788 3463
+2822 3475
+2857 3488
+2892 3500
+2926 3512
+2961 3525
+2995 3538
+3030 3551
+3064 3564
+3099 3577
+3133 3591
+3168 3604
+3203 3618
+3237 3632
+3272 3647
+3306 3661
+3341 3675
+3375 3690
+3410 3705
+3444 3720
+3479 3735
+3514 3751
+3548 3766
+3583 3782
+3617 3798
+3652 3814
+3686 3831
+3721 3847
+3756 3864
+3790 3880
+3825 3897
+3859 3915
+3894 3932
+3928 3949
+3963 3967
+3997 3985
+4032 4003
+4067 4021
+4101 4039
+4136 4058
+4170 4077
+4205 4096
+4239 4115
+4274 4134
+4308 4153
+4343 4173
+4378 4193
+4412 4212
+4447 4233
+4481 4253
+4516 4273
+4550 4294
+4585 4315
+4620 4336
+4654 4357
+4689 4378
+4723 4399
+4758 4421
+4792 4443
+4827 4465
+4861 4487
+4896 4509
+4931 4532
+4965 4555
+5000 4578
+5034 4601
+5069 4624
+5103 4647
+5138 4671
+5172 4694
+5207 4718
+5242 4742
+5276 4767
+5311 4791
+5345 4816
+5380 4840
+5414 4865
+5449 4890
+5484 4916
+5518 4941
+5553 4967
+5587 4993
+5622 5019
+5656 5045
+5691 5071
+5725 5098
+5760 5124
+5795 5151
+5829 5178
+5864 5205
+5898 5233
+5933 5260
+5967 5288
+6002 5316
+6036 5344
+6071 5372
+6106 5401
+6140 5429
+6175 5458
+6209 5487
+6244 5516
+6278 5545
+6313 5575
+6348 5604
+6382 5634
+6417 5664
+6451 5694
+6486 5724
+6520 5755
+6555 5785
+6589 5816
+6624 5847
+6659 5878
+6693 5910
+6728 5941
+6762 5973
+6797 6005
+6831 6037
+6866 6069
+6900 6102
+6935 6134
+6970 6167
+7004 6200
+7039 6233
+7073 6266
+7108 6299
+7142 6333
+7177 6367
+7212 6401
+7246 6435
+7281 6469
+7315 6504
+7350 6538
+7384 6573
+7419 6608
+7453 6643
+7488 6679
+7523 6714
+7557 6750
+7592 6786
+7626 6822
+7661 6858
+7695 6894
+7730 6931
+7764 6967
+7799 7004
+7834 7041
+7868 7079
+7903 7116
+7937 7154
+7972 7191
+8006 7229
+8041 7267
+8076 7306
+8110 7344
+8145 7383
+8179 7422
+8214 7460
+8248 7500
+8283 7539
+8317 7578
+8352 7618
+8387 7658
+8421 7698
+8456 7738
+8490 7778
+8525 7819
+8559 7860
+8594 7901
+8628 7942
+8663 7983
+8698 8024
+8732 8066
+8767 8107
+8801 8149
+8836 8191
+8870 8234
+8905 8276
+8940 8319
+8974 8362
+9009 8404
+9043 8448
+9078 8491
+9112 8534
+9147 8578
+9181 8622
+200 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/fitting.texi b/gsl-1.9/doc/fitting.texi
new file mode 100644
index 0000000..f407e3b
--- /dev/null
+++ b/gsl-1.9/doc/fitting.texi
@@ -0,0 +1,501 @@
+@cindex fitting
+@cindex least squares fit
+@cindex regression, least squares
+@cindex weighted linear fits
+@cindex unweighted linear fits
+This chapter describes routines for performing least squares fits to
+experimental data using linear combinations of functions. The data
+may be weighted or unweighted, i.e. with known or unknown errors. For
+weighted data the functions compute the best fit parameters and their
+associated covariance matrix. For unweighted data the covariance
+matrix is estimated from the scatter of the points, giving a
+variance-covariance matrix.
+
+The functions are divided into separate versions for simple one- or
+two-parameter regression and multiple-parameter fits. The functions
+are declared in the header file @file{gsl_fit.h}.
+
+@menu
+* Fitting Overview::
+* Linear regression::
+* Linear fitting without a constant term::
+* Multi-parameter fitting::
+* Fitting Examples::
+* Fitting References and Further Reading::
+@end menu
+
+@node Fitting Overview
+@section Overview
+
+Least-squares fits are found by minimizing @math{\chi^2}
+(chi-squared), the weighted sum of squared residuals over @math{n}
+experimental datapoints @math{(x_i, y_i)} for the model @math{Y(c,x)},
+@tex
+\beforedisplay
+$$
+\chi^2 = \sum_i w_i (y_i - Y(c, x_i))^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\chi^2 = \sum_i w_i (y_i - Y(c, x_i))^2
+@end example
+
+@end ifinfo
+@noindent
+The @math{p} parameters of the model are @c{$c = \{c_0, c_1, \dots\}$}
+@math{c = @{c_0, c_1, @dots{}@}}. The
+weight factors @math{w_i} are given by @math{w_i = 1/\sigma_i^2},
+where @math{\sigma_i} is the experimental error on the data-point
+@math{y_i}. The errors are assumed to be
+gaussian and uncorrelated.
+For unweighted data the chi-squared sum is computed without any weight factors.
+
+The fitting routines return the best-fit parameters @math{c} and their
+@math{p \times p} covariance matrix. The covariance matrix measures the
+statistical errors on the best-fit parameters resulting from the
+errors on the data, @math{\sigma_i}, and is defined
+@cindex covariance matrix, linear fits
+as @c{$C_{ab} = \langle \delta c_a \delta c_b \rangle$}
+@math{C_@{ab@} = <\delta c_a \delta c_b>} where @c{$\langle \, \rangle$}
+@math{< >} denotes an average over the gaussian error distributions of the underlying datapoints.
+
+The covariance matrix is calculated by error propagation from the data
+errors @math{\sigma_i}. The change in a fitted parameter @math{\delta
+c_a} caused by a small change in the data @math{\delta y_i} is given
+by
+@tex
+\beforedisplay
+$$
+\delta c_a = \sum_i {\partial c_a \over \partial y_i} \delta y_i
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\delta c_a = \sum_i (dc_a/dy_i) \delta y_i
+@end example
+
+@end ifinfo
+@noindent
+allowing the covariance matrix to be written in terms of the errors on the data,
+@tex
+\beforedisplay
+$$
+C_{ab} = \sum_{i,j} {\partial c_a \over \partial y_i}
+ {\partial c_b \over \partial y_j}
+ \langle \delta y_i \delta y_j \rangle
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+C_@{ab@} = \sum_@{i,j@} (dc_a/dy_i) (dc_b/dy_j) <\delta y_i \delta y_j>
+@end example
+
+@end ifinfo
+@noindent
+For uncorrelated data the fluctuations of the underlying datapoints satisfy
+@c{$\langle \delta y_i \delta y_j \rangle = \sigma_i^2 \delta_{ij}$}
+@math{<\delta y_i \delta y_j> = \sigma_i^2 \delta_@{ij@}}, giving a
+corresponding parameter covariance matrix of
+@tex
+\beforedisplay
+$$
+C_{ab} = \sum_{i} {1 \over w_i} {\partial c_a \over \partial y_i} {\partial c_b \over \partial y_i}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+C_@{ab@} = \sum_i (1/w_i) (dc_a/dy_i) (dc_b/dy_i)
+@end example
+
+@end ifinfo
+@noindent
+When computing the covariance matrix for unweighted data, i.e. data with unknown errors,
+the weight factors @math{w_i} in this sum are replaced by the single estimate @math{w =
+1/\sigma^2}, where @math{\sigma^2} is the computed variance of the
+residuals about the best-fit model, @math{\sigma^2 = \sum (y_i - Y(c,x_i))^2 / (n-p)}.
+This is referred to as the @dfn{variance-covariance matrix}.
+@cindex variance-covariance matrix, linear fits
+
+The standard deviations of the best-fit parameters are given by the
+square root of the corresponding diagonal elements of
+the covariance matrix, @c{$\sigma_{c_a} = \sqrt{C_{aa}}$}
+@math{\sigma_@{c_a@} = \sqrt@{C_@{aa@}@}}.
+
+@node Linear regression
+@section Linear regression
+@cindex linear regression
+The functions described in this section can be used to perform
+least-squares fits to a straight line model, @math{Y(c,x) = c_0 + c_1 x}.
+
+@cindex covariance matrix, from linear regression
+@deftypefun int gsl_fit_linear (const double * @var{x}, const size_t @var{xstride}, const double * @var{y}, const size_t @var{ystride}, size_t @var{n}, double * @var{c0}, double * @var{c1}, double * @var{cov00}, double * @var{cov01}, double * @var{cov11}, double * @var{sumsq})
+This function computes the best-fit linear regression coefficients
+(@var{c0},@var{c1}) of the model @math{Y = c_0 + c_1 X} for the dataset
+(@var{x}, @var{y}), two vectors of length @var{n} with strides
+@var{xstride} and @var{ystride}. The errors on @var{y} are assumed unknown so
+the variance-covariance matrix for the
+parameters (@var{c0}, @var{c1}) is estimated from the scatter of the
+points around the best-fit line and returned via the parameters
+(@var{cov00}, @var{cov01}, @var{cov11}).
+The sum of squares of the residuals from the best-fit line is returned
+in @var{sumsq}.
+@end deftypefun
+
+@deftypefun int gsl_fit_wlinear (const double * @var{x}, const size_t @var{xstride}, const double * @var{w}, const size_t @var{wstride}, const double * @var{y}, const size_t @var{ystride}, size_t @var{n}, double * @var{c0}, double * @var{c1}, double * @var{cov00}, double * @var{cov01}, double * @var{cov11}, double * @var{chisq})
+This function computes the best-fit linear regression coefficients
+(@var{c0},@var{c1}) of the model @math{Y = c_0 + c_1 X} for the weighted
+dataset (@var{x}, @var{y}), two vectors of length @var{n} with strides
+@var{xstride} and @var{ystride}. The vector @var{w}, of length @var{n}
+and stride @var{wstride}, specifies the weight of each datapoint. The
+weight is the reciprocal of the variance for each datapoint in @var{y}.
+
+The covariance matrix for the parameters (@var{c0}, @var{c1}) is
+computed using the weights and returned via the parameters
+(@var{cov00}, @var{cov01}, @var{cov11}). The weighted sum of squares
+of the residuals from the best-fit line, @math{\chi^2}, is returned in
+@var{chisq}.
+@end deftypefun
+
+@deftypefun int gsl_fit_linear_est (double @var{x}, double @var{c0}, double @var{c1}, double @var{c00}, double @var{c01}, double @var{c11}, double * @var{y}, double * @var{y_err})
+This function uses the best-fit linear regression coefficients
+@var{c0},@var{c1} and their covariance
+@var{cov00},@var{cov01},@var{cov11} to compute the fitted function
+@var{y} and its standard deviation @var{y_err} for the model @math{Y =
+c_0 + c_1 X} at the point @var{x}.
+@end deftypefun
+
+@node Linear fitting without a constant term
+@section Linear fitting without a constant term
+
+The functions described in this section can be used to perform
+least-squares fits to a straight line model without a constant term,
+@math{Y = c_1 X}.
+
+@deftypefun int gsl_fit_mul (const double * @var{x}, const size_t @var{xstride}, const double * @var{y}, const size_t @var{ystride}, size_t @var{n}, double * @var{c1}, double * @var{cov11}, double * @var{sumsq})
+This function computes the best-fit linear regression coefficient
+@var{c1} of the model @math{Y = c_1 X} for the datasets (@var{x},
+@var{y}), two vectors of length @var{n} with strides @var{xstride} and
+@var{ystride}. The errors on @var{y} are assumed unknown so the
+variance of the parameter @var{c1} is estimated from
+the scatter of the points around the best-fit line and returned via the
+parameter @var{cov11}. The sum of squares of the residuals from the
+best-fit line is returned in @var{sumsq}.
+@end deftypefun
+
+@deftypefun int gsl_fit_wmul (const double * @var{x}, const size_t @var{xstride}, const double * @var{w}, const size_t @var{wstride}, const double * @var{y}, const size_t @var{ystride}, size_t @var{n}, double * @var{c1}, double * @var{cov11}, double * @var{sumsq})
+This function computes the best-fit linear regression coefficient
+@var{c1} of the model @math{Y = c_1 X} for the weighted datasets
+(@var{x}, @var{y}), two vectors of length @var{n} with strides
+@var{xstride} and @var{ystride}. The vector @var{w}, of length @var{n}
+and stride @var{wstride}, specifies the weight of each datapoint. The
+weight is the reciprocal of the variance for each datapoint in @var{y}.
+
+The variance of the parameter @var{c1} is computed using the weights
+and returned via the parameter @var{cov11}. The weighted sum of
+squares of the residuals from the best-fit line, @math{\chi^2}, is
+returned in @var{chisq}.
+@end deftypefun
+
+@deftypefun int gsl_fit_mul_est (double @var{x}, double @var{c1}, double @var{c11}, double * @var{y}, double * @var{y_err})
+This function uses the best-fit linear regression coefficient @var{c1}
+and its covariance @var{cov11} to compute the fitted function
+@var{y} and its standard deviation @var{y_err} for the model @math{Y =
+c_1 X} at the point @var{x}.
+@end deftypefun
+
+@node Multi-parameter fitting
+@section Multi-parameter fitting
+@cindex multi-parameter regression
+@cindex fits, multi-parameter linear
+The functions described in this section perform least-squares fits to a
+general linear model, @math{y = X c} where @math{y} is a vector of
+@math{n} observations, @math{X} is an @math{n} by @math{p} matrix of
+predictor variables, and the elements of the vector @math{c} are the @math{p} unknown best-fit parameters which are to be estimated. The chi-squared value is given by @c{$\chi^2 = \sum_i w_i (y_i - \sum_j X_{ij} c_j)^2$}
+@math{\chi^2 = \sum_i w_i (y_i - \sum_j X_@{ij@} c_j)^2}.
+
+This formulation can be used for fits to any number of functions and/or
+variables by preparing the @math{n}-by-@math{p} matrix @math{X}
+appropriately. For example, to fit to a @math{p}-th order polynomial in
+@var{x}, use the following matrix,
+@tex
+\beforedisplay
+$$
+X_{ij} = x_i^j
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X_@{ij@} = x_i^j
+@end example
+
+@end ifinfo
+@noindent
+where the index @math{i} runs over the observations and the index
+@math{j} runs from 0 to @math{p-1}.
+
+To fit to a set of @math{p} sinusoidal functions with fixed frequencies
+@math{\omega_1}, @math{\omega_2}, @dots{}, @math{\omega_p}, use,
+@tex
+\beforedisplay
+$$
+X_{ij} = \sin(\omega_j x_i)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X_@{ij@} = sin(\omega_j x_i)
+@end example
+
+@end ifinfo
+@noindent
+To fit to @math{p} independent variables @math{x_1}, @math{x_2}, @dots{},
+@math{x_p}, use,
+@tex
+\beforedisplay
+$$
+X_{ij} = x_j(i)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X_@{ij@} = x_j(i)
+@end example
+
+@end ifinfo
+@noindent
+where @math{x_j(i)} is the @math{i}-th value of the predictor variable
+@math{x_j}.
+
+The functions described in this section are declared in the header file
+@file{gsl_multifit.h}.
+
+The solution of the general linear least-squares system requires an
+additional working space for intermediate results, such as the singular
+value decomposition of the matrix @math{X}.
+
+@deftypefun {gsl_multifit_linear_workspace *} gsl_multifit_linear_alloc (size_t @var{n}, size_t @var{p})
+This function allocates a workspace for fitting a model to @var{n}
+observations using @var{p} parameters.
+@end deftypefun
+
+@deftypefun void gsl_multifit_linear_free (gsl_multifit_linear_workspace * @var{work})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_multifit_linear (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work})
+@deftypefunx int gsl_multifit_linear_svd (const gsl_matrix * @var{X}, const gsl_vector * @var{y}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work})
+These functions compute the best-fit parameters @var{c} of the model
+@math{y = X c} for the observations @var{y} and the matrix of predictor
+variables @var{X}. The variance-covariance matrix of the model
+parameters @var{cov} is estimated from the scatter of the observations
+about the best-fit. The sum of squares of the residuals from the
+best-fit, @math{\chi^2}, is returned in @var{chisq}.
+
+The best-fit is found by singular value decomposition of the matrix
+@var{X} using the preallocated workspace provided in @var{work}. The
+modified Golub-Reinsch SVD algorithm is used, with column scaling to
+improve the accuracy of the singular values. Any components which have
+zero singular value (to machine precision) are discarded from the fit.
+In the second form of the function the components are discarded if the
+ratio of singular values @math{s_i/s_0} falls below the user-specified
+tolerance @var{tol}, and the effective rank is returned in @var{rank}.
+@end deftypefun
+
+@deftypefun int gsl_multifit_wlinear (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work})
+@deftypefunx int gsl_multifit_wlinear_svd (const gsl_matrix * @var{X}, const gsl_vector * @var{w}, const gsl_vector * @var{y}, double @var{tol}, size_t * @var{rank}, gsl_vector * @var{c}, gsl_matrix * @var{cov}, double * @var{chisq}, gsl_multifit_linear_workspace * @var{work})
+
+This function computes the best-fit parameters @var{c} of the weighted
+model @math{y = X c} for the observations @var{y} with weights @var{w}
+and the matrix of predictor variables @var{X}. The covariance matrix of
+the model parameters @var{cov} is computed with the given weights. The
+weighted sum of squares of the residuals from the best-fit,
+@math{\chi^2}, is returned in @var{chisq}.
+
+The best-fit is found by singular value decomposition of the matrix
+@var{X} using the preallocated workspace provided in @var{work}. Any
+components which have zero singular value (to machine precision) are
+discarded from the fit. In the second form of the function the
+components are discarded if the ratio of singular values @math{s_i/s_0}
+falls below the user-specified tolerance @var{tol}, and the effective
+rank is returned in @var{rank}.
+@end deftypefun
+
+@deftypefun int gsl_multifit_linear_est (const gsl_vector * @var{x}, const gsl_vector * @var{c}, const gsl_matrix * @var{cov}, double * @var{y}, double * @var{y_err})
+This function uses the best-fit multilinear regression coefficients
+@var{c} and their covariance matrix
+@var{cov} to compute the fitted function value
+@var{y} and its standard deviation @var{y_err} for the model @math{y = x.c}
+at the point @var{x}.
+@end deftypefun
+
+@node Fitting Examples
+@section Examples
+
+The following program computes a least squares straight-line fit to a
+simple dataset, and outputs the best-fit line and its
+associated one standard-deviation error bars.
+
+@example
+@verbatiminclude examples/fitting.c
+@end example
+
+@noindent
+The following commands extract the data from the output of the program
+and display it using the @sc{gnu} plotutils @code{graph} utility,
+
+@example
+$ ./demo > tmp
+$ more tmp
+# best fit: Y = -106.6 + 0.06 X
+# covariance matrix:
+# [ 39602, -19.9
+# -19.9, 0.01]
+# chisq = 0.8
+
+$ for n in data fit hi lo ;
+ do
+ grep "^$n" tmp | cut -d: -f2 > $n ;
+ done
+$ graph -T X -X x -Y y -y 0 20 -m 0 -S 2 -Ie data
+ -S 0 -I a -m 1 fit -m 2 hi -m 2 lo
+@end example
+
+@iftex
+@sp 1
+@center @image{fit-wlinear,3.0in}
+@end iftex
+
+The next program performs a quadratic fit @math{y = c_0 + c_1 x + c_2
+x^2} to a weighted dataset using the generalised linear fitting function
+@code{gsl_multifit_wlinear}. The model matrix @math{X} for a quadratic
+fit is given by,
+@tex
+\beforedisplay
+$$
+X=\pmatrix{1&x_0&x_0^2\cr
+1&x_1&x_1^2\cr
+1&x_2&x_2^2\cr
+\dots&\dots&\dots\cr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X = [ 1 , x_0 , x_0^2 ;
+ 1 , x_1 , x_1^2 ;
+ 1 , x_2 , x_2^2 ;
+ ... , ... , ... ]
+@end example
+
+@end ifinfo
+@noindent
+where the column of ones corresponds to the constant term @math{c_0}.
+The two remaining columns corresponds to the terms @math{c_1 x} and
+@math{c_2 x^2}.
+
+The program reads @var{n} lines of data in the format (@var{x}, @var{y},
+@var{err}) where @var{err} is the error (standard deviation) in the
+value @var{y}.
+
+@example
+@verbatiminclude examples/fitting2.c
+@end example
+
+@noindent
+A suitable set of data for fitting can be generated using the following
+program. It outputs a set of points with gaussian errors from the curve
+@math{y = e^x} in the region @math{0 < x < 2}.
+
+@example
+@verbatiminclude examples/fitting3.c
+@end example
+
+@noindent
+The data can be prepared by running the resulting executable program,
+
+@example
+$ ./generate > exp.dat
+$ more exp.dat
+0.1 0.97935 0.110517
+0.2 1.3359 0.12214
+0.3 1.52573 0.134986
+0.4 1.60318 0.149182
+0.5 1.81731 0.164872
+0.6 1.92475 0.182212
+....
+@end example
+
+@noindent
+To fit the data use the previous program, with the number of data points
+given as the first argument. In this case there are 19 data points.
+
+@example
+$ ./fit 19 < exp.dat
+0.1 0.97935 +/- 0.110517
+0.2 1.3359 +/- 0.12214
+...
+# best fit: Y = 1.02318 + 0.956201 X + 0.876796 X^2
+# covariance matrix:
+[ +1.25612e-02, -3.64387e-02, +1.94389e-02
+ -3.64387e-02, +1.42339e-01, -8.48761e-02
+ +1.94389e-02, -8.48761e-02, +5.60243e-02 ]
+# chisq = 23.0987
+@end example
+
+@noindent
+The parameters of the quadratic fit match the coefficients of the
+expansion of @math{e^x}, taking into account the errors on the
+parameters and the @math{O(x^3)} difference between the exponential and
+quadratic functions for the larger values of @math{x}. The errors on
+the parameters are given by the square-root of the corresponding
+diagonal elements of the covariance matrix. The chi-squared per degree
+of freedom is 1.4, indicating a reasonable fit to the data.
+
+@iftex
+@sp 1
+@center @image{fit-wlinear2,3.0in}
+@end iftex
+
+@node Fitting References and Further Reading
+@section References and Further Reading
+
+A summary of formulas and techniques for least squares fitting can be
+found in the ``Statistics'' chapter of the Annual Review of Particle
+Physics prepared by the Particle Data Group,
+
+@itemize @asis
+@item
+@cite{Review of Particle Properties},
+R.M. Barnett et al., Physical Review D54, 1 (1996)
+@uref{http://pdg.lbl.gov/}
+@end itemize
+
+@noindent
+The Review of Particle Physics is available online at the website given
+above.
+
+@cindex NIST Statistical Reference Datasets
+@cindex Statistical Reference Datasets (StRD)
+The tests used to prepare these routines are based on the NIST
+Statistical Reference Datasets. The datasets and their documentation are
+available from NIST at the following website,
+
+@center @uref{http://www.nist.gov/itl/div898/strd/index.html}.
+
+
diff --git a/gsl-1.9/doc/freemanuals.texi b/gsl-1.9/doc/freemanuals.texi
new file mode 100644
index 0000000..0223f8c
--- /dev/null
+++ b/gsl-1.9/doc/freemanuals.texi
@@ -0,0 +1,99 @@
+@cindex free documentation
+
+@quotation
+@i{The following article was written by Richard Stallman, founder of the
+GNU Project.}
+@end quotation
+
+
+The biggest deficiency in the free software community today is not in
+the software---it is the lack of good free documentation that we can
+include with the free software. Many of our most important
+programs do not come with free reference manuals and free introductory
+texts. Documentation is an essential part of any software package;
+when an important free software package does not come with a free
+manual and a free tutorial, that is a major gap. We have many such
+gaps today.
+
+Consider Perl, for instance. The tutorial manuals that people
+normally use are non-free. How did this come about? Because the
+authors of those manuals published them with restrictive terms---no
+copying, no modification, source files not available---which exclude
+them from the free software world.
+
+That wasn't the first time this sort of thing happened, and it was far
+from the last. Many times we have heard a GNU user eagerly describe a
+manual that he is writing, his intended contribution to the community,
+only to learn that he had ruined everything by signing a publication
+contract to make it non-free.
+
+Free documentation, like free software, is a matter of freedom, not
+price. The problem with the non-free manual is not that publishers
+charge a price for printed copies---that in itself is fine. (The Free
+Software Foundation sells printed copies of manuals, too.) The
+problem is the restrictions on the use of the manual. Free manuals
+are available in source code form, and give you permission to copy and
+modify. Non-free manuals do not allow this.
+
+The criteria of freedom for a free manual are roughly the same as for
+free software. Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too---so they can
+provide accurate and clear documentation for the modified program. A
+manual that leaves you no choice but to write a new manual to document
+a changed version of the program is not really available to our
+community.
+
+Some kinds of limits on the way modification is handled are
+acceptable. For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok. It is also no problem to require modified versions
+to include notice that they were modified. Even entire sections that
+may not be deleted or changed are acceptable, as long as they deal
+with nontechnical topics (like this one). These kinds of restrictions
+are acceptable because they don't obstruct the community's normal use
+of the manual.
+
+However, it must be possible to modify all the @emph{technical}
+content of the manual, and then distribute the result in all the usual
+media, through all the usual channels. Otherwise, the restrictions
+obstruct the use of the manual, it is not free, and we need another
+manual to replace it.
+
+Please spread the word about this issue. Our community continues to
+lose manuals to proprietary publishing. If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+If you are writing documentation, please insist on publishing it under
+the GNU Free Documentation License or another free documentation
+license. Remember that this decision requires your approval---you
+don't have to let the publisher decide. Some commercial publishers
+will use a free license if you insist, but they will not propose the
+option; it is up to you to raise the issue and say firmly that this is
+what you want. If the publisher you are dealing with refuses, please
+try other publishers. If you're not sure whether a proposed license
+is free, write to @email{licensing@@gnu.org}.
+
+You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying
+copies from the publishers that paid for their writing or for major
+improvements. Meanwhile, try to avoid buying non-free documentation
+at all. Check the distribution terms of a manual before you buy it,
+and insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try reward the publishers that have
+paid or pay the authors to work on it.
+
+The Free Software Foundation maintains a list of free documentation
+published by other publishers:
+
+@itemize @asis
+@item
+@uref{http://www.fsf.org/doc/other-free-books.html}
+@end itemize
diff --git a/gsl-1.9/doc/gpl.texi b/gsl-1.9/doc/gpl.texi
new file mode 100644
index 0000000..28f738f
--- /dev/null
+++ b/gsl-1.9/doc/gpl.texi
@@ -0,0 +1,407 @@
+@center Version 2, June 1991
+@iftex
+@smallerfonts @rm
+@end iftex
+
+@c This file is intended to be included in another file.
+
+@display
+Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
+59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+@end display
+
+@heading Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software---to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+@iftex
+@heading TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end iftex
+@ifinfo
+@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+@end ifinfo
+
+@enumerate 0
+@item
+This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The ``Program'', below,
+refers to any such program or work, and a ``work based on the Program''
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term ``modification''.) Each licensee is addressed as ``you''.
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+@item
+You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+@item
+You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+@enumerate a
+@item
+You must cause the modified files to carry prominent notices
+stating that you changed the files and the date of any change.
+
+@item
+You must cause any work that you distribute or publish, that in
+whole or in part contains or is derived from the Program or any
+part thereof, to be licensed as a whole at no charge to all third
+parties under the terms of this License.
+
+@item
+If the modified program normally reads commands interactively
+when run, you must cause it, when started running for such
+interactive use in the most ordinary way, to print or display an
+announcement including an appropriate copyright notice and a
+notice that there is no warranty (or else, saying that you provide
+a warranty) and that users may redistribute the program under
+these conditions, and telling the user how to view a copy of this
+License. (Exception: if the Program itself is interactive but
+does not normally print such an announcement, your work based on
+the Program is not required to print an announcement.)
+@end enumerate
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+@item
+You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+@enumerate a
+@item
+Accompany it with the complete corresponding machine-readable
+source code, which must be distributed under the terms of Sections
+1 and 2 above on a medium customarily used for software interchange; or,
+
+@item
+Accompany it with a written offer, valid for at least three
+years, to give any third party, for a charge no more than your
+cost of physically performing source distribution, a complete
+machine-readable copy of the corresponding source code, to be
+distributed under the terms of Sections 1 and 2 above on a medium
+customarily used for software interchange; or,
+
+@item
+Accompany it with the information you received as to the offer
+to distribute corresponding source code. (This alternative is
+allowed only for noncommercial distribution and only if you
+received the program in object code or executable form with such
+an offer, in accord with Subsection b above.)
+@end enumerate
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+@item
+You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+@item
+You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+@item
+Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+@item
+If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+@item
+If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+@item
+The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and ``any
+later version'', you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+@item
+If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+@iftex
+@heading NO WARRANTY
+@end iftex
+@ifinfo
+@center NO WARRANTY
+@end ifinfo
+
+@item
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+@item
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+@end enumerate
+
+@iftex
+@heading END OF TERMS AND CONDITIONS
+@end iftex
+@ifinfo
+@center END OF TERMS AND CONDITIONS
+@end ifinfo
+
+@page
+@heading Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the ``copyright'' line and a pointer to where the full notice is found.
+
+@smallexample
+@var{one line to give the program's name and a brief idea @*of what it does.}
+Copyright (C) @var{yyyy} @var{name of author}
+
+This program is free software; you can redistribute it
+and/or modify it under the terms of the GNU General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be
+useful, but WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the GNU General Public License for more
+details.
+
+You should have received a copy of the GNU General Public
+License along with this program; if not, write to the Free
+Software Foundation, Inc., 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.
+@end smallexample
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+@smallexample
+Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'. This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c'
+for details.
+@end smallexample
+
+The hypothetical commands @samp{show w} and @samp{show c} should show
+the appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than @samp{show w} and
+@samp{show c}; they could even be mouse-clicks or menu items---whatever
+suits your program.
+
+@need 1500
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a ``copyright disclaimer'' for the program, if
+necessary. Here is a sample; alter the names:
+
+@smallexample
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the program `Gnomovision' (which makes passes at compilers)
+written by James Hacker.
+
+@var{signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+@end smallexample
+
+@iftex
+@smallerfonts @rm
+@end iftex
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+@iftex
+@*
+@textfonts @rm
+@end iftex
diff --git a/gsl-1.9/doc/gsl-config.1 b/gsl-1.9/doc/gsl-config.1
new file mode 100644
index 0000000..e8c1ebc
--- /dev/null
+++ b/gsl-1.9/doc/gsl-config.1
@@ -0,0 +1,42 @@
+.TH GSL 1 "22 May 2001"
+.SH NAME
+gsl-config - script to get version number and compiler flags of the installed GSL library
+.SH SYNOPSIS
+.B gsl-config
+[\-\-prefix] [\-\-version] [\-\-libs] [\-\-libs\-without\-cblas] [\-\-cflags]
+.SH DESCRIPTION
+.PP
+\fIgsl-config\fP is a tool that is used to configure to determine
+the compiler and linker flags that should be used to compile
+and link programs that use \fIGSL\fP. It is also used internally
+to the .m4 macros for GNU autoconf that are included with \fIGSL\fP.
+.
+.SH OPTIONS
+.l
+\fIgsl-config\fP accepts the following options:
+.TP 8
+.B \-\-version
+Print the currently installed version of \fIGSL\fP on the standard output.
+.TP 8
+.B \-\-libs
+Print the linker flags that are necessary to link a \fIGSL\fP program, with cblas
+.TP 8
+.B \-\-libs\-without\-cblas
+Print the linker flags that are necessary to link a \fIGSL\fP program, without cblas
+.TP 8
+.B \-\-cflags
+Print the compiler flags that are necessary to compile a \fIGSL\fP program.
+.TP 8
+.B \-\-prefix
+Show the GSL installation prefix.
+.SH SEE ALSO
+.BR gtk-config (1),
+.BR gnome-config (1)
+.SH COPYRIGHT
+Copyright \(co 2001 Christopher R. Gabriel
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation.
diff --git a/gsl-1.9/doc/gsl-design.texi b/gsl-1.9/doc/gsl-design.texi
new file mode 100644
index 0000000..7e513ef
--- /dev/null
+++ b/gsl-1.9/doc/gsl-design.texi
@@ -0,0 +1,1610 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename gsl-design.info
+@settitle GNU Scientific Library
+@finalout
+@c -@setchapternewpage odd
+@c %**end of header
+
+@dircategory Scientific software
+@direntry
+* GSL-design: (GSL-design). GNU Scientific Library -- Design
+@end direntry
+
+@comment @include version-design.texi
+@set GSL @i{GNU Scientific Library}
+
+@ifinfo
+This file documents the @value{GSL}.
+
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2004 The GSL Project.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
+copy of the license is included in the section entitled ``GNU Free
+Documentation License''.
+@end ifinfo
+
+@titlepage
+@title GNU Scientific Library -- Design document
+@comment @subtitle Edition @value{EDITION}, for gsl Version @value{VERSION}
+@comment @subtitle @value{UPDATED}
+@author Mark Galassi
+Los Alamos National Laboratory
+
+@author James Theiler
+Astrophysics and Radiation Measurements Group, Los Alamos National Laboratory
+
+@author Brian Gough
+Network Theory Limited
+
+@page
+@vskip 0pt plus 1filll
+Copyright @copyright{} 1996,1997,1998,1999,2000,2001,2004 The GSL Project.
+
+Permission is granted to make and distribute verbatim copies of
+this manual provided the copyright notice and this permission notice
+are preserved on all copies.
+
+Permission is granted to copy and distribute modified versions of this
+manual under the conditions for verbatim copying, provided that the entire
+resulting derived work is distributed under the terms of a permission
+notice identical to this one.
+
+Permission is granted to copy and distribute translations of this manual
+into another language, under the above conditions for modified versions,
+except that this permission notice may be stated in a translation approved
+by the Foundation.
+@end titlepage
+
+@contents
+
+@node Top, Motivation, (dir), (dir)
+@top About GSL
+
+@ifinfo
+This file documents the design of @value{GSL}, a collection of numerical
+routines for scientific computing.
+
+More information about GSL can be found at the project homepage,
+@uref{http://www.gnu.org/software/gsl/}.
+@end ifinfo
+
+The @value{GSL} is a library of scientific subroutines. It aims to
+provide a convenient interface to routines that do standard (and not so
+standard) tasks that arise in scientific research. More than that, it
+also provides the source code. Users are welcome to alter, adjust,
+modify, and improve the interfaces and/or implementations of whichever
+routines might be needed for a particular purpose.
+
+GSL is intended to provide a free equivalent to existing proprietary
+numerical libraries written in C or Fortran, such as NAG, IMSL's CNL,
+IBM's ESSL, and SGI's SCSL.
+
+The target platform is a low-end desktop workstation. The goal is to
+provide something which is generally useful, and the library is aimed at
+general users rather than specialists.
+
+@menu
+* Motivation::
+* Contributing::
+* Design::
+* Bibliography::
+* Copying::
+* GNU Free Documentation License::
+@end menu
+
+@node Motivation, Contributing, Top, Top
+@chapter Motivation
+@cindex numerical analysis
+@cindex free software
+
+There is a need for scientists and engineers to have a numerical library
+that:
+@itemize @bullet
+@item
+is free (in the sense of freedom, not in the sense of gratis; see the
+GNU General Public License), so that people can use that library,
+redistribute it, modify it @dots{}
+@item
+is written in C using modern coding conventions, calling conventions,
+scoping @dots{}
+@item
+is clearly and pedagogically documented; preferably with TeXinfo, so as
+to allow online info, WWW and TeX output.
+@item
+uses top quality state-of-the-art algorithms.
+@item
+is portable and configurable using @emph{autoconf} and @emph{automake}.
+@item
+basically, is GNUlitically correct.
+@end itemize
+
+There are strengths and weaknesses with existing libraries:
+
+@emph{Netlib} (http://www.netlib.org/) is probably the most advanced set
+of numerical algorithms available on the net, maintained by AT&T.
+Unfortunately most of the software is written in Fortran, with strange
+calling conventions in many places. It is also not very well collected,
+so it is a lot of work to get started with netlib.
+
+@emph{GAMS} (http://gams.nist.gov/) is an extremely well organized set
+of pointers to scientific software, but like netlib, the individual
+routines vary in their quality and their level of documentation.
+
+@emph{Numerical Recipes} (http://www.nr.com,
+http://cfata2.harvard.edu/nr/) is an excellent book: it explains the
+algorithms in a very clear way. Unfortunately the authors released the
+source code under a license which allows you to use it, but prevents you
+from re-distributing it. Thus Numerical Recipes is not @emph{free} in
+the sense of @emph{freedom}. On top of that, the implementation suffers
+from @emph{fortranitis} and other
+limitations. [http://www.lysator.liu.se/c/num-recipes-in-c.html]
+
+@emph{SLATEC} is a large public domain collection of numerical routines
+in Fortran written under a Department of Energy program in the
+1970's. The routines are well tested and have a reasonable overall
+design (given the limitations of that era). GSL should aim to be a
+modern version of SLATEC.
+
+@emph{NSWC} is the Naval Surface Warfare Center numerical library. It
+is a large public-domain Fortran library, containing a lot of
+high-quality code. Documentation for the library is hard to find, only
+a few photocopies of the printed manual are still in circulation.
+
+@emph{NAG} and @emph{IMSL} both sell high-quality libraries which are
+proprietary. The NAG library is more advanced and has wider scope than
+IMSL. The IMSL library leans more towards ease-of-use and makes
+extensive use of variable length argument lists to emulate "default
+arguments".
+
+@emph{ESSL} and @emph{SCSL} are proprietary libraries from IBM and SGI.
+
+@emph{Forth Scientific Library} [see the URL
+http://www.taygeta.com/fsl/sciforth.html]. Mainly of interest to Forth
+users.
+
+@emph{Numerical Algorithms with C} G. Engeln-Mullges, F. Uhlig. A nice
+numerical library written in ANSI C with an accompanying
+textbook. Source code is available but the library is not free software.
+
+@emph{NUMAL} A C version of the NUMAL library has been written by
+H.T. Lau and is published as a book and disk with the title "A Numerical
+Library in C for Scientists and Engineers". Source code is available but
+the library is not free software.
+
+@emph{C Mathematical Function Handbook} by Louis Baker. A library of
+function approximations and methods corresponding to those in the
+"Handbook of Mathematical Functions" by Abramowitz and Stegun. Source
+code is available but the library is not free software.
+
+@emph{CCMATH} by Daniel A. Atkinson. A C numerical library covering
+similar areas to GSL. The code is quite terse. Earlier versions were
+under the GPL but unfortunately it has changed to the LGPL in recent
+versions.
+
+@emph{CEPHES} A useful collection of high-quality special functions
+written in C. Not GPL'ed.
+
+@emph{WNLIB} A small collection of numerical routines written in C by
+Will Naylor. Public domain.
+
+@emph{MESHACH} A comprehensive matrix-vector linear algebra library
+written in C. Freely available but not GPL'ed (non-commercial license).
+
+@emph{CERNLIB} is a large high-quality Fortran library developed at CERN
+over many years. It was originally non-free software but has recently
+been released under the GPL.
+
+@emph{COLT} is a free numerical library in Java developed at CERN by
+Wolfgang Hoschek. It is under a BSD-style license.
+
+The long-term goal will be to provide a framework to which the real
+numerical experts (or their graduate students) will contribute.
+
+@node Contributing, Design, Motivation, Top
+@chapter Contributing
+
+This design document was originally written in 1996. As of 2004, GSL
+itself is essentially feature complete, the developers are not actively
+working on any major new functionality.
+
+The main emphasis is now on ensuring the stability of the existing
+functions, improving consistency, tidying up a few problem areas and
+fixing any bugs that are reported. Potential contributors are
+encouraged to gain familiarity with the library by investigating and
+fixing known problems listed in the @file{BUGS} file in the CVS
+repository.
+
+Adding large amounts of new code is difficult because it leads to
+differences in the maturity of different parts of the library. To
+maintain stability, any new functionality is encouraged as
+@dfn{packages}, built on top of GSL and maintained independently by the
+author, as in other free software projects (such as the Perl CPAN
+archive and TeX CTAN archive, etc).
+
+@menu
+* Packages::
+@end menu
+
+@node Packages, , Contributing, Contributing
+@section Packages
+
+The design of GSL permits extensions to be used alongside the existing
+library easily by simple linking. For example, additional random number
+generators can be provided in a separate library:
+
+@example
+$ tar xvfz rngextra-0.1.tar.gz
+$ cd rngextra-0.1
+$ ./configure; make; make check; make install
+$ ...
+$ gcc -Wall main.c -lrngextra -lgsl -lgslcblas -lm
+@end example
+
+The points below summarise the package design guidelines. These are
+intended to ensure that packages are consistent with GSL itself, to make
+life easier for the end-user and make it possible to distribute popular
+well-tested packages as part of the core GSL in future.
+
+@itemize @bullet
+@item Follow the GSL and GNU coding standards described in this document
+
+This means using the standard GNU packaging tools, such as Automake,
+providing documentation in Texinfo format, and a test suite. The test
+suite should run using @samp{make check}, and use the test functions
+provided in GSL to produce the output with @code{PASS:}/@code{FAIL:}
+lines. It is not essential to use libtool since packages are likely to
+be small, a static library is sufficient and simpler to build.
+
+@item Use a new unique prefix for the package (do not use @samp{gsl_} -- this is reserved for internal use).
+
+For example, a package of additional random number generators might use
+the prefix @code{rngextra}.
+
+@example
+#include <rngextra.h>
+
+gsl_rng * r = gsl_rng_alloc (rngextra_lsfr32);
+@end example
+
+@item Use a meaningful version number which reflects the state of development
+
+Generally, @code{0.x} are alpha versions, which provide no guarantees.
+Following that, @code{0.9.x} are beta versions, which should be essentially
+complete, subject only to minor changes and bug fixes. The first major
+release is @code{1.0}. Any version number of @code{1.0} or higher
+should be suitable for production use with a well-defined API.
+
+The API must not change in a major release and should be
+backwards-compatible in its behavior (excluding actual bug-fixes), so
+that existing code do not have to be modified. Note that the API
+includes all exported definitions, including data-structures defined
+with @code{struct}. If you need to change the API in a package, it
+requires a new major release (e.g. @code{2.0}).
+
+@item Use the GNU General Public License (GPL)
+
+Follow the normal procedures of obtaining a copyright disclaimer if you
+would like to have the package considered for inclusion in GSL itself in
+the future (@pxref{Legal issues}).
+@end itemize
+
+Post announcements of your package releases to
+@email{gsl-discuss@@sources.redhat.com} so that information about them
+can be added to the GSL webpages.
+
+For security, sign your package with GPG (@code{gpg --detach-sign
+@var{file}}).
+
+An example package @samp{rngextra} containing two additional random
+number generators can be found at
+@url{http://www.network-theory.co.uk/download/rngextra/}.
+
+@node Design, Bibliography, Contributing, Top
+@chapter Design
+
+@menu
+* Language for implementation::
+* Interface to other languages::
+* What routines are implemented::
+* What routines are not implemented::
+* Design of Numerical Libraries::
+* Code Reuse::
+* Standards and conventions::
+* Background and Preparation::
+* Choice of Algorithms::
+* Documentation::
+* Namespace::
+* Header files::
+* Target system::
+* Function Names::
+* Object-orientation::
+* Comments::
+* Minimal structs::
+* Algorithm decomposition::
+* Memory allocation and ownership::
+* Memory layout::
+* Linear Algebra Levels::
+* Error estimates::
+* Exceptions and Error handling::
+* Persistence::
+* Using Return Values::
+* Variable Names::
+* Datatype widths::
+* size_t::
+* Arrays vs Pointers::
+* Pointers::
+* Constness::
+* Pseudo-templates::
+* Arbitrary Constants::
+* Test suites::
+* Compilation::
+* Thread-safety::
+* Legal issues::
+* Non-UNIX portability::
+* Compatibility with other libraries::
+* Parallelism::
+* Precision::
+* Miscellaneous::
+@end menu
+
+@node Language for implementation, Interface to other languages, Design, Design
+@section Language for implementation
+
+@strong{One language only (C)}
+
+Advantages: simpler, compiler available and quite universal.
+
+@node Interface to other languages, What routines are implemented, Language for implementation, Design
+@section Interface to other languages
+
+Wrapper packages are supplied as "extra" packages; not as part of the
+"core". They are maintained separately by independent contributors.
+
+Use standard tools to make wrappers: swig, g-wrap
+
+@node What routines are implemented, What routines are not implemented, Interface to other languages, Design
+@section What routines are implemented
+
+Anything which is in any of the existing libraries. Obviously it makes
+sense to prioritize and write code for the most important areas first.
+
+@c @itemize @bullet
+@c @item Random number generators
+
+@c Includes both random number generators and routines to give various
+@c interesting distributions.
+
+@c @item Statistics
+
+@c @item Special Functions
+
+@c What I (jt) envision for this section is a collection of routines for
+@c reliable and accurate (but not necessarily fast or efficient) estimation
+@c of values for special functions, explicitly using Taylor series, asymptotic
+@c expansions, continued fraction expansions, etc. As well as these routines,
+@c fast approximations will also be provided, primarily based on Chebyschev
+@c polynomials and ratios of polynomials. In this vision, the approximations
+@c will be the "standard" routines for the users, and the exact (so-called)
+@c routines will be used for verification of the approximations. It may also
+@c be useful to provide various identity-checking routines as part of the
+@c verification suite.
+
+@c @item Curve fitting
+
+@c polynomial, special functions, spline
+
+@c @item Ordinary differential equations
+
+@c @item Partial differential equations
+
+@c @item Fourier Analysis
+
+@c @item Wavelets
+
+@c @item Matrix operations: linear equations
+
+@c @item Matrix operations: eigenvalues and spectral analysis
+
+@c @item Matrix operations: any others?
+
+@c @item Direct integration
+
+@c @item Monte carlo methods
+
+@c @item Simulated annealing
+
+@c @item Genetic algorithms
+
+@c We need to think about what kinds of algorithms are basic generally
+@c useful numerical algorithms, and which ones are special purpose
+@c research projects. We should concentrate on supplying the former.
+
+@c @item Cellular automata
+
+@c @end itemize
+
+@node What routines are not implemented, Design of Numerical Libraries, What routines are implemented, Design
+@section What routines are not implemented
+
+@itemize @bullet
+@item anything which already exists as a high-quality GPL'ed package.
+
+@item anything which is too big
+ -- i.e. an application in its own right rather than a subroutine
+
+For example, partial differential equation solvers are often huge and
+very specialized applications (since there are so many types of PDEs,
+types of solution, types of grid, etc). This sort of thing should
+remain separate. It is better to point people to the good applications
+which exist.
+
+@item anything which is independent and useful separately.
+
+Arguably functions for manipulating date and time, or financial
+functions might be included in a "scientific" library. However, these
+sorts of modules could equally well be used independently in other
+programs, so it makes sense for them to be separate libraries.
+@end itemize
+
+@node Design of Numerical Libraries, Code Reuse, What routines are not implemented, Design
+@section Design of Numerical Libraries
+
+In writing a numerical library there is a unavoidable conflict between
+completeness and simplicity. Completeness refers to the ability to
+perform operations on different objects so that the group is
+"closed". In mathematics objects can be combined and operated on in an
+infinite number of ways. For example, I can take the derivative of a
+scalar field with respect to a vector and the derivative of a vector
+field wrt a scalar (along a path).
+
+There is a definite tendency to unconsciously try to reproduce all these
+possibilities in a numerical library, by adding new features one by
+one. After all, it is always easy enough to support just one more
+feature.... so why not?
+
+Looking at the big picture, no-one would start out by saying "I want to
+be able to represent every possible mathematical object and operation
+using C structs" -- this is a strategy which is doomed to fail. There
+is a limited amount of complexity which can be represented in a
+programming language like C. Attempts to reproduce the complexity of
+mathematics within such a language would just lead to a morass of
+unmaintainable code. However, it's easy to go down that road if you
+don't think about it ahead of time.
+
+It is better to choose simplicity over completeness. In designing new
+parts of the library keep modules independent where possible. If
+interdependencies between modules are introduced be sure about where you
+are going to draw the line.
+
+@node Code Reuse, Standards and conventions, Design of Numerical Libraries, Design
+@section Code Reuse
+
+It is useful if people can grab a single source file and include it in
+their own programs without needing the whole library. Try to allow
+standalone files like this whenever it is reasonable. Obviously the
+user might need to define a few macros, such as GSL_ERROR, to compile
+the file but that is ok. Examples where this can be done: grabbing a
+single random number generator.
+
+@node Standards and conventions, Background and Preparation, Code Reuse, Design
+@section Standards and conventions
+
+The people who kick off this project should set the coding standards and
+conventions. In order of precedence the standards that we follow are,
+
+@itemize @bullet
+@item We follow the GNU Coding Standards.
+@item We follow the conventions of the ANSI Standard C Library.
+@item We follow the conventions of the GNU C Library.
+@item We follow the conventions of the glib GTK support Library.
+@end itemize
+
+The references for these standards are the @cite{GNU Coding Standards}
+document, Harbison and Steele @cite{C: A Reference Manual}, the
+@cite{GNU C Library Manual} (version 2), and the Glib source code.
+
+For mathematical formulas, always follow the conventions in Abramowitz &
+Stegun, the @cite{Handbook of Mathematical Functions}, since it is the
+definitive reference and also in the public domain.
+
+If the project has a philosophy it is to "Think in C". Since we are
+working in C we should only do what is natural in C, rather than trying
+to simulate features of other languages. If there is something which is
+unnatural in C and has to be simulated then we avoid using it. If this
+means leaving something out of the library, or only offering a limited
+version then so be it. It is not worthwhile making the library
+over-complicated. There are numerical libraries in other languages, and
+if people need the features of those languages it would be sensible for
+them to use the corresponding libraries, rather than coercing a C
+library into doing that job.
+
+It should be borne in mind at all time that C is a macro-assembler. If
+you are in doubt about something being too complicated ask yourself the
+question "Would I try to write this in macro-assembler?" If the answer
+is obviously "No" then do not try to include it in GSL. [BJG]
+
+It will be useful to read the following papers,
+
+@itemize @asis
+@item
+Kiem-Phong Vo, ``The Discipline and Method Architecture for Reusable
+Libraries'', Software - Practice & Experience, v.30, pp.107-128, 2000.
+@end itemize
+
+@noindent
+It is available from
+@uref{http://www.research.att.com/sw/tools/sfio/dm-spe.ps} or the earlier
+technical report Kiem-Phong Vo, "An Architecture for Reusable Libraries"
+@uref{http://citeseer.nj.nec.com/48973.html}.
+
+There are associated papers on Vmalloc, SFIO, and CDT which are also
+relevant to the design of portable C libraries.
+
+@itemize @asis
+@item
+Kiem-Phong Vo, ``Vmalloc: A General and Efficient Memory
+Allocator''. Software Practice & Experience, 26:1--18, 1996.
+
+@uref{http://www.research.att.com/sw/tools/vmalloc/vmalloc.ps}
+@item
+Kiem-Phong Vo. ``Cdt: A Container Data Type Library''. Soft. Prac. &
+Exp., 27:1177--1197, 1997
+
+@uref{http://www.research.att.com/sw/tools/cdt/cdt.ps}
+@item
+David G. Korn and Kiem-Phong Vo, ``Sfio: Safe/Fast String/File IO'',
+Proceedings of the Summer '91 Usenix Conference, pp. 235-256, 1991.
+
+@uref{http://citeseer.nj.nec.com/korn91sfio.html}
+@end itemize
+
+Source code should be indented according to the GNU Coding Standards,
+with spaces not tabs. For example, by using the @code{indent} command:
+
+@example
+indent -gnu -nut *.c *.h
+@end example
+
+@noindent
+The @code{-nut} option converts tabs into spaces.
+
+@node Background and Preparation, Choice of Algorithms, Standards and conventions, Design
+@section Background and Preparation
+
+Before implementing something be sure to research the subject
+thoroughly! This will save a lot of time in the long-run. The two most
+important steps are,
+
+@enumerate
+@item
+to determine whether there is already a free library (GPL or
+GPL-compatible) which does the job. If so, there is no need to
+reimplement it. Carry out a search on Netlib, GAMs, na-net,
+sci.math.num-analysis and the web in general. This should also provide
+you with a list of existing proprietary libraries which are relevant,
+keep a note of these for future reference in step 2.
+
+@item
+make a comparative survey of existing implementations in the
+commercial/free libraries. Examine the typical APIs, methods of
+communication between program and subroutine, and classify them so that
+you are familiar with the key concepts or features that an
+implementation may or may not have, depending on the relevant tradeoffs
+chosen. Be sure to review the documentation of existing libraries for
+useful references.
+
+@item
+read up on the subject and determine the state-of-the-art. Find the
+latest review papers. A search of the following journals should be
+undertaken.
+
+@itemize @asis
+@item ACM Transactions on Mathematical Software
+@item Numerische Mathematik
+@item Journal of Computation and Applied Mathematics
+@item Computer Physics Communications
+@item SIAM Journal of Numerical Analysis
+@item SIAM Journal of Scientific Computing
+@end itemize
+@end enumerate
+
+@noindent
+Keep in mind that GSL is not a research project. Making a good
+implementation is difficult enough, without also needing to invent new
+algorithms. We want to implement existing algorithms whenever
+possible. Making minor improvements is ok, but don't let it be a
+time-sink.
+
+@node Choice of Algorithms, Documentation, Background and Preparation, Design
+@section Choice of Algorithms
+
+Whenever possible choose algorithms which scale well and always remember
+to handle asymptotic cases. This is particularly relevant for functions
+with integer arguments. It is tempting to implement these using the
+simple @math{O(n)} algorithms used to define the functions, such as the
+many recurrence relations found in Abramowitz and Stegun. While such
+methods might be acceptable for @math{n=O(10-100)} they will not be
+satisfactory for a user who needs to compute the same function for
+@math{n=1000000}.
+
+Similarly, do not make the implicit assumption that multivariate data
+has been scaled to have components of the same size or O(1). Algorithms
+should take care of any necessary scaling or balancing internally, and
+use appropriate norms (e.g. |Dx| where D is a diagonal scaling matrix,
+rather than |x|).
+
+@node Documentation, Namespace, Choice of Algorithms, Design
+@section Documentation
+Documentation: the project leaders should give examples of how things
+are to be documented. High quality documentation is absolutely
+mandatory, so documentation should introduce the topic, and give careful
+reference for the provided functions. The priority is to provide
+reference documentation for each function. It is not necessary to
+provide tutorial documentation.
+
+Use free software, such as GNU Plotutils, to produce the graphs in the
+manual.
+
+Some of the graphs have been made with gnuplot which is not truly free
+(or GNU) software, and some have been made with proprietary
+programs. These should be replaced with output from GNU plotutils.
+
+When citing references be sure to use the standard, definitive and
+best reference books in the field, rather than lesser known text-books
+or introductory books which happen to be available (e.g. from
+undergraduate studies). For example, references concerning algorithms
+should be to Knuth, references concerning statistics should be to
+Kendall & Stuart, references concerning special functions should be to
+Abramowitz & Stegun (Handbook of Mathematical Functions AMS-55), etc.
+Whereever possible refer to Abramowitz & Stegun rather than other
+reference books because it is a public domain work, so it is
+inexpensive and freely redistributable.
+
+The standard references have a better chance of being available in an
+accessible library for the user. If they are not available and the user
+decides to buy a copy in order to look up the reference then this also
+gives them the best quality book which should also cover the largest
+number of other references in the GSL Manual. If many different books
+were to be referenced this would be an expensive and inefficient use of
+resources for a user who needs to look up the details of the algorithms.
+Reference books also stay in print much longer than text books, which
+are often out-of-print after a few years.
+
+Similarly, cite original papers wherever possible. Be sure to keep
+copies of these for your own reference (e.g. when dealing with bug
+reports) or to pass on to future maintainers.
+
+If you need help in tracking down references, ask on the
+@code{gsl-discuss} mailing list. There is a group of volunteers with
+access to good libraries who have offered to help GSL developers get
+copies of papers.
+
+@c [JT section: written by James Theiler
+
+@c And we furthermore promise to try as hard as possible to document
+@c the software: this will ideally involve discussion of why you might want
+@c to use it, what precisely it does, how precisely to invoke it,
+@c how more-or-less it works, and where we learned about the algorithm,
+@c and (unless we wrote it from scratch) where we got the code.
+@c We do not plan to write this entire package from scratch, but to cannibalize
+@c existing mathematical freeware, just as we expect our own software to
+@c be cannibalized.]
+
+To write mathematics in the texinfo file you can use the @code{@@math}
+command with @emph{simple} TeX commands. These are automatically
+surrounded by @code{$...$} for math mode. For example,
+
+@example
+to calculate the coefficient @@math@{\alpha@} use the function...
+@end example
+
+@noindent
+will be correctly formatted in both online and TeX versions of the
+documentation.
+
+Note that you cannot use the special characters @{ and @}
+inside the @code{@@math} command because these conflict between TeX
+and Texinfo. This is a problem if you want to write something like
+@code{\sqrt@{x+y@}}.
+
+To work around it you can preceed the math command with a special
+macro @code{@@c} which contains the explicit TeX commands you want to
+use (no restrictions), and put an ASCII approximation into the
+@code{@@math} command (you can write @code{@@@{} and
+@code{@@@}} there for the left and right braces). The explicit TeX
+commands are used in the TeX ouput and the argument of @code{@@math}
+in the plain info output.
+
+Note that the @code{@@c@{@}} macro must go at the end of the
+preceeding line, because everything else after it is ignored---as far
+as texinfo is concerned it's actually a 'comment'. The comment
+command @@c has been modified to capture a TeX expression which is
+output by the next @@math command. For ordinary comments use the @@comment
+command.
+
+For example,
+
+@example
+this is a test @@c@{$\sqrt@{x+y@}$@}
+@@math@{\sqrt@@@{x+y@@@}@}
+@end example
+
+@noindent
+is equivalent to @code{this is a test $\sqrt@{x+y@}$} in plain TeX
+and @code{this is a test @@math@{\sqrt@@@{x+y@@@}@}} in Info.
+
+It looks nicer if some of the more cryptic TeX commands are given
+a C-style ascii version, e.g.
+
+@example
+for @@c@{$x \ge y$@}
+@@math@{x >= y@}
+@end example
+
+@noindent
+will be appropriately displayed in both TeX and Info.
+
+
+@node Namespace, Header files, Documentation, Design
+@section Namespace
+
+Use @code{gsl_} as a prefix for all exported functions and variables.
+
+Use @code{GSL_} as a prefix for all exported macros.
+
+All exported header files should have a filename with the prefix @code{gsl_}.
+
+All installed libraries should have a name like libgslhistogram.a
+
+Any installed executables (utility programs etc) should have the prefix
+@code{gsl-} (with a hyphen, not an underscore).
+
+All function names, variables, etc should be in lower case. Macros and
+preprocessor variables should be in upper case.
+
+Some common conventions in variable and function names:
+
+@table @code
+@item p1
+plus 1, e.g. function @code{log1p(x)} or a variable like @code{kp1}, @math{=k+1}.
+
+@item m1
+minus 1, e.g. function @code{expm1(x)} or a variable like @code{km1}, @math{=k-1}.
+@end table
+
+@node Header files, Target system, Namespace, Design
+@section Header files
+
+Installed header files should be idempotent, i.e. surround them by the
+preprocessor conditionals like the following,
+
+@example
+#ifndef __GSL_HISTOGRAM_H__
+#define __GSL_HISTOGRAM_H__
+...
+#endif /* __GSL_HISTOGRAM_H__ */
+@end example
+
+@node Target system, Function Names, Header files, Design
+@section Target system
+
+The target system is ANSI C, with a full Standard C Library, and IEEE
+arithmetic.
+
+@node Function Names, Object-orientation, Target system, Design
+@section Function Names
+
+Each module has a name, which prefixes any function names in that
+module, e.g. the module gsl_fft has function names like
+gsl_fft_init. The modules correspond to subdirectories of the library
+source tree.
+
+@node Object-orientation, Comments, Function Names, Design
+@section Object-orientation
+
+The algorithms should be object oriented, but only to the extent that is
+easy in portable ANSI C. The use of casting or other tricks to simulate
+inheritance is not desirable, and the user should not have to be aware
+of anything like that. This means many types of patterns are ruled
+out. However, this is not considered a problem -- they are too
+complicated for the library.
+
+Note: it is possible to define an abstract base class easily in C, using
+function pointers. See the rng directory for an example.
+
+When reimplementing public domain fortran code, please try to introduce
+the appropriate object concepts as structs, rather than translating the
+code literally in terms of arrays. The structs can be useful just
+within the file, you don't need to export them to the user.
+
+For example, if a fortran program repeatedly uses a subroutine like,
+
+@example
+SUBROUTINE RESIZE (X, K, ND, K1)
+@end example
+
+@noindent
+where X(K,D) represents a grid to be resized to X(K1,D) you can make
+this more readable by introducing a struct,
+
+@smallexample
+struct grid @{
+ int nd; /* number of dimensions */
+ int k; /* number of bins */
+ double * x; /* partition of axes, array of size x[k][nd] */
+@}
+
+void
+resize_grid (struct grid * g, int k_new)
+@{
+...
+@}
+@end smallexample
+
+@noindent
+Similarly, if you have a frequently recurring code fragment within a
+single file you can define a static or static inline function for it.
+This is typesafe and saves writing out everything in full.
+
+
+@node Comments, Minimal structs, Object-orientation, Design
+@section Comments
+
+Follow the GNU Coding Standards. A relevant quote is,
+
+``Please write complete sentences and capitalize the first word. If a
+lower-case identifier comes at the beginning of a sentence, don't
+capitalize it! Changing the spelling makes it a different identifier.
+If you don't like starting a sentence with a lower case letter, write
+the sentence differently (e.g., "The identifier lower-case is ...").''
+
+@node Minimal structs, Algorithm decomposition, Comments, Design
+@section Minimal structs
+
+We prefer to make structs which are @dfn{minimal}. For example, if a
+certain type of problem can be solved by several classes of algorithm
+(e.g. with and without derivative information) it is better to make
+separate types of struct to handle those cases. i.e. run time type
+identification is not desirable.
+
+@node Algorithm decomposition, Memory allocation and ownership, Minimal structs, Design
+@section Algorithm decomposition
+
+Iterative algorithms should be decomposed into an INITIALIZE, ITERATE,
+TEST form, so that the user can control the progress of the iteration
+and print out intermediate results. This is better than using
+call-backs or using flags to control whether the function prints out
+intermediate results. In fact, call-backs should not be used -- if they
+seem necessary then it's a sign that the algorithm should be broken down
+further into individual components so that the user has complete control
+over them.
+
+For example, when solving a differential equation the user may need to
+be able to advance the solution by individual steps, while tracking a
+realtime process. This is only possible if the algorithm is broken down
+into step-level components. Higher level decompositions would not give
+sufficient flexibility.
+
+@node Memory allocation and ownership, Memory layout, Algorithm decomposition, Design
+@section Memory allocation and ownership
+
+Functions which allocate memory on the heap should end in _alloc
+(e.g. gsl_foo_alloc) and be deallocated by a corresponding _free function
+(gsl_foo_free).
+
+Be sure to free any memory allocated by your function if you have to
+return an error in a partially initialized object.
+
+Don't allocate memory 'temporarily' inside a function and then free it
+before the function returns. This prevents the user from controlling
+memory allocation. All memory should be allocated and freed through
+separate functions and passed around as a "workspace" argument. This
+allows memory allocation to be factored out of tight loops.
+
+@node Memory layout, Linear Algebra Levels, Memory allocation and ownership, Design
+@section Memory layout
+
+We use flat blocks of memory to store matrices and vectors, not C-style
+pointer-to-pointer arrays. The matrices are stored in row-major order
+-- i.e. the column index (second index) moves continuously through memory.
+
+@node Linear Algebra Levels, Error estimates, Memory layout, Design
+@section Linear Algebra Levels
+
+Functions using linear algebra are divided into two levels:
+
+For purely "1d" functions we use the C-style arguments (double *,
+stride, size) so that it is simpler to use the functions in a normal C
+program, without needing to invoke all the gsl_vector machinery.
+
+The philosophy here is to minimize the learning curve. If someone only
+needs to use one function, like an fft, they can do so without having
+to learn about gsl_vector.
+
+This leads to the question of why we don't do the same for matrices.
+In that case the argument list gets too long and confusing, with
+(size1, size2, tda) for each matrix and potential ambiguities over row
+vs column ordering. In this case, it makes sense to use gsl_vector and
+gsl_matrix, which take care of this for the user.
+
+So really the library has two levels -- a lower level based on C types
+for 1d operations, and a higher level based on gsl_matrix and
+gsl_vector for general linear algebra.
+
+Of course, it would be possible to define a vector version of the
+lower level functions too. So far we have not done that because it was
+not essential -- it could be done but it is easy enough to get by
+using the C arguments, by typing v->data, v->stride, v->size instead.
+A gsl_vector version of low-level functions would mainly be a
+convenience.
+
+Please use BLAS routines internally within the library whenever possible
+for efficiency.
+
+@node Error estimates, Exceptions and Error handling, Linear Algebra Levels, Design
+@section Error estimates
+
+In the special functions error bounds are given as twice the expected
+``gaussian'' error. i.e. 2-sigma, so the result is inside the error
+98% of the time. People expect the true value to be within +/- the
+quoted error (this wouldn't be the case 32% of the time for 1 sigma).
+Obviously the errors are not gaussian but a factor of two works well
+in practice.
+
+@node Exceptions and Error handling, Persistence, Error estimates, Design
+@section Exceptions and Error handling
+
+The basic error handling procedure is the return code (see gsl_errno.h
+for a list of allowed values). Use the GSL_ERROR macro to mark an
+error. The current definition of this macro is not ideal but it can be
+changed at compile time.
+
+You should always use the GSL_ERROR macro to indicate an error, rather
+than just returning an error code. The macro allows the user to trap
+errors using the debugger (by setting a breakpoint on the function
+gsl_error).
+
+The only circumstances where GSL_ERROR should not be used are where the
+return value is "indicative" rather than an error -- for example, the
+iterative routines use the return code to indicate the success or
+failure of an iteration. By the nature of an iterative algorithm
+"failure" (a return code of GSL_CONTINUE) is a normal occurrence and
+there is no need to use GSL_ERROR there.
+
+Be sure to free any memory allocated by your function if you return an
+error (in particular for errors in partially initialized objects).
+
+@node Persistence, Using Return Values, Exceptions and Error handling, Design
+@section Persistence
+
+If you make an object foo which uses blocks of memory (e.g. vector,
+matrix, histogram) you can provide functions for reading and writing
+those blocks,
+
+@smallexample
+int gsl_foo_fread (FILE * stream, gsl_foo * v);
+int gsl_foo_fwrite (FILE * stream, const gsl_foo * v);
+int gsl_foo_fscanf (FILE * stream, gsl_foo * v);
+int gsl_foo_fprintf (FILE * stream, const gsl_foo * v, const char *format);
+@end smallexample
+
+@noindent
+Only dump out the blocks of memory, not any associated parameters such
+as lengths. The idea is for the user to build higher level input/output
+facilities using the functions the library provides. The fprintf/fscanf
+versions should be portable between architectures, while the binary
+versions should be the "raw" version of the data. Use the functions
+
+@smallexample
+int gsl_block_fread (FILE * stream, gsl_block * b);
+int gsl_block_fwrite (FILE * stream, const gsl_block * b);
+int gsl_block_fscanf (FILE * stream, gsl_block * b);
+int gsl_block_fprintf (FILE * stream, const gsl_block * b, const char *format);
+@end smallexample
+
+@noindent
+or
+
+@smallexample
+int gsl_block_raw_fread (FILE * stream, double * b, size_t n, size_t stride);
+int gsl_block_raw_fwrite (FILE * stream, const double * b, size_t n, size_t stri
+de);
+int gsl_block_raw_fscanf (FILE * stream, double * b, size_t n, size_t stride);
+int gsl_block_raw_fprintf (FILE * stream, const double * b, size_t n, size_t str
+ide, const char *format);
+@end smallexample
+
+@noindent
+to do the actual reading and writing.
+
+@node Using Return Values, Variable Names, Persistence, Design
+@section Using Return Values
+
+Always assign a return value to a variable before using it. This allows
+easier debugging of the function, and inspection and modification of the
+return value. If the variable is only needed temporarily then enclose
+it in a suitable scope.
+
+For example, instead of writing,
+
+@example
+a = f(g(h(x,y)))
+@end example
+
+@noindent
+use temporary variables to store the intermediate values,
+@example
+@{
+ double u = h(x,y);
+ double v = g(u);
+ a = f(v);
+@}
+@end example
+
+@noindent
+These can then be inspected more easily in the debugger, and breakpoints
+can be placed more precisely. The compiler will eliminate the temporary
+variables automatically when the program is compiled with optimization.
+
+@node Variable Names, Datatype widths, Using Return Values, Design
+@section Variable Names
+
+Try to follow existing conventions for variable names,
+
+@table @code
+@item dim
+number of dimensions
+@item w
+pointer to workspace
+@item state
+pointer to state variable (use @code{s} if you need to save characters)
+@item result
+pointer to result (output variable)
+@item abserr
+absolute error
+@item relerr
+relative error
+@item epsabs
+absolute tolerance
+@item epsrel
+relative tolerance
+@item size
+the size of an array or vector e.g. double array[size]
+@item stride
+the stride of a vector
+@item size1
+the number of rows in a matrix
+@item size2
+the number of columns in a matrix
+@item n
+general integer number, e.g. number of elements of array, in fft, etc
+@item r
+random number generator (gsl_rng)
+@end table
+
+@node Datatype widths, size_t, Variable Names, Design
+@section Datatype widths
+
+Be aware that in ANSI C the type @code{int} is only guaranteed to
+provide 16-bits. It may provide more, but is not guaranteed to.
+Therefore if you require 32 bits you must use @code{long int}, which
+will have 32 bits or more. Of course, on many platforms the type
+@code{int} does have 32 bits instead of 16 bits but we have to code to
+the ANSI standard rather than a specific platform.
+
+@node size_t, Arrays vs Pointers, Datatype widths, Design
+@section size_t
+
+All objects (blocks of memory, etc) should be measured in terms of a
+@code{size_t} type. Therefore any iterations (e.g. @code{for(i=0; i<N;
+i++)}) should also use an index of type @code{size_t}.
+
+Don't mix @code{int} and @code{size_t}. They are @emph{not}
+interchangeable.
+
+If you need to write a descending loop you have to be careful because
+@code{size_t} is unsigned, so instead of
+
+@example
+for (i = N - 1; i >= 0; i--) @{ ... @} /* DOESN'T WORK */
+@end example
+
+@noindent
+use something like
+
+@example
+for (i = N; i > 0 && i--;) @{ ... @}
+@end example
+
+@noindent
+to avoid problems with wrap-around at @code{i=0}.
+
+If you really want to avoid confusion use a separate variable to invert
+the loop order,
+@example
+for (i = 0; i < N; i++) @{ j = N - i; ... @}
+@end example
+
+@node Arrays vs Pointers, Pointers, size_t, Design
+@section Arrays vs Pointers
+
+A function can be declared with either pointer arguments or array
+arguments. The C standard considers these to be equivalent. However, it
+is useful to distinguish between the case of a pointer, representing a
+single object which is being modified, and an array which represents a
+set of objects with unit stride (that are modified or not depending on
+the presence of @code{const}). For vectors, where the stride is not
+required to be unity, the pointer form is preferred.
+
+@smallexample
+/* real value, set on output */
+int foo (double * x);
+
+/* real vector, modified */
+int foo (double * x, size_t stride, size_t n);
+
+/* constant real vector */
+int foo (const double * x, size_t stride, size_t n);
+
+/* real array, modified */
+int bar (double x[], size_t n);
+
+/* real array, not modified */
+int baz (const double x[], size_t n);
+@end smallexample
+
+@node Pointers, Constness, Arrays vs Pointers, Design
+@section Pointers
+
+Avoid dereferencing pointers on the right-hand side of an expression where
+possible. It's better to introduce a temporary variable. This is
+easier for the compiler to optimise and also more readable since it
+avoids confusion between the use of @code{*} for multiplication and
+dereferencing.
+
+@example
+while (fabs (f) < 0.5)
+@{
+ *e = *e - 1;
+ f *= 2;
+@}
+@end example
+
+@noindent
+is better written as,
+
+@example
+@{
+ int p = *e;
+
+ while (fabs(f) < 0.5)
+ @{
+ p--;
+ f *= 2;
+ @}
+
+ *e = p;
+@}
+@end example
+
+@node Constness, Pseudo-templates, Pointers, Design
+@section Constness
+
+Use @code{const} in function prototypes wherever an object pointed to by
+a pointer is constant (obviously). For variables which are meaningfully
+constant within a function/scope use @code{const} also. This prevents
+you from accidentally modifying a variable which should be constant
+(e.g. length of an array, etc). It can also help the compiler do
+optimization. These comments also apply to arguments passed by value
+which should be made @code{const} when that is meaningful.
+
+@node Pseudo-templates, Arbitrary Constants, Constness, Design
+@section Pseudo-templates
+
+There are some pseudo-template macros available in @file{templates_on.h}
+and @file{templates_off.h}. See a directory link @file{block} for
+details on how to use them. Use sparingly, they are a bit of a
+nightmare, but unavoidable in places.
+
+In particular, the convention is: templates are used for operations on
+"data" only (vectors, matrices, statistics, sorting). This is intended
+to cover the case where the program must interface with an external
+data-source which produces a fixed type. e.g. a big array of char's
+produced by an 8-bit counter.
+
+All other functions can use double, for floating point, or the
+appropriate integer type for integers (e.g. unsigned long int for random
+numbers). It is not the intention to provide a fully templated version
+of the library.
+
+That would be "putting a quart into a pint pot". To summarize, almost
+everything should be in a "natural type" which is appropriate for
+typical usage, and templates are there to handle a few cases where it is
+unavoidable that other data-types will be encountered.
+
+For floating point work "double" is considered a "natural type". This
+sort of idea is a part of the C language.
+
+@node Arbitrary Constants, Test suites, Pseudo-templates, Design
+@section Arbitrary Constants
+
+Avoid arbitrary constants.
+
+For example, don't hard code "small" values like '1e-30', '1e-100' or
+@code{10*GSL_DBL_EPSILON} into the routines. This is not appropriate
+for a general purpose library.
+
+Compute values accurately using IEEE arithmetic. If errors are
+potentially significant then error terms should be estimated reliably
+and returned to the user, by analytically deriving an error propagation
+formula, not using guesswork.
+
+A careful consideration of the algorithm usually shows that arbitrary
+constants are unnecessary, and represent an important parameter which
+should be accessible to the user.
+
+For example, consider the following code:
+
+@example
+if (residual < 1e-30) @{
+ return 0.0; /* residual is zero within round-off error */
+@}
+@end example
+
+@noindent
+This should be rewritten as,
+
+@example
+ return residual;
+@end example
+
+@noindent
+in order to allow the user to determine whether the residual is
+significant or not.
+
+The only place where it is acceptable to use constants like
+@code{GSL_DBL_EPSILON} is in function approximations, (e.g. taylor
+series, asymptotic expansions, etc). In these cases it is not an
+arbitrary constant, but an inherent part of the algorithm.
+
+@node Test suites, Compilation, Arbitrary Constants, Design
+@section Test suites
+
+The implementor of each module should provide a reasonable test suite
+for the routines.
+
+The test suite should be a program that uses the library and checks the
+result against known results, or invokes the library several times and
+does a statistical analysis on the results (for example in the case of
+random number generators).
+
+Ideally the one test program per directory should aim for 100% path
+coverage of the code. Obviously it would be a lot of work to really
+achieve this, so prioritize testing on the critical parts and use
+inspection for the rest. Test all the error conditions by explicitly
+provoking them, because we consider it a serious defect if the function
+does not return an error for an invalid parameter. N.B. Don't bother to
+test for null pointers -- it's sufficient for the library to segfault if
+the user provides an invalid pointer.
+
+The tests should be deterministic. Use the @code{gsl_test} functions
+provided to perform separate tests for each feature with a separate
+output PASS/FAIL line, so that any failure can be uniquely identified.
+
+Use realistic test cases with 'high entropy'. Tests on simple values
+such as 1 or 0 may not reveal bugs. For example, a test using a value
+of @math{x=1} will not pick up a missing factor of @math{x} in the code.
+Similarly, a test using a value of @math{x=0} will not pick any missing
+terms involving @math{x} in the code. Use values like @math{2.385} to
+avoid silent failures.
+
+If your test uses multiple values make sure there are no simple
+relations between them that could allow bugs to be missed through silent
+cancellations.
+
+If you need some random floats to put in the test programs use @code{od -f
+/dev/random} as a source of inspiration.
+
+Don't use @code{sprintf} to create output strings in the tests. It can
+cause hard to find bugs in the test programs themselves. The functions
+@code{gsl_test_...} support format string arguments so use these
+instead.
+
+@node Compilation, Thread-safety, Test suites, Design
+@section Compilation
+
+Make sure everything compiles cleanly. Use the strict compilation
+options for extra checking.
+
+@smallexample
+make CFLAGS="-ansi -pedantic -Werror -W -Wall -Wtraditional -Wconversion
+ -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings
+ -Wstrict-prototypes -fshort-enums -fno-common -Wmissing-prototypes
+ -Wnested-externs -Dinline= -g -O4"
+@end smallexample
+
+@noindent
+Also use @code{checkergcc} to check for memory problems on the stack and
+the heap. It's the best memory checking tool. If checkergcc isn't
+available then Electric Fence will check the heap, which is better than
+no checking.
+
+There is a new tool @code{valgrind} for checking memory access. Test
+the code with this as well.
+
+Make sure that the library will also compile with C++ compilers
+(g++). This should not be too much of a problem if you have been writing
+in ANSI C.
+
+@node Thread-safety, Legal issues, Compilation, Design
+@section Thread-safety
+
+The library should be usable in thread-safe programs. All the functions
+should be thread-safe, in the sense that they shouldn't use static
+variables.
+
+We don't require everything to be completely thread safe, but anything
+that isn't should be obvious. For example, some global variables are
+used to control the overall behavior of the library (range-checking
+on/off, function to call on fatal error, etc). Since these are accessed
+directly by the user it is obvious to the multi-threaded programmer that
+they shouldn't be modified by different threads.
+
+There is no need to provide any explicit support for threads
+(e.g. locking mechanisms etc), just to avoid anything which would make
+it impossible for someone to call a GSL routine from a multithreaded
+program.
+
+
+@node Legal issues, Non-UNIX portability, Thread-safety, Design
+@section Legal issues
+
+@itemize @bullet
+@item
+Each contributor must make sure her code is under the GNU General Public
+License (GPL). This means getting a disclaimer from your employer.
+@item
+We must clearly understand ownership of existing code and algorithms.
+@item
+Each contributor can retain ownership of their code, or sign it over to
+FSF as they prefer.
+
+There is a standard disclaimer in the GPL (take a look at it). The more
+specific you make your disclaimer the more likely it is that it will be
+accepted by an employer. For example,
+
+@smallexample
+Yoyodyne, Inc., hereby disclaims all copyright interest in the software
+`GNU Scientific Library - Legendre Functions' (routines for computing
+legendre functions numerically in C) written by James Hacker.
+
+<signature of Ty Coon>, 1 April 1989
+Ty Coon, President of Vice
+@end smallexample
+
+@item
+Obviously: don't use or translate non-free code.
+
+In particular don't copy or translate code from @cite{Numerical Recipes}
+or @cite{ACM TOMS}.
+
+Numerical Recipes is under a strict license and is not free software.
+The publishers Cambridge University Press claim copyright on all aspects
+of the book and the code, including function names, variable names and
+ordering of mathematical subexpressions. Routines in GSL should not
+refer to Numerical Recipes or be based on it in any way.
+
+The ACM algorithms published in TOMS (Transactions on Mathematical
+Software) are not public domain, even though they are distributed on the
+internet -- the ACM uses a special non-commercial license which is not
+compatible with the GPL. The details of this license can be found on the
+cover page of ACM Transactions on Mathematical Software or on the ACM
+Website.
+
+Only use code which is explicitly under a free license: GPL or Public
+Domain. If there is no license on the code then this does not mean it
+is public domain -- an explicit statement is required. If in doubt check
+with the author.
+
+@item
+I @strong{think} one can reference algorithms from classic books on
+numerical analysis (BJG: yes, provided the code is an independent
+implementation and not copied from any existing software. For
+example, it would be ok to read the papers in ACM TOMS and make an
+independent implementation from their description).
+@end itemize
+
+@node Non-UNIX portability, Compatibility with other libraries, Legal issues, Design
+@section Non-UNIX portability
+
+There is good reason to make this library work on non-UNIX systems. It
+is probably safe to ignore DOS and only worry about windows95/windowsNT
+portability (so filenames can be long, I think).
+
+On the other hand, nobody should be forced to use non-UNIX systems for
+development.
+
+The best solution is probably to issue guidelines for portability, like
+saying "don't use XYZ unless you absolutely have to". Then the Windows
+people will be able to do their porting.
+
+@node Compatibility with other libraries, Parallelism, Non-UNIX portability, Design
+@section Compatibility with other libraries
+
+We do not regard compatibility with other numerical libraries as a
+priority.
+
+However, other libraries, such as Numerical Recipes, are widely used.
+If somebody writes the code to allow drop-in replacement of these
+libraries it would be useful to people. If it is done, it would be as a
+separate wrapper that can be maintained and shipped separately.
+
+There is a separate issue of system libraries, such as BSD math library
+and functions like @code{expm1}, @code{log1p}, @code{hypot}. The
+functions in this library are available on nearly every platform (but
+not all).
+
+In this case, it is best to write code in terms of these native
+functions to take advantage of the vendor-supplied system library (for
+example log1p is a machine instruction on the Intel x86). The library
+also provides portable implementations e.g. @code{gsl_hypot} which are
+used as an automatic fall back via autoconf when necessary. See the
+usage of @code{hypot} in @file{gsl/complex/math.c}, the implementation
+of @code{gsl_hypot} and the corresponding parts of files
+@file{configure.in} and @file{config.h.in} as an example.
+
+@node Parallelism, Precision, Compatibility with other libraries, Design
+@section Parallelism
+
+We don't intend to provide support for parallelism within the library
+itself. A parallel library would require a completely different design
+and would carry overhead that other applications do not need.
+
+@node Precision, Miscellaneous, Parallelism, Design
+@section Precision
+
+For algorithms which use cutoffs or other precision-related terms please
+express these in terms of @code{GSL_DBL_EPSILON} and @code{GSL_DBL_MIN}, or powers or
+combinations of these. This makes it easier to port the routines to
+different precisions.
+
+@node Miscellaneous, , Precision, Design
+@section Miscellaneous
+
+Don't use the letter @code{l} as a variable name --- it is difficult to
+distinguish from the number @code{1}. (This seems to be a favorite in
+old Fortran programs).
+
+Final tip: one perfect routine is better than any number of routines
+containing errors.
+
+@node Bibliography, Copying, Design, Top
+@chapter Bibliography
+
+@section General numerics
+
+@itemize
+
+@item
+@cite{Numerical Computation} (2 Volumes) by C.W. Ueberhuber,
+Springer 1997, ISBN 3540620583 (Vol 1) and ISBN 3540620575 (Vol 2).
+
+@item
+@cite{Accuracy and Stability of Numerical Algorithms} by N.J. Higham,
+SIAM, ISBN 0898715210.
+
+@item
+@cite{Sources and Development of Mathematical Software} edited by W.R. Cowell,
+Prentice Hall, ISBN 0138235015.
+
+@item
+@cite{A Survey of Numerical Mathematics (2 vols)} by D.M. Young and R.T. Gregory,
+ ISBN 0486656918, ISBN 0486656926.
+
+@item
+@cite{Methods and Programs for Mathematical Functions} by Stephen L. Moshier,
+Hard to find (ISBN 13578980X or 0135789982, possibly others).
+
+@item
+@cite{Numerical Methods That Work} by Forman S. Acton,
+ ISBN 0883854503.
+
+@item
+@cite{Real Computing Made Real: Preventing Errors in Scientific and Engineering Calculations} by Forman S. Acton,
+ ISBN 0486442217.
+@end itemize
+
+@section Reference
+
+@itemize
+@item
+@cite{Handbook of Mathematical Functions} edited by Abramowitz & Stegun,
+Dover, ISBN 0486612724.
+
+@item
+@cite{The Art of Computer Programming} (3rd Edition, 3 Volumes) by D. Knuth,
+Addison Wesley, ISBN 0201485419.
+@end itemize
+
+@section Subject specific
+
+@itemize
+@item
+@cite{Matrix Computations} (3rd Ed) by G.H. Golub, C.F. Van Loan,
+Johns Hopkins University Press 1996, ISBN 0801854148.
+
+@item
+@cite{LAPACK Users' Guide} (3rd Edition),
+SIAM 1999, ISBN 0898714478.
+
+@item
+@cite{Treatise on the Theory of Bessel Functions 2ND Edition} by G N Watson,
+ ISBN 0521483913.
+
+@item
+@cite{Higher Transcendental Functions satisfying nonhomogenous linear differential equations} by A W Babister,
+ ISBN 1114401773.
+
+@end itemize
+
+@node Copying, GNU Free Documentation License, Bibliography, Top
+@unnumbered Copying
+
+ The subroutines and source code in the @value{GSL} package are "free";
+this means that everyone is free to use them and free to redistribute
+them on a free basis. The @value{GSL}-related programs are not in the
+public domain; they are copyrighted and there are restrictions on their
+distribution, but these restrictions are designed to permit everything
+that a good cooperating citizen would want to do. What is not allowed
+is to try to prevent others from further sharing any version of these
+programs that they might get from you.
+
+ Specifically, we want to make sure that you have the right to give
+away copies of the programs that relate to @value{GSL}, that you receive
+source code or else can get it if you want it, that you can change these
+programs or use pieces of them in new free programs, and that you know
+you can do these things.
+
+ To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of the @value{GSL}-related code, you must give the recipients all
+the rights that you have. You must make sure that they, too, receive or
+can get the source code. And you must tell them their rights.
+
+ Also, for our own protection, we must make certain that everyone
+finds out that there is no warranty for the programs that relate to
+@value{GSL}. If these programs are modified by someone else and passed
+on, we want their recipients to know that what they have is not what we
+distributed, so that any problems introduced by others will not reflect
+on our reputation.
+
+ The precise conditions of the licenses for the programs currently
+being distributed that relate to @value{GSL} are found in the General
+Public Licenses that accompany them.
+
+@node GNU Free Documentation License, , Copying, Top
+@unnumbered GNU Free Documentation License
+@include fdl.texi
+
+@c @printindex cp
+
+@c @node Function Index
+@c @unnumbered Function Index
+
+@c @printindex fn
+
+@c @node Variable Index
+@c @unnumbered Variable Index
+
+@c @printindex vr
+
+@c @node Type Index
+@c @unnumbered Type Index
+
+@c @printindex tp
+
+@bye
diff --git a/gsl-1.9/doc/gsl-histogram.1 b/gsl-1.9/doc/gsl-histogram.1
new file mode 100644
index 0000000..66f9b5a
--- /dev/null
+++ b/gsl-1.9/doc/gsl-histogram.1
@@ -0,0 +1,42 @@
+.\" Man page contributed by Dirk Eddelbuettel <edd@debian.org>
+.\" and released under the GNU General Public License
+.TH GSL-HISTOGRAM 1 "" GNU
+.SH NAME
+gsl-histogram - compute histogram of data on stdin
+.SH SYNOPSYS
+.B gsl-histogram xmin xmax [n]
+.SH DESCRIPTION
+.B gsl-histogram
+is a demonstration program for the GNU Scientific Library.
+It takes three arguments, specifying the upper and lower bounds of the
+histogram and the number of bins. It then reads numbers from `stdin',
+one line at a time, and adds them to the histogram. When there is no
+more data to read it prints out the accumulated histogram using
+gsl_histogram_fprintf. If n is unspecified then bins of integer width
+are used.
+.SH EXAMPLE
+Here is an example. We generate 10000 random samples from a Cauchy
+distribution with a width of 30 and histogram them over the range -100 to
+100, using 200 bins.
+
+ gsl-randist 0 10000 cauchy 30 | gsl-histogram -100 100 200 > histogram.dat
+
+A plot of the resulting histogram will show the familiar shape of the
+Cauchy distribution with fluctuations caused by the finite sample
+size.
+
+ awk '{print $1, $3 ; print $2, $3}' histogram.dat | graph -T X
+
+.SH SEE ALSO
+.BR gsl(3) ,
+.BR gsl-randist(1) .
+
+.SH AUTHOR
+.B gsl-histogram
+was written by Brian Gough.
+Copyright 1996-2000; for copying conditions see the GNU General
+Public Licence.
+
+This manual page was added by the Dirk Eddelbuettel
+<edd@debian.org>, the Debian GNU/Linux maintainer for
+.BR GSL .
diff --git a/gsl-1.9/doc/gsl-randist.1 b/gsl-1.9/doc/gsl-randist.1
new file mode 100644
index 0000000..4a06169
--- /dev/null
+++ b/gsl-1.9/doc/gsl-randist.1
@@ -0,0 +1,38 @@
+.\" Man page contributed by Dirk Eddelbuettel <edd@debian.org>
+.\" and released under the GNU General Public License
+.TH GSL-RANDIST 1 "" GNU
+.SH NAME
+gsl-randist - generate random samples from various distributions
+.SH SYNOPSYS
+.B gsl-randist seed n DIST param1 param2 [..]
+.SH DESCRIPTION
+.B gsl-randist
+is a demonstration program for the GNU Scientific Library.
+It generates n random samples from the distribution DIST using the distribution
+parameters param1, param2, ...
+.SH EXAMPLE
+Here is an example. We generate 10000 random samples from a Cauchy
+distribution with a width of 30 and histogram them over the range -100 to
+100, using 200 bins.
+
+ gsl-randist 0 10000 cauchy 30 | gsl-histogram -100 100 200 > histogram.dat
+
+A plot of the resulting histogram will show the familiar shape of the
+Cauchy distribution with fluctuations caused by the finite sample
+size.
+
+ awk '{print $1, $3 ; print $2, $3}' histogram.dat | graph -T X
+
+.SH SEE ALSO
+.BR gsl(3) ,
+.BR gsl-histogram(1) .
+
+.SH AUTHOR
+.B gsl-randist
+was written by James Theiler and Brian Gough.
+Copyright 1996-2000; for copying conditions see the GNU General
+Public Licence.
+
+This manual page was added by the Dirk Eddelbuettel
+<edd@debian.org>, the Debian GNU/Linux maintainer for
+.BR GSL .
diff --git a/gsl-1.9/doc/gsl-ref.info b/gsl-1.9/doc/gsl-ref.info
new file mode 100644
index 0000000..0423ca6
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info
@@ -0,0 +1,596 @@
+This is gsl-ref.info, produced by makeinfo version 4.8 from
+gsl-ref.texi.
+
+INFO-DIR-SECTION Scientific software
+START-INFO-DIR-ENTRY
+* gsl-ref: (gsl-ref). GNU Scientific Library - Reference
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+2005, 2006, 2007 The GSL Team.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Free Software
+Needs Free Documentation", the Front-Cover text being "A GNU Manual",
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled "GNU Free Documentation
+License".
+
+ (a) The Back-Cover Text is: "You have freedom to copy and modify this
+GNU Manual, like GNU software."
+
+
+Indirect:
+gsl-ref.info-1: 939
+gsl-ref.info-2: 298842
+gsl-ref.info-3: 596860
+gsl-ref.info-4: 895867
+gsl-ref.info-5: 1072596
+gsl-ref.info-6: 1311271
+
+Tag Table:
+(Indirect)
+Node: Top939
+Node: Introduction3646
+Node: Routines available in GSL4298
+Node: GSL is Free Software6213
+Node: Obtaining GSL8605
+Node: No Warranty9746
+Node: Reporting Bugs10252
+Node: Further Information11136
+Node: Conventions used in this manual12149
+Node: Using the library12913
+Node: An Example Program13499
+Node: Compiling and Linking14203
+Node: Linking programs with the library15273
+Node: Linking with an alternative BLAS library16418
+Node: Shared Libraries17348
+Node: ANSI C Compliance18764
+Node: Inline functions19857
+Node: Long double20900
+Node: Portability functions22298
+Node: Alternative optimized functions23695
+Node: Support for different numeric types25153
+Node: Compatibility with C++28216
+Node: Aliasing of arrays28788
+Node: Thread-safety29539
+Node: Deprecated Functions30626
+Node: Code Reuse31251
+Node: Error Handling31895
+Node: Error Reporting32645
+Node: Error Codes34537
+Node: Error Handlers36393
+Node: Using GSL error reporting in your own functions40028
+Node: Error Reporting Examples41986
+Node: Mathematical Functions43190
+Node: Mathematical Constants43951
+Node: Infinities and Not-a-number45081
+Node: Elementary Functions46149
+Node: Small integer powers48404
+Node: Testing the Sign of Numbers49966
+Node: Testing for Odd and Even Numbers50397
+Node: Maximum and Minimum functions50953
+Node: Approximate Comparison of Floating Point Numbers53035
+Node: Complex Numbers54241
+Ref: Complex Numbers-Footnote-155549
+Node: Complex numbers55613
+Node: Properties of complex numbers57416
+Node: Complex arithmetic operators58403
+Node: Elementary Complex Functions61149
+Node: Complex Trigonometric Functions62969
+Node: Inverse Complex Trigonometric Functions64190
+Node: Complex Hyperbolic Functions66796
+Node: Inverse Complex Hyperbolic Functions68092
+Node: Complex Number References and Further Reading70080
+Node: Polynomials71476
+Node: Polynomial Evaluation72243
+Node: Divided Difference Representation of Polynomials72703
+Node: Quadratic Equations74372
+Node: Cubic Equations76312
+Node: General Polynomial Equations77683
+Node: Roots of Polynomials Examples80028
+Node: Roots of Polynomials References and Further Reading81417
+Node: Special Functions82362
+Node: Special Function Usage84356
+Node: The gsl_sf_result struct85539
+Node: Special Function Modes86803
+Node: Airy Functions and Derivatives87739
+Node: Airy Functions88435
+Node: Derivatives of Airy Functions89795
+Node: Zeros of Airy Functions91307
+Node: Zeros of Derivatives of Airy Functions92026
+Node: Bessel Functions92785
+Node: Regular Cylindrical Bessel Functions93977
+Node: Irregular Cylindrical Bessel Functions95301
+Node: Regular Modified Cylindrical Bessel Functions96757
+Node: Irregular Modified Cylindrical Bessel Functions99584
+Node: Regular Spherical Bessel Functions102552
+Node: Irregular Spherical Bessel Functions104764
+Node: Regular Modified Spherical Bessel Functions106451
+Node: Irregular Modified Spherical Bessel Functions108454
+Node: Regular Bessel Function - Fractional Order110517
+Node: Irregular Bessel Functions - Fractional Order111515
+Node: Regular Modified Bessel Functions - Fractional Order112097
+Node: Irregular Modified Bessel Functions - Fractional Order113022
+Node: Zeros of Regular Bessel Functions114258
+Node: Clausen Functions115361
+Node: Coulomb Functions115965
+Node: Normalized Hydrogenic Bound States116414
+Node: Coulomb Wave Functions117527
+Node: Coulomb Wave Function Normalization Constant120937
+Node: Coupling Coefficients121690
+Node: 3-j Symbols122413
+Node: 6-j Symbols123017
+Node: 9-j Symbols123641
+Node: Dawson Function124347
+Node: Debye Functions124914
+Node: Dilogarithm126688
+Node: Real Argument126983
+Node: Complex Argument127552
+Node: Elementary Operations128021
+Node: Elliptic Integrals128845
+Node: Definition of Legendre Forms129417
+Node: Definition of Carlson Forms130237
+Node: Legendre Form of Complete Elliptic Integrals130934
+Node: Legendre Form of Incomplete Elliptic Integrals132502
+Node: Carlson Forms134690
+Node: Elliptic Functions (Jacobi)136237
+Node: Error Functions136818
+Node: Error Function137269
+Node: Complementary Error Function137642
+Node: Log Complementary Error Function138102
+Node: Probability functions138554
+Node: Exponential Functions139807
+Node: Exponential Function140190
+Node: Relative Exponential Functions141413
+Node: Exponentiation With Error Estimate143084
+Node: Exponential Integrals144293
+Node: Exponential Integral144775
+Node: Ei(x)145425
+Node: Hyperbolic Integrals145873
+Node: Ei_3(x)146529
+Node: Trigonometric Integrals146921
+Node: Arctangent Integral147520
+Node: Fermi-Dirac Function147920
+Node: Complete Fermi-Dirac Integrals148290
+Node: Incomplete Fermi-Dirac Integrals150751
+Node: Gamma and Beta Functions151394
+Node: Gamma Functions151830
+Node: Factorials154951
+Node: Pochhammer Symbol157504
+Node: Incomplete Gamma Functions159016
+Node: Beta Functions160265
+Node: Incomplete Beta Function161017
+Node: Gegenbauer Functions161548
+Node: Hypergeometric Functions163198
+Node: Laguerre Functions167465
+Node: Lambert W Functions169028
+Node: Legendre Functions and Spherical Harmonics170066
+Node: Legendre Polynomials170655
+Node: Associated Legendre Polynomials and Spherical Harmonics172735
+Node: Conical Functions175536
+Node: Radial Functions for Hyperbolic Space177659
+Node: Logarithm and Related Functions179836
+Node: Mathieu Functions181460
+Node: Mathieu Function Workspace182809
+Node: Mathieu Function Characteristic Values183622
+Node: Angular Mathieu Functions184690
+Node: Radial Mathieu Functions185722
+Node: Power Function186960
+Node: Psi (Digamma) Function187887
+Node: Digamma Function188407
+Node: Trigamma Function189237
+Node: Polygamma Function189814
+Node: Synchrotron Functions190198
+Node: Transport Functions190961
+Node: Trigonometric Functions192108
+Node: Circular Trigonometric Functions192731
+Node: Trigonometric Functions for Complex Arguments193740
+Node: Hyperbolic Trigonometric Functions194774
+Node: Conversion Functions195377
+Node: Restriction Functions196160
+Node: Trigonometric Functions With Error Estimates197092
+Node: Zeta Functions198002
+Node: Riemann Zeta Function198460
+Node: Riemann Zeta Function Minus One199139
+Node: Hurwitz Zeta Function199910
+Node: Eta Function200415
+Node: Special Functions Examples200974
+Node: Special Functions References and Further Reading202668
+Node: Vectors and Matrices203775
+Node: Data types204534
+Node: Blocks205737
+Node: Block allocation206653
+Node: Reading and writing blocks208137
+Node: Example programs for blocks210201
+Node: Vectors210828
+Node: Vector allocation212714
+Node: Accessing vector elements214332
+Node: Initializing vector elements216574
+Node: Reading and writing vectors217268
+Node: Vector views219358
+Node: Copying vectors226800
+Node: Exchanging elements227660
+Node: Vector operations228218
+Node: Finding maximum and minimum elements of vectors229732
+Node: Vector properties231257
+Node: Example programs for vectors231880
+Node: Matrices234169
+Node: Matrix allocation237027
+Node: Accessing matrix elements238694
+Node: Initializing matrix elements240402
+Node: Reading and writing matrices241198
+Node: Matrix views243301
+Node: Creating row and column views250441
+Node: Copying matrices253612
+Node: Copying rows and columns254208
+Node: Exchanging rows and columns255885
+Node: Matrix operations257363
+Node: Finding maximum and minimum elements of matrices259003
+Node: Matrix properties260907
+Node: Example programs for matrices261655
+Node: Vector and Matrix References and Further Reading265726
+Node: Permutations266212
+Node: The Permutation struct267500
+Node: Permutation allocation268004
+Node: Accessing permutation elements269438
+Node: Permutation properties270201
+Node: Permutation functions270900
+Node: Applying Permutations272157
+Node: Reading and writing permutations274082
+Node: Permutations in cyclic form276264
+Node: Permutation Examples279689
+Node: Permutation References and Further Reading282232
+Node: Combinations282906
+Node: The Combination struct283751
+Node: Combination allocation284303
+Node: Accessing combination elements286088
+Node: Combination properties286667
+Node: Combination functions287553
+Node: Reading and writing combinations288493
+Node: Combination Examples290693
+Node: Combination References and Further Reading292001
+Node: Sorting292405
+Node: Sorting objects293355
+Node: Sorting vectors296266
+Node: Selecting the k smallest or largest elements298842
+Node: Computing the rank302176
+Node: Sorting Examples303377
+Node: Sorting References and Further Reading305021
+Node: BLAS Support305567
+Node: GSL BLAS Interface308542
+Node: Level 1 GSL BLAS Interface309029
+Node: Level 2 GSL BLAS Interface315772
+Node: Level 3 GSL BLAS Interface325066
+Node: BLAS Examples336202
+Node: BLAS References and Further Reading337623
+Node: Linear Algebra338982
+Node: LU Decomposition340164
+Node: QR Decomposition345372
+Node: QR Decomposition with Column Pivoting351174
+Node: Singular Value Decomposition355584
+Node: Cholesky Decomposition359174
+Node: Tridiagonal Decomposition of Real Symmetric Matrices361181
+Node: Tridiagonal Decomposition of Hermitian Matrices363029
+Node: Hessenberg Decomposition of Real Matrices364984
+Node: Bidiagonalization367329
+Node: Householder Transformations369739
+Node: Householder solver for linear systems371587
+Node: Tridiagonal Systems372492
+Node: Balancing375145
+Node: Linear Algebra Examples375946
+Node: Linear Algebra References and Further Reading377934
+Node: Eigensystems379424
+Node: Real Symmetric Matrices380603
+Node: Complex Hermitian Matrices382835
+Node: Real Nonsymmetric Matrices385343
+Node: Sorting Eigenvalues and Eigenvectors390537
+Node: Eigenvalue and Eigenvector Examples392404
+Node: Eigenvalue and Eigenvector References397790
+Node: Fast Fourier Transforms398498
+Node: Mathematical Definitions399707
+Node: Overview of complex data FFTs402112
+Node: Radix-2 FFT routines for complex data405055
+Node: Mixed-radix FFT routines for complex data409267
+Node: Overview of real data FFTs418596
+Node: Radix-2 FFT routines for real data421030
+Node: Mixed-radix FFT routines for real data424037
+Node: FFT References and Further Reading434617
+Node: Numerical Integration437486
+Node: Numerical Integration Introduction439031
+Node: Integrands without weight functions440965
+Node: Integrands with weight functions441794
+Node: Integrands with singular weight functions442505
+Node: QNG non-adaptive Gauss-Kronrod integration443423
+Node: QAG adaptive integration444694
+Node: QAGS adaptive integration with singularities447325
+Node: QAGP adaptive integration with known singular points449125
+Node: QAGI adaptive integration on infinite intervals450439
+Node: QAWC adaptive integration for Cauchy principal values452732
+Node: QAWS adaptive integration for singular functions453907
+Node: QAWO adaptive integration for oscillatory functions457129
+Node: QAWF adaptive integration for Fourier integrals460908
+Node: Numerical integration error codes463533
+Node: Numerical integration examples464301
+Node: Numerical integration References and Further Reading466346
+Node: Random Number Generation467075
+Node: General comments on random numbers468577
+Node: The Random Number Generator Interface470527
+Node: Random number generator initialization471885
+Node: Sampling from a random number generator473901
+Node: Auxiliary random number generator functions477066
+Node: Random number environment variables479386
+Node: Copying random number generator state481912
+Node: Reading and writing random number generator state482887
+Node: Random number generator algorithms484299
+Node: Unix random number generators494108
+Node: Other random number generators497826
+Node: Random Number Generator Performance506459
+Node: Random Number Generator Examples507777
+Node: Random Number References and Further Reading509333
+Node: Random Number Acknowledgements510630
+Node: Quasi-Random Sequences511116
+Node: Quasi-random number generator initialization512223
+Node: Sampling from a quasi-random number generator513238
+Node: Auxiliary quasi-random number generator functions513855
+Node: Saving and resorting quasi-random number generator state514801
+Node: Quasi-random number generator algorithms515609
+Node: Quasi-random number generator examples516384
+Node: Quasi-random number references517369
+Node: Random Number Distributions517895
+Node: Random Number Distribution Introduction521094
+Node: The Gaussian Distribution522889
+Node: The Gaussian Tail Distribution525551
+Node: The Bivariate Gaussian Distribution527220
+Node: The Exponential Distribution528543
+Node: The Laplace Distribution529682
+Node: The Exponential Power Distribution530779
+Node: The Cauchy Distribution532047
+Node: The Rayleigh Distribution533296
+Node: The Rayleigh Tail Distribution534468
+Node: The Landau Distribution535340
+Node: The Levy alpha-Stable Distributions536295
+Node: The Levy skew alpha-Stable Distribution537353
+Node: The Gamma Distribution538965
+Node: The Flat (Uniform) Distribution540622
+Node: The Lognormal Distribution541774
+Node: The Chi-squared Distribution543122
+Node: The F-distribution544526
+Node: The t-distribution546162
+Node: The Beta Distribution547556
+Node: The Logistic Distribution548715
+Node: The Pareto Distribution549844
+Node: Spherical Vector Distributions551014
+Node: The Weibull Distribution553848
+Node: The Type-1 Gumbel Distribution555042
+Node: The Type-2 Gumbel Distribution556279
+Node: The Dirichlet Distribution557510
+Node: General Discrete Distributions559178
+Node: The Poisson Distribution563043
+Node: The Bernoulli Distribution564051
+Node: The Binomial Distribution564802
+Node: The Multinomial Distribution566007
+Node: The Negative Binomial Distribution567776
+Node: The Pascal Distribution569141
+Node: The Geometric Distribution570299
+Node: The Hypergeometric Distribution571547
+Node: The Logarithmic Distribution573200
+Node: Shuffling and Sampling573991
+Node: Random Number Distribution Examples576810
+Node: Random Number Distribution References and Further Reading580006
+Node: Statistics582072
+Node: Mean and standard deviation and variance583351
+Node: Absolute deviation586396
+Node: Higher moments (skewness and kurtosis)587688
+Node: Autocorrelation589821
+Node: Covariance590635
+Node: Weighted Samples591616
+Node: Maximum and Minimum values596860
+Node: Median and Percentiles599599
+Node: Example statistical programs602014
+Node: Statistics References and Further Reading604673
+Node: Histograms605881
+Node: The histogram struct607641
+Node: Histogram allocation609444
+Node: Copying Histograms612405
+Node: Updating and accessing histogram elements613081
+Node: Searching histogram ranges616348
+Node: Histogram Statistics617347
+Node: Histogram Operations619207
+Node: Reading and writing histograms621279
+Node: Resampling from histograms624321
+Node: The histogram probability distribution struct625119
+Node: Example programs for histograms628150
+Node: Two dimensional histograms630213
+Node: The 2D histogram struct630934
+Node: 2D Histogram allocation632742
+Node: Copying 2D Histograms634813
+Node: Updating and accessing 2D histogram elements635518
+Node: Searching 2D histogram ranges639173
+Node: 2D Histogram Statistics640192
+Node: 2D Histogram Operations643051
+Node: Reading and writing 2D histograms645225
+Node: Resampling from 2D histograms648852
+Node: Example programs for 2D histograms651871
+Node: N-tuples653699
+Node: The ntuple struct654955
+Node: Creating ntuples655433
+Node: Opening an existing ntuple file656100
+Node: Writing ntuples656728
+Node: Reading ntuples657189
+Node: Closing an ntuple file657520
+Node: Histogramming ntuple values657860
+Node: Example ntuple programs659866
+Node: Ntuple References and Further Reading663195
+Node: Monte Carlo Integration663516
+Node: Monte Carlo Interface664761
+Node: PLAIN Monte Carlo667384
+Node: MISER669822
+Node: VEGAS675660
+Node: Monte Carlo Examples683995
+Node: Monte Carlo Integration References and Further Reading689938
+Node: Simulated Annealing690720
+Node: Simulated Annealing algorithm691927
+Node: Simulated Annealing functions693081
+Node: Examples with Simulated Annealing697607
+Node: Trivial example698161
+Node: Traveling Salesman Problem700812
+Node: Simulated Annealing References and Further Reading704125
+Node: Ordinary Differential Equations704536
+Node: Defining the ODE System705357
+Node: Stepping Functions707549
+Node: Adaptive Step-size Control711728
+Node: Evolution717186
+Node: ODE Example programs719864
+Node: ODE References and Further Reading724934
+Node: Interpolation725573
+Node: Introduction to Interpolation726586
+Node: Interpolation Functions727027
+Node: Interpolation Types728203
+Node: Index Look-up and Acceleration730813
+Node: Evaluation of Interpolating Functions732443
+Node: Higher-level Interface734827
+Node: Interpolation Example programs736866
+Node: Interpolation References and Further Reading740113
+Node: Numerical Differentiation740686
+Node: Numerical Differentiation functions741275
+Node: Numerical Differentiation Examples744133
+Node: Numerical Differentiation References745546
+Node: Chebyshev Approximations746097
+Node: Chebyshev Definitions747113
+Node: Creation and Calculation of Chebyshev Series747903
+Node: Chebyshev Series Evaluation748875
+Node: Derivatives and Integrals750259
+Node: Chebyshev Approximation examples751501
+Node: Chebyshev Approximation References and Further Reading752997
+Node: Series Acceleration753446
+Node: Acceleration functions754211
+Node: Acceleration functions without error estimation756536
+Node: Example of accelerating a series759146
+Node: Series Acceleration References761492
+Node: Wavelet Transforms762380
+Node: DWT Definitions762921
+Node: DWT Initialization763873
+Node: DWT Transform Functions766452
+Node: DWT in one dimension766987
+Node: DWT in two dimension769006
+Node: DWT Examples773607
+Node: DWT References775424
+Node: Discrete Hankel Transforms777587
+Node: Discrete Hankel Transform Definition778055
+Node: Discrete Hankel Transform Functions780194
+Node: Discrete Hankel Transform References781725
+Node: One dimensional Root-Finding782129
+Node: Root Finding Overview783389
+Node: Root Finding Caveats785247
+Node: Initializing the Solver787014
+Node: Providing the function to solve789647
+Node: Search Bounds and Guesses793413
+Node: Root Finding Iteration794274
+Node: Search Stopping Parameters796123
+Node: Root Bracketing Algorithms798637
+Node: Root Finding Algorithms using Derivatives801935
+Node: Root Finding Examples805438
+Node: Root Finding References and Further Reading812726
+Node: One dimensional Minimization813365
+Node: Minimization Overview814667
+Node: Minimization Caveats816373
+Node: Initializing the Minimizer817710
+Node: Providing the function to minimize819951
+Node: Minimization Iteration820429
+Node: Minimization Stopping Parameters822565
+Node: Minimization Algorithms824174
+Node: Minimization Examples826613
+Node: Minimization References and Further Reading829557
+Node: Multidimensional Root-Finding830013
+Node: Overview of Multidimensional Root Finding831502
+Node: Initializing the Multidimensional Solver833689
+Node: Providing the multidimensional system of equations to solve836887
+Node: Iteration of the multidimensional solver841792
+Node: Search Stopping Parameters for the multidimensional solver843977
+Node: Algorithms using Derivatives845714
+Node: Algorithms without Derivatives850460
+Node: Example programs for Multidimensional Root finding853548
+Node: References and Further Reading for Multidimensional Root Finding862161
+Node: Multidimensional Minimization863400
+Node: Multimin Overview864692
+Node: Multimin Caveats866664
+Node: Initializing the Multidimensional Minimizer867413
+Node: Providing a function to minimize870574
+Node: Multimin Iteration874239
+Node: Multimin Stopping Criteria876230
+Node: Multimin Algorithms877782
+Node: Multimin Examples882741
+Node: Multimin References and Further Reading889358
+Node: Least-Squares Fitting890221
+Node: Fitting Overview891220
+Node: Linear regression893436
+Node: Linear fitting without a constant term895867
+Node: Multi-parameter fitting898058
+Node: Fitting Examples902963
+Node: Fitting References and Further Reading909788
+Node: Nonlinear Least-Squares Fitting910610
+Node: Overview of Nonlinear Least-Squares Fitting912060
+Node: Initializing the Nonlinear Least-Squares Solver913527
+Node: Providing the Function to be Minimized916380
+Node: Iteration of the Minimization Algorithm919317
+Node: Search Stopping Parameters for Minimization Algorithms921167
+Node: Minimization Algorithms using Derivatives923262
+Node: Minimization Algorithms without Derivatives926510
+Node: Computing the covariance matrix of best fit parameters926902
+Node: Example programs for Nonlinear Least-Squares Fitting928936
+Node: References and Further Reading for Nonlinear Least-Squares Fitting936664
+Node: Basis Splines937400
+Node: Overview of B-splines937975
+Node: Initializing the B-splines solver939260
+Node: Constructing the knots vector940003
+Node: Evaluation of B-spline basis functions940790
+Node: Example programs for B-splines941523
+Node: References and Further Reading945220
+Node: Physical Constants945734
+Node: Fundamental Constants947144
+Node: Astronomy and Astrophysics948283
+Node: Atomic and Nuclear Physics948948
+Node: Measurement of Time950585
+Node: Imperial Units951015
+Node: Speed and Nautical Units951457
+Node: Printers Units951961
+Node: Volume Area and Length952284
+Node: Mass and Weight952970
+Node: Thermal Energy and Power953789
+Node: Pressure954212
+Node: Viscosity954825
+Node: Light and Illumination955101
+Node: Radioactivity955693
+Node: Force and Energy956028
+Node: Prefixes956432
+Node: Physical Constant Examples957175
+Node: Physical Constant References and Further Reading958964
+Node: IEEE floating-point arithmetic959675
+Node: Representation of floating point numbers960261
+Node: Setting up your IEEE environment964742
+Node: IEEE References and Further Reading971351
+Node: Debugging Numerical Programs972506
+Node: Using gdb972990
+Node: Examining floating point registers976333
+Node: Handling floating point exceptions977618
+Node: GCC warning options for numerical programs979030
+Node: Debugging References983223
+Node: Contributors to GSL983935
+Node: Autoconf Macros988118
+Node: GSL CBLAS Library992103
+Node: Level 1 CBLAS Functions992630
+Node: Level 2 CBLAS Functions997932
+Node: Level 3 CBLAS Functions1014602
+Node: GSL CBLAS Examples1024264
+Node: Free Software Needs Free Documentation1025826
+Node: GNU General Public License1030895
+Node: GNU Free Documentation License1050165
+Node: Function Index1072596
+Node: Variable Index1306453
+Node: Type Index1307625
+Node: Concept Index1311271
+
+End Tag Table
diff --git a/gsl-1.9/doc/gsl-ref.info-1 b/gsl-1.9/doc/gsl-ref.info-1
new file mode 100644
index 0000000..2d4e483
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info-1
@@ -0,0 +1,7392 @@
+This is gsl-ref.info, produced by makeinfo version 4.8 from
+gsl-ref.texi.
+
+INFO-DIR-SECTION Scientific software
+START-INFO-DIR-ENTRY
+* gsl-ref: (gsl-ref). GNU Scientific Library - Reference
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+2005, 2006, 2007 The GSL Team.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Free Software
+Needs Free Documentation", the Front-Cover text being "A GNU Manual",
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled "GNU Free Documentation
+License".
+
+ (a) The Back-Cover Text is: "You have freedom to copy and modify this
+GNU Manual, like GNU software."
+
+
+File: gsl-ref.info, Node: Top, Next: Introduction, Prev: (dir), Up: (dir)
+
+GSL
+***
+
+This file documents the GNU Scientific Library (GSL), a collection of
+numerical routines for scientific computing. It corresponds to release
+1.9 of the library. Please report any errors in this manual to
+<bug-gsl@gnu.org>.
+
+ More information about GSL can be found at the project homepage,
+`http://www.gnu.org/software/gsl/'.
+
+ Printed copies of this manual can be purchased from Network Theory
+Ltd at `http://www.network-theory.co.uk/gsl/manual/'. The money raised
+from sales of the manual helps support the development of GSL.
+
+ A Japanese translation of this manual is available from the GSL
+project homepage thanks to Daisuke Tominaga.
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+2005, 2006, 2007 The GSL Team.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Free Software
+Needs Free Documentation", the Front-Cover text being "A GNU Manual",
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled "GNU Free Documentation
+License".
+
+ (a) The Back-Cover Text is: "You have freedom to copy and modify this
+GNU Manual, like GNU software."
+
+
+* Menu:
+
+* Introduction::
+* Using the library::
+* Error Handling::
+* Mathematical Functions::
+* Complex Numbers::
+* Polynomials::
+* Special Functions::
+* Vectors and Matrices::
+* Permutations::
+* Combinations::
+* Sorting::
+* BLAS Support::
+* Linear Algebra::
+* Eigensystems::
+* Fast Fourier Transforms::
+* Numerical Integration::
+* Random Number Generation::
+* Quasi-Random Sequences::
+* Random Number Distributions::
+* Statistics::
+* Histograms::
+* N-tuples::
+* Monte Carlo Integration::
+* Simulated Annealing::
+* Ordinary Differential Equations::
+* Interpolation::
+* Numerical Differentiation::
+* Chebyshev Approximations::
+* Series Acceleration::
+* Wavelet Transforms::
+* Discrete Hankel Transforms::
+* One dimensional Root-Finding::
+* One dimensional Minimization::
+* Multidimensional Root-Finding::
+* Multidimensional Minimization::
+* Least-Squares Fitting::
+* Nonlinear Least-Squares Fitting::
+* Basis Splines::
+* Physical Constants::
+* IEEE floating-point arithmetic::
+* Debugging Numerical Programs::
+* Contributors to GSL::
+* Autoconf Macros::
+* GSL CBLAS Library::
+* Free Software Needs Free Documentation::
+* GNU General Public License::
+* GNU Free Documentation License::
+* Function Index::
+* Variable Index::
+* Type Index::
+* Concept Index::
+
+
+File: gsl-ref.info, Node: Introduction, Next: Using the library, Prev: Top, Up: Top
+
+1 Introduction
+**************
+
+The GNU Scientific Library (GSL) is a collection of routines for
+numerical computing. The routines have been written from scratch in C,
+and present a modern Applications Programming Interface (API) for C
+programmers, allowing wrappers to be written for very high level
+languages. The source code is distributed under the GNU General Public
+License.
+
+* Menu:
+
+* Routines available in GSL::
+* GSL is Free Software::
+* Obtaining GSL::
+* No Warranty::
+* Reporting Bugs::
+* Further Information::
+* Conventions used in this manual::
+
+
+File: gsl-ref.info, Node: Routines available in GSL, Next: GSL is Free Software, Up: Introduction
+
+1.1 Routines available in GSL
+=============================
+
+The library covers a wide range of topics in numerical computing.
+Routines are available for the following areas,
+
+ Complex Numbers Roots of Polynomials
+ Special Functions Vectors and Matrices
+ Permutations Combinations
+ Sorting BLAS Support
+ Linear Algebra CBLAS Library
+ Fast Fourier Transforms Eigensystems
+ Random Numbers Quadrature
+ Random Distributions Quasi-Random Sequences
+ Histograms Statistics
+ Monte Carlo Integration N-Tuples
+ Differential Equations Simulated Annealing
+ Numerical Differentiation Interpolation
+ Series Acceleration Chebyshev Approximations
+ Root-Finding Discrete Hankel Transforms
+ Least-Squares Fitting Minimization
+ IEEE Floating-Point Physical Constants
+ Wavelets
+
+The use of these routines is described in this manual. Each chapter
+provides detailed definitions of the functions, followed by example
+programs and references to the articles on which the algorithms are
+based.
+
+ Where possible the routines have been based on reliable public-domain
+packages such as FFTPACK and QUADPACK, which the developers of GSL have
+reimplemented in C with modern coding conventions.
+
+
+File: gsl-ref.info, Node: GSL is Free Software, Next: Obtaining GSL, Prev: Routines available in GSL, Up: Introduction
+
+1.2 GSL is Free Software
+========================
+
+The subroutines in the GNU Scientific Library are "free software"; this
+means that everyone is free to use them, and to redistribute them in
+other free programs. The library is not in the public domain; it is
+copyrighted and there are conditions on its distribution. These
+conditions are designed to permit everything that a good cooperating
+citizen would want to do. What is not allowed is to try to prevent
+others from further sharing any version of the software that they might
+get from you.
+
+ Specifically, we want to make sure that you have the right to share
+copies of programs that you are given which use the GNU Scientific
+Library, that you receive their source code or else can get it if you
+want it, that you can change these programs or use pieces of them in new
+free programs, and that you know you can do these things.
+
+ To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of any code which uses the GNU Scientific Library, you must give
+the recipients all the rights that you have received. You must make
+sure that they, too, receive or can get the source code, both to the
+library and the code which uses it. And you must tell them their
+rights. This means that the library should not be redistributed in
+proprietary programs.
+
+ Also, for our own protection, we must make certain that everyone
+finds out that there is no warranty for the GNU Scientific Library. If
+these programs are modified by someone else and passed on, we want their
+recipients to know that what they have is not what we distributed, so
+that any problems introduced by others will not reflect on our
+reputation.
+
+ The precise conditions for the distribution of software related to
+the GNU Scientific Library are found in the GNU General Public License
+(*note GNU General Public License::). Further information about this
+license is available from the GNU Project webpage `Frequently Asked
+Questions about the GNU GPL',
+
+ `http://www.gnu.org/copyleft/gpl-faq.html'
+
+The Free Software Foundation also operates a license consulting service
+for commercial users (contact details available from
+`http://www.fsf.org/').
+
+
+File: gsl-ref.info, Node: Obtaining GSL, Next: No Warranty, Prev: GSL is Free Software, Up: Introduction
+
+1.3 Obtaining GSL
+=================
+
+The source code for the library can be obtained in different ways, by
+copying it from a friend, purchasing it on CDROM or downloading it from
+the internet. A list of public ftp servers which carry the source code
+can be found on the GNU website,
+
+ `http://www.gnu.org/software/gsl/'
+
+The preferred platform for the library is a GNU system, which allows it
+to take advantage of additional features in the GNU C compiler and GNU C
+library. However, the library is fully portable and should compile on
+most systems with a C compiler. Precompiled versions of the library
+can be purchased from commercial redistributors listed on the website
+above.
+
+ Announcements of new releases, updates and other relevant events are
+made on the `info-gsl@gnu.org' mailing list. To subscribe to this
+low-volume list, send an email of the following form:
+
+ To: info-gsl-request@gnu.org
+ Subject: subscribe
+
+You will receive a response asking you to reply in order to confirm
+your subscription.
+
+
+File: gsl-ref.info, Node: No Warranty, Next: Reporting Bugs, Prev: Obtaining GSL, Up: Introduction
+
+1.4 No Warranty
+===============
+
+The software described in this manual has no warranty, it is provided
+"as is". It is your responsibility to validate the behavior of the
+routines and their accuracy using the source code provided, or to
+purchase support and warranties from commercial redistributors. Consult
+the GNU General Public license for further details (*note GNU General
+Public License::).
+
+
+File: gsl-ref.info, Node: Reporting Bugs, Next: Further Information, Prev: No Warranty, Up: Introduction
+
+1.5 Reporting Bugs
+==================
+
+A list of known bugs can be found in the `BUGS' file included in the
+GSL distribution. Details of compilation problems can be found in the
+`INSTALL' file.
+
+ If you find a bug which is not listed in these files, please report
+it to <bug-gsl@gnu.org>.
+
+ All bug reports should include:
+
+ * The version number of GSL
+
+ * The hardware and operating system
+
+ * The compiler used, including version number and compilation options
+
+ * A description of the bug behavior
+
+ * A short program which exercises the bug
+
+It is useful if you can check whether the same problem occurs when the
+library is compiled without optimization. Thank you.
+
+ Any errors or omissions in this manual can also be reported to the
+same address.
+
+
+File: gsl-ref.info, Node: Further Information, Next: Conventions used in this manual, Prev: Reporting Bugs, Up: Introduction
+
+1.6 Further Information
+=======================
+
+Additional information, including online copies of this manual, links to
+related projects, and mailing list archives are available from the
+website mentioned above.
+
+ Any questions about the use and installation of the library can be
+asked on the mailing list `help-gsl@gnu.org'. To subscribe to this
+list, send an email of the following form:
+
+ To: help-gsl-request@gnu.org
+ Subject: subscribe
+
+This mailing list can be used to ask questions not covered by this
+manual, and to contact the developers of the library.
+
+ If you would like to refer to the GNU Scientific Library in a journal
+article, the recommended way is to cite this reference manual, e.g. `M.
+Galassi et al, GNU Scientific Library Reference Manual (2nd Ed.), ISBN
+0954161734'.
+
+ If you want to give a url, use "`http://www.gnu.org/software/gsl/'".
+
+
+File: gsl-ref.info, Node: Conventions used in this manual, Prev: Further Information, Up: Introduction
+
+1.7 Conventions used in this manual
+===================================
+
+This manual contains many examples which can be typed at the keyboard.
+A command entered at the terminal is shown like this,
+
+ $ command
+
+The first character on the line is the terminal prompt, and should not
+be typed. The dollar sign `$' is used as the standard prompt in this
+manual, although some systems may use a different character.
+
+ The examples assume the use of the GNU operating system. There may
+be minor differences in the output on other systems. The commands for
+setting environment variables use the Bourne shell syntax of the
+standard GNU shell (`bash').
+
+
+File: gsl-ref.info, Node: Using the library, Next: Error Handling, Prev: Introduction, Up: Top
+
+2 Using the library
+*******************
+
+This chapter describes how to compile programs that use GSL, and
+introduces its conventions.
+
+* Menu:
+
+* An Example Program::
+* Compiling and Linking::
+* Shared Libraries::
+* ANSI C Compliance::
+* Inline functions::
+* Long double::
+* Portability functions::
+* Alternative optimized functions::
+* Support for different numeric types::
+* Compatibility with C++::
+* Aliasing of arrays::
+* Thread-safety::
+* Deprecated Functions::
+* Code Reuse::
+
+
+File: gsl-ref.info, Node: An Example Program, Next: Compiling and Linking, Up: Using the library
+
+2.1 An Example Program
+======================
+
+The following short program demonstrates the use of the library by
+computing the value of the Bessel function J_0(x) for x=5,
+
+ #include <stdio.h>
+ #include <gsl/gsl_sf_bessel.h>
+
+ int
+ main (void)
+ {
+ double x = 5.0;
+ double y = gsl_sf_bessel_J0 (x);
+ printf ("J0(%g) = %.18e\n", x, y);
+ return 0;
+ }
+
+The output is shown below, and should be correct to double-precision
+accuracy,
+
+ J0(5) = -1.775967713143382920e-01
+
+The steps needed to compile this program are described in the following
+sections.
+
+
+File: gsl-ref.info, Node: Compiling and Linking, Next: Shared Libraries, Prev: An Example Program, Up: Using the library
+
+2.2 Compiling and Linking
+=========================
+
+The library header files are installed in their own `gsl' directory.
+You should write any preprocessor include statements with a `gsl/'
+directory prefix thus,
+
+ #include <gsl/gsl_math.h>
+
+If the directory is not installed on the standard search path of your
+compiler you will also need to provide its location to the preprocessor
+as a command line flag. The default location of the `gsl' directory is
+`/usr/local/include/gsl'. A typical compilation command for a source
+file `example.c' with the GNU C compiler `gcc' is,
+
+ $ gcc -Wall -I/usr/local/include -c example.c
+
+This results in an object file `example.o'. The default include path
+for `gcc' searches `/usr/local/include' automatically so the `-I'
+option can actually be omitted when GSL is installed in its default
+location.
+
+* Menu:
+
+* Linking programs with the library::
+* Linking with an alternative BLAS library::
+
+
+File: gsl-ref.info, Node: Linking programs with the library, Next: Linking with an alternative BLAS library, Up: Compiling and Linking
+
+2.2.1 Linking programs with the library
+---------------------------------------
+
+The library is installed as a single file, `libgsl.a'. A shared
+version of the library `libgsl.so' is also installed on systems that
+support shared libraries. The default location of these files is
+`/usr/local/lib'. If this directory is not on the standard search path
+of your linker you will also need to provide its location as a command
+line flag.
+
+ To link against the library you need to specify both the main
+library and a supporting CBLAS library, which provides standard basic
+linear algebra subroutines. A suitable CBLAS implementation is
+provided in the library `libgslcblas.a' if your system does not provide
+one. The following example shows how to link an application with the
+library,
+
+ $ gcc -L/usr/local/lib example.o -lgsl -lgslcblas -lm
+
+The default library path for `gcc' searches `/usr/local/lib'
+automatically so the `-L' option can be omitted when GSL is installed
+in its default location.
+
+
+File: gsl-ref.info, Node: Linking with an alternative BLAS library, Prev: Linking programs with the library, Up: Compiling and Linking
+
+2.2.2 Linking with an alternative BLAS library
+----------------------------------------------
+
+The following command line shows how you would link the same application
+with an alternative CBLAS library called `libcblas',
+
+ $ gcc example.o -lgsl -lcblas -lm
+
+For the best performance an optimized platform-specific CBLAS library
+should be used for `-lcblas'. The library must conform to the CBLAS
+standard. The ATLAS package provides a portable high-performance BLAS
+library with a CBLAS interface. It is free software and should be
+installed for any work requiring fast vector and matrix operations.
+The following command line will link with the ATLAS library and its
+CBLAS interface,
+
+ $ gcc example.o -lgsl -lcblas -latlas -lm
+
+For more information see *Note BLAS Support::.
+
+
+File: gsl-ref.info, Node: Shared Libraries, Next: ANSI C Compliance, Prev: Compiling and Linking, Up: Using the library
+
+2.3 Shared Libraries
+====================
+
+To run a program linked with the shared version of the library the
+operating system must be able to locate the corresponding `.so' file at
+runtime. If the library cannot be found, the following error will
+occur:
+
+ $ ./a.out
+ ./a.out: error while loading shared libraries:
+ libgsl.so.0: cannot open shared object file: No such
+ file or directory
+
+To avoid this error, define the shell variable `LD_LIBRARY_PATH' to
+include the directory where the library is installed.
+
+ For example, in the Bourne shell (`/bin/sh' or `/bin/bash'), the
+library search path can be set with the following commands:
+
+ $ LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
+ $ export LD_LIBRARY_PATH
+ $ ./example
+
+In the C-shell (`/bin/csh' or `/bin/tcsh') the equivalent command is,
+
+ % setenv LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH
+
+The standard prompt for the C-shell in the example above is the percent
+character `%', and should not be typed as part of the command.
+
+ To save retyping these commands each session they should be placed
+in an individual or system-wide login file.
+
+ To compile a statically linked version of the program, use the
+`-static' flag in `gcc',
+
+ $ gcc -static example.o -lgsl -lgslcblas -lm
+
+
+File: gsl-ref.info, Node: ANSI C Compliance, Next: Inline functions, Prev: Shared Libraries, Up: Using the library
+
+2.4 ANSI C Compliance
+=====================
+
+The library is written in ANSI C and is intended to conform to the ANSI
+C standard (C89). It should be portable to any system with a working
+ANSI C compiler.
+
+ The library does not rely on any non-ANSI extensions in the
+interface it exports to the user. Programs you write using GSL can be
+ANSI compliant. Extensions which can be used in a way compatible with
+pure ANSI C are supported, however, via conditional compilation. This
+allows the library to take advantage of compiler extensions on those
+platforms which support them.
+
+ When an ANSI C feature is known to be broken on a particular system
+the library will exclude any related functions at compile-time. This
+should make it impossible to link a program that would use these
+functions and give incorrect results.
+
+ To avoid namespace conflicts all exported function names and
+variables have the prefix `gsl_', while exported macros have the prefix
+`GSL_'.
+
+
+File: gsl-ref.info, Node: Inline functions, Next: Long double, Prev: ANSI C Compliance, Up: Using the library
+
+2.5 Inline functions
+====================
+
+The `inline' keyword is not part of the original ANSI C standard (C89)
+and the library does not export any inline function definitions by
+default. However, the library provides optional inline versions of
+performance-critical functions by conditional compilation. The inline
+versions of these functions can be included by defining the macro
+`HAVE_INLINE' when compiling an application,
+
+ $ gcc -Wall -c -DHAVE_INLINE example.c
+
+If you use `autoconf' this macro can be defined automatically. If you
+do not define the macro `HAVE_INLINE' then the slower non-inlined
+versions of the functions will be used instead.
+
+ Note that the actual usage of the inline keyword is `extern inline',
+which eliminates unnecessary function definitions in GCC. If the form
+`extern inline' causes problems with other compilers a stricter
+autoconf test can be used, see *Note Autoconf Macros::.
+
+
+File: gsl-ref.info, Node: Long double, Next: Portability functions, Prev: Inline functions, Up: Using the library
+
+2.6 Long double
+===============
+
+The extended numerical type `long double' is part of the ANSI C
+standard and should be available in every modern compiler. However, the
+precision of `long double' is platform dependent, and this should be
+considered when using it. The IEEE standard only specifies the minimum
+precision of extended precision numbers, while the precision of
+`double' is the same on all platforms.
+
+ In some system libraries the `stdio.h' formatted input/output
+functions `printf' and `scanf' are not implemented correctly for `long
+double'. Undefined or incorrect results are avoided by testing these
+functions during the `configure' stage of library compilation and
+eliminating certain GSL functions which depend on them if necessary.
+The corresponding line in the `configure' output looks like this,
+
+ checking whether printf works with long double... no
+
+Consequently when `long double' formatted input/output does not work on
+a given system it should be impossible to link a program which uses GSL
+functions dependent on this.
+
+ If it is necessary to work on a system which does not support
+formatted `long double' input/output then the options are to use binary
+formats or to convert `long double' results into `double' for reading
+and writing.
+
+
+File: gsl-ref.info, Node: Portability functions, Next: Alternative optimized functions, Prev: Long double, Up: Using the library
+
+2.7 Portability functions
+=========================
+
+To help in writing portable applications GSL provides some
+implementations of functions that are found in other libraries, such as
+the BSD math library. You can write your application to use the native
+versions of these functions, and substitute the GSL versions via a
+preprocessor macro if they are unavailable on another platform.
+
+ For example, after determining whether the BSD function `hypot' is
+available you can include the following macro definitions in a file
+`config.h' with your application,
+
+ /* Substitute gsl_hypot for missing system hypot */
+
+ #ifndef HAVE_HYPOT
+ #define hypot gsl_hypot
+ #endif
+
+The application source files can then use the include command `#include
+<config.h>' to replace each occurrence of `hypot' by `gsl_hypot' when
+`hypot' is not available. This substitution can be made automatically
+if you use `autoconf', see *Note Autoconf Macros::.
+
+ In most circumstances the best strategy is to use the native
+versions of these functions when available, and fall back to GSL
+versions otherwise, since this allows your application to take
+advantage of any platform-specific optimizations in the system library.
+This is the strategy used within GSL itself.
+
+
+File: gsl-ref.info, Node: Alternative optimized functions, Next: Support for different numeric types, Prev: Portability functions, Up: Using the library
+
+2.8 Alternative optimized functions
+===================================
+
+The main implementation of some functions in the library will not be
+optimal on all architectures. For example, there are several ways to
+compute a Gaussian random variate and their relative speeds are
+platform-dependent. In cases like this the library provides alternative
+implementations of these functions with the same interface. If you
+write your application using calls to the standard implementation you
+can select an alternative version later via a preprocessor definition.
+It is also possible to introduce your own optimized functions this way
+while retaining portability. The following lines demonstrate the use of
+a platform-dependent choice of methods for sampling from the Gaussian
+distribution,
+
+ #ifdef SPARC
+ #define gsl_ran_gaussian gsl_ran_gaussian_ratio_method
+ #endif
+ #ifdef INTEL
+ #define gsl_ran_gaussian my_gaussian
+ #endif
+
+These lines would be placed in the configuration header file `config.h'
+of the application, which should then be included by all the source
+files. Note that the alternative implementations will not produce
+bit-for-bit identical results, and in the case of random number
+distributions will produce an entirely different stream of random
+variates.
+
+
+File: gsl-ref.info, Node: Support for different numeric types, Next: Compatibility with C++, Prev: Alternative optimized functions, Up: Using the library
+
+2.9 Support for different numeric types
+=======================================
+
+Many functions in the library are defined for different numeric types.
+This feature is implemented by varying the name of the function with a
+type-related modifier--a primitive form of C++ templates. The modifier
+is inserted into the function name after the initial module prefix.
+The following table shows the function names defined for all the
+numeric types of an imaginary module `gsl_foo' with function `fn',
+
+ gsl_foo_fn double
+ gsl_foo_long_double_fn long double
+ gsl_foo_float_fn float
+ gsl_foo_long_fn long
+ gsl_foo_ulong_fn unsigned long
+ gsl_foo_int_fn int
+ gsl_foo_uint_fn unsigned int
+ gsl_foo_short_fn short
+ gsl_foo_ushort_fn unsigned short
+ gsl_foo_char_fn char
+ gsl_foo_uchar_fn unsigned char
+
+The normal numeric precision `double' is considered the default and
+does not require a suffix. For example, the function `gsl_stats_mean'
+computes the mean of double precision numbers, while the function
+`gsl_stats_int_mean' computes the mean of integers.
+
+ A corresponding scheme is used for library defined types, such as
+`gsl_vector' and `gsl_matrix'. In this case the modifier is appended
+to the type name. For example, if a module defines a new
+type-dependent struct or typedef `gsl_foo' it is modified for other
+types in the following way,
+
+ gsl_foo double
+ gsl_foo_long_double long double
+ gsl_foo_float float
+ gsl_foo_long long
+ gsl_foo_ulong unsigned long
+ gsl_foo_int int
+ gsl_foo_uint unsigned int
+ gsl_foo_short short
+ gsl_foo_ushort unsigned short
+ gsl_foo_char char
+ gsl_foo_uchar unsigned char
+
+When a module contains type-dependent definitions the library provides
+individual header files for each type. The filenames are modified as
+shown in the below. For convenience the default header includes the
+definitions for all the types. To include only the double precision
+header file, or any other specific type, use its individual filename.
+
+ #include <gsl/gsl_foo.h> All types
+ #include <gsl/gsl_foo_double.h> double
+ #include <gsl/gsl_foo_long_double.h> long double
+ #include <gsl/gsl_foo_float.h> float
+ #include <gsl/gsl_foo_long.h> long
+ #include <gsl/gsl_foo_ulong.h> unsigned long
+ #include <gsl/gsl_foo_int.h> int
+ #include <gsl/gsl_foo_uint.h> unsigned int
+ #include <gsl/gsl_foo_short.h> short
+ #include <gsl/gsl_foo_ushort.h> unsigned short
+ #include <gsl/gsl_foo_char.h> char
+ #include <gsl/gsl_foo_uchar.h> unsigned char
+
+
+File: gsl-ref.info, Node: Compatibility with C++, Next: Aliasing of arrays, Prev: Support for different numeric types, Up: Using the library
+
+2.10 Compatibility with C++
+===========================
+
+The library header files automatically define functions to have `extern
+"C"' linkage when included in C++ programs. This allows the functions
+to be called directly from C++.
+
+ To use C++ exception handling within user-defined functions passed to
+the library as parameters, the library must be built with the
+additional `CFLAGS' compilation option `-fexceptions'.
+
+
+File: gsl-ref.info, Node: Aliasing of arrays, Next: Thread-safety, Prev: Compatibility with C++, Up: Using the library
+
+2.11 Aliasing of arrays
+=======================
+
+The library assumes that arrays, vectors and matrices passed as
+modifiable arguments are not aliased and do not overlap with each other.
+This removes the need for the library to handle overlapping memory
+regions as a special case, and allows additional optimizations to be
+used. If overlapping memory regions are passed as modifiable arguments
+then the results of such functions will be undefined. If the arguments
+will not be modified (for example, if a function prototype declares them
+as `const' arguments) then overlapping or aliased memory regions can be
+safely used.
+
+
+File: gsl-ref.info, Node: Thread-safety, Next: Deprecated Functions, Prev: Aliasing of arrays, Up: Using the library
+
+2.12 Thread-safety
+==================
+
+The library can be used in multi-threaded programs. All the functions
+are thread-safe, in the sense that they do not use static variables.
+Memory is always associated with objects and not with functions. For
+functions which use "workspace" objects as temporary storage the
+workspaces should be allocated on a per-thread basis. For functions
+which use "table" objects as read-only memory the tables can be used by
+multiple threads simultaneously. Table arguments are always declared
+`const' in function prototypes, to indicate that they may be safely
+accessed by different threads.
+
+ There are a small number of static global variables which are used to
+control the overall behavior of the library (e.g. whether to use
+range-checking, the function to call on fatal error, etc). These
+variables are set directly by the user, so they should be initialized
+once at program startup and not modified by different threads.
+
+
+File: gsl-ref.info, Node: Deprecated Functions, Next: Code Reuse, Prev: Thread-safety, Up: Using the library
+
+2.13 Deprecated Functions
+=========================
+
+From time to time, it may be necessary for the definitions of some
+functions to be altered or removed from the library. In these
+circumstances the functions will first be declared "deprecated" and
+then removed from subsequent versions of the library. Functions that
+are deprecated can be disabled in the current release by setting the
+preprocessor definition `GSL_DISABLE_DEPRECATED'. This allows existing
+code to be tested for forwards compatibility.
+
+
+File: gsl-ref.info, Node: Code Reuse, Prev: Deprecated Functions, Up: Using the library
+
+2.14 Code Reuse
+===============
+
+Where possible the routines in the library have been written to avoid
+dependencies between modules and files. This should make it possible to
+extract individual functions for use in your own applications, without
+needing to have the whole library installed. You may need to define
+certain macros such as `GSL_ERROR' and remove some `#include'
+statements in order to compile the files as standalone units. Reuse of
+the library code in this way is encouraged, subject to the terms of the
+GNU General Public License.
+
+
+File: gsl-ref.info, Node: Error Handling, Next: Mathematical Functions, Prev: Using the library, Up: Top
+
+3 Error Handling
+****************
+
+This chapter describes the way that GSL functions report and handle
+errors. By examining the status information returned by every function
+you can determine whether it succeeded or failed, and if it failed you
+can find out what the precise cause of failure was. You can also define
+your own error handling functions to modify the default behavior of the
+library.
+
+ The functions described in this section are declared in the header
+file `gsl_errno.h'.
+
+* Menu:
+
+* Error Reporting::
+* Error Codes::
+* Error Handlers::
+* Using GSL error reporting in your own functions::
+* Error Reporting Examples::
+
+
+File: gsl-ref.info, Node: Error Reporting, Next: Error Codes, Up: Error Handling
+
+3.1 Error Reporting
+===================
+
+The library follows the thread-safe error reporting conventions of the
+POSIX Threads library. Functions return a non-zero error code to
+indicate an error and `0' to indicate success.
+
+ int status = gsl_function (...)
+
+ if (status) { /* an error occurred */
+ .....
+ /* status value specifies the type of error */
+ }
+
+ The routines report an error whenever they cannot perform the task
+requested of them. For example, a root-finding function would return a
+non-zero error code if could not converge to the requested accuracy, or
+exceeded a limit on the number of iterations. Situations like this are
+a normal occurrence when using any mathematical library and you should
+check the return status of the functions that you call.
+
+ Whenever a routine reports an error the return value specifies the
+type of error. The return value is analogous to the value of the
+variable `errno' in the C library. The caller can examine the return
+code and decide what action to take, including ignoring the error if it
+is not considered serious.
+
+ In addition to reporting errors by return codes the library also has
+an error handler function `gsl_error'. This function is called by
+other library functions when they report an error, just before they
+return to the caller. The default behavior of the error handler is to
+print a message and abort the program,
+
+ gsl: file.c:67: ERROR: invalid argument supplied by user
+ Default GSL error handler invoked.
+ Aborted
+
+ The purpose of the `gsl_error' handler is to provide a function
+where a breakpoint can be set that will catch library errors when
+running under the debugger. It is not intended for use in production
+programs, which should handle any errors using the return codes.
+
+
+File: gsl-ref.info, Node: Error Codes, Next: Error Handlers, Prev: Error Reporting, Up: Error Handling
+
+3.2 Error Codes
+===============
+
+The error code numbers returned by library functions are defined in the
+file `gsl_errno.h'. They all have the prefix `GSL_' and expand to
+non-zero constant integer values. Error codes above 1024 are reserved
+for applications, and are not used by the library. Many of the error
+codes use the same base name as the corresponding error code in the C
+library. Here are some of the most common error codes,
+
+ -- Macro: int GSL_EDOM
+ Domain error; used by mathematical functions when an argument
+ value does not fall into the domain over which the function is
+ defined (like EDOM in the C library)
+
+ -- Macro: int GSL_ERANGE
+ Range error; used by mathematical functions when the result value
+ is not representable because of overflow or underflow (like ERANGE
+ in the C library)
+
+ -- Macro: int GSL_ENOMEM
+ No memory available. The system cannot allocate more virtual
+ memory because its capacity is full (like ENOMEM in the C
+ library). This error is reported when a GSL routine encounters
+ problems when trying to allocate memory with `malloc'.
+
+ -- Macro: int GSL_EINVAL
+ Invalid argument. This is used to indicate various kinds of
+ problems with passing the wrong argument to a library function
+ (like EINVAL in the C library).
+
+ The error codes can be converted into an error message using the
+function `gsl_strerror'.
+
+ -- Function: const char * gsl_strerror (const int GSL_ERRNO)
+ This function returns a pointer to a string describing the error
+ code GSL_ERRNO. For example,
+
+ printf ("error: %s\n", gsl_strerror (status));
+
+ would print an error message like `error: output range error' for a
+ status value of `GSL_ERANGE'.
+
+
+File: gsl-ref.info, Node: Error Handlers, Next: Using GSL error reporting in your own functions, Prev: Error Codes, Up: Error Handling
+
+3.3 Error Handlers
+==================
+
+The default behavior of the GSL error handler is to print a short
+message and call `abort'. When this default is in use programs will
+stop with a core-dump whenever a library routine reports an error.
+This is intended as a fail-safe default for programs which do not check
+the return status of library routines (we don't encourage you to write
+programs this way).
+
+ If you turn off the default error handler it is your responsibility
+to check the return values of routines and handle them yourself. You
+can also customize the error behavior by providing a new error handler.
+For example, an alternative error handler could log all errors to a
+file, ignore certain error conditions (such as underflows), or start the
+debugger and attach it to the current process when an error occurs.
+
+ All GSL error handlers have the type `gsl_error_handler_t', which is
+defined in `gsl_errno.h',
+
+ -- Data Type: gsl_error_handler_t
+ This is the type of GSL error handler functions. An error handler
+ will be passed four arguments which specify the reason for the
+ error (a string), the name of the source file in which it occurred
+ (also a string), the line number in that file (an integer) and the
+ error number (an integer). The source file and line number are
+ set at compile time using the `__FILE__' and `__LINE__' directives
+ in the preprocessor. An error handler function returns type
+ `void'. Error handler functions should be defined like this,
+
+ void handler (const char * reason,
+ const char * file,
+ int line,
+ int gsl_errno)
+
+To request the use of your own error handler you need to call the
+function `gsl_set_error_handler' which is also declared in
+`gsl_errno.h',
+
+ -- Function: gsl_error_handler_t * gsl_set_error_handler
+ (gsl_error_handler_t NEW_HANDLER)
+ This function sets a new error handler, NEW_HANDLER, for the GSL
+ library routines. The previous handler is returned (so that you
+ can restore it later). Note that the pointer to a user defined
+ error handler function is stored in a static variable, so there
+ can be only one error handler per program. This function should
+ be not be used in multi-threaded programs except to set up a
+ program-wide error handler from a master thread. The following
+ example shows how to set and restore a new error handler,
+
+ /* save original handler, install new handler */
+ old_handler = gsl_set_error_handler (&my_handler);
+
+ /* code uses new handler */
+ .....
+
+ /* restore original handler */
+ gsl_set_error_handler (old_handler);
+
+ To use the default behavior (`abort' on error) set the error
+ handler to `NULL',
+
+ old_handler = gsl_set_error_handler (NULL);
+
+ -- Function: gsl_error_handler_t * gsl_set_error_handler_off ()
+ This function turns off the error handler by defining an error
+ handler which does nothing. This will cause the program to
+ continue after any error, so the return values from any library
+ routines must be checked. This is the recommended behavior for
+ production programs. The previous handler is returned (so that
+ you can restore it later).
+
+ The error behavior can be changed for specific applications by
+recompiling the library with a customized definition of the `GSL_ERROR'
+macro in the file `gsl_errno.h'.
+
+
+File: gsl-ref.info, Node: Using GSL error reporting in your own functions, Next: Error Reporting Examples, Prev: Error Handlers, Up: Error Handling
+
+3.4 Using GSL error reporting in your own functions
+===================================================
+
+If you are writing numerical functions in a program which also uses GSL
+code you may find it convenient to adopt the same error reporting
+conventions as in the library.
+
+ To report an error you need to call the function `gsl_error' with a
+string describing the error and then return an appropriate error code
+from `gsl_errno.h', or a special value, such as `NaN'. For convenience
+the file `gsl_errno.h' defines two macros which carry out these steps:
+
+ -- Macro: GSL_ERROR (REASON, GSL_ERRNO)
+ This macro reports an error using the GSL conventions and returns a
+ status value of `gsl_errno'. It expands to the following code
+ fragment,
+
+ gsl_error (reason, __FILE__, __LINE__, gsl_errno);
+ return gsl_errno;
+
+ The macro definition in `gsl_errno.h' actually wraps the code in a
+ `do { ... } while (0)' block to prevent possible parsing problems.
+
+ Here is an example of how the macro could be used to report that a
+routine did not achieve a requested tolerance. To report the error the
+routine needs to return the error code `GSL_ETOL'.
+
+ if (residual > tolerance)
+ {
+ GSL_ERROR("residual exceeds tolerance", GSL_ETOL);
+ }
+
+ -- Macro: GSL_ERROR_VAL (REASON, GSL_ERRNO, VALUE)
+ This macro is the same as `GSL_ERROR' but returns a user-defined
+ value of VALUE instead of an error code. It can be used for
+ mathematical functions that return a floating point value.
+
+ The following example shows how to return a `NaN' at a mathematical
+singularity using the `GSL_ERROR_VAL' macro,
+
+ if (x == 0)
+ {
+ GSL_ERROR_VAL("argument lies on singularity",
+ GSL_ERANGE, GSL_NAN);
+ }
+
+
+File: gsl-ref.info, Node: Error Reporting Examples, Prev: Using GSL error reporting in your own functions, Up: Error Handling
+
+3.5 Examples
+============
+
+Here is an example of some code which checks the return value of a
+function where an error might be reported,
+
+ #include <stdio.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_fft_complex.h>
+
+ ...
+ int status;
+ size_t n = 37;
+
+ gsl_set_error_handler_off();
+
+ status = gsl_fft_complex_radix2_forward (data, n);
+
+ if (status) {
+ if (status == GSL_EINVAL) {
+ fprintf (stderr, "invalid argument, n=%d\n", n);
+ } else {
+ fprintf (stderr, "failed, gsl_errno=%d\n",
+ status);
+ }
+ exit (-1);
+ }
+ ...
+
+The function `gsl_fft_complex_radix2' only accepts integer lengths
+which are a power of two. If the variable `n' is not a power of two
+then the call to the library function will return `GSL_EINVAL',
+indicating that the length argument is invalid. The function call to
+`gsl_set_error_handler_off' stops the default error handler from
+aborting the program. The `else' clause catches any other possible
+errors.
+
+
+File: gsl-ref.info, Node: Mathematical Functions, Next: Complex Numbers, Prev: Error Handling, Up: Top
+
+4 Mathematical Functions
+************************
+
+This chapter describes basic mathematical functions. Some of these
+functions are present in system libraries, but the alternative versions
+given here can be used as a substitute when the system functions are not
+available.
+
+ The functions and macros described in this chapter are defined in the
+header file `gsl_math.h'.
+
+* Menu:
+
+* Mathematical Constants::
+* Infinities and Not-a-number::
+* Elementary Functions::
+* Small integer powers::
+* Testing the Sign of Numbers::
+* Testing for Odd and Even Numbers::
+* Maximum and Minimum functions::
+* Approximate Comparison of Floating Point Numbers::
+
+
+File: gsl-ref.info, Node: Mathematical Constants, Next: Infinities and Not-a-number, Up: Mathematical Functions
+
+4.1 Mathematical Constants
+==========================
+
+The library ensures that the standard BSD mathematical constants are
+defined. For reference, here is a list of the constants:
+
+`M_E'
+ The base of exponentials, e
+
+`M_LOG2E'
+ The base-2 logarithm of e, \log_2 (e)
+
+`M_LOG10E'
+ The base-10 logarithm of e, \log_10 (e)
+
+`M_SQRT2'
+ The square root of two, \sqrt 2
+
+`M_SQRT1_2'
+ The square root of one-half, \sqrt{1/2}
+
+`M_SQRT3'
+ The square root of three, \sqrt 3
+
+`M_PI'
+ The constant pi, \pi
+
+`M_PI_2'
+ Pi divided by two, \pi/2
+
+`M_PI_4'
+ Pi divided by four, \pi/4
+
+`M_SQRTPI'
+ The square root of pi, \sqrt\pi
+
+`M_2_SQRTPI'
+ Two divided by the square root of pi, 2/\sqrt\pi
+
+`M_1_PI'
+ The reciprocal of pi, 1/\pi
+
+`M_2_PI'
+ Twice the reciprocal of pi, 2/\pi
+
+`M_LN10'
+ The natural logarithm of ten, \ln(10)
+
+`M_LN2'
+ The natural logarithm of two, \ln(2)
+
+`M_LNPI'
+ The natural logarithm of pi, \ln(\pi)
+
+`M_EULER'
+ Euler's constant, \gamma
+
+
+
+File: gsl-ref.info, Node: Infinities and Not-a-number, Next: Elementary Functions, Prev: Mathematical Constants, Up: Mathematical Functions
+
+4.2 Infinities and Not-a-number
+===============================
+
+ -- Macro: GSL_POSINF
+ This macro contains the IEEE representation of positive infinity,
+ +\infty. It is computed from the expression `+1.0/0.0'.
+
+ -- Macro: GSL_NEGINF
+ This macro contains the IEEE representation of negative infinity,
+ -\infty. It is computed from the expression `-1.0/0.0'.
+
+ -- Macro: GSL_NAN
+ This macro contains the IEEE representation of the Not-a-Number
+ symbol, `NaN'. It is computed from the ratio `0.0/0.0'.
+
+ -- Function: int gsl_isnan (const double X)
+ This function returns 1 if X is not-a-number.
+
+ -- Function: int gsl_isinf (const double X)
+ This function returns +1 if X is positive infinity, -1 if X is
+ negative infinity and 0 otherwise.
+
+ -- Function: int gsl_finite (const double X)
+ This function returns 1 if X is a real number, and 0 if it is
+ infinite or not-a-number.
+
+
+File: gsl-ref.info, Node: Elementary Functions, Next: Small integer powers, Prev: Infinities and Not-a-number, Up: Mathematical Functions
+
+4.3 Elementary Functions
+========================
+
+The following routines provide portable implementations of functions
+found in the BSD math library. When native versions are not available
+the functions described here can be used instead. The substitution can
+be made automatically if you use `autoconf' to compile your application
+(*note Portability functions::).
+
+ -- Function: double gsl_log1p (const double X)
+ This function computes the value of \log(1+x) in a way that is
+ accurate for small X. It provides an alternative to the BSD math
+ function `log1p(x)'.
+
+ -- Function: double gsl_expm1 (const double X)
+ This function computes the value of \exp(x)-1 in a way that is
+ accurate for small X. It provides an alternative to the BSD math
+ function `expm1(x)'.
+
+ -- Function: double gsl_hypot (const double X, const double Y)
+ This function computes the value of \sqrt{x^2 + y^2} in a way that
+ avoids overflow. It provides an alternative to the BSD math
+ function `hypot(x,y)'.
+
+ -- Function: double gsl_acosh (const double X)
+ This function computes the value of \arccosh(x). It provides an
+ alternative to the standard math function `acosh(x)'.
+
+ -- Function: double gsl_asinh (const double X)
+ This function computes the value of \arcsinh(x). It provides an
+ alternative to the standard math function `asinh(x)'.
+
+ -- Function: double gsl_atanh (const double X)
+ This function computes the value of \arctanh(x). It provides an
+ alternative to the standard math function `atanh(x)'.
+
+ -- Function: double gsl_ldexp (double X, int E)
+ This function computes the value of x * 2^e. It provides an
+ alternative to the standard math function `ldexp(x,e)'.
+
+ -- Function: double gsl_frexp (double X, int * E)
+ This function splits the number x into its normalized fraction f
+ and exponent e, such that x = f * 2^e and 0.5 <= f < 1. The
+ function returns f and stores the exponent in e. If x is zero,
+ both f and e are set to zero. This function provides an
+ alternative to the standard math function `frexp(x, e)'.
+
+
+File: gsl-ref.info, Node: Small integer powers, Next: Testing the Sign of Numbers, Prev: Elementary Functions, Up: Mathematical Functions
+
+4.4 Small integer powers
+========================
+
+A common complaint about the standard C library is its lack of a
+function for calculating (small) integer powers. GSL provides some
+simple functions to fill this gap. For reasons of efficiency, these
+functions do not check for overflow or underflow conditions.
+
+ -- Function: double gsl_pow_int (double X, int N)
+ This routine computes the power x^n for integer N. The power is
+ computed efficiently--for example, x^8 is computed as ((x^2)^2)^2,
+ requiring only 3 multiplications. A version of this function
+ which also computes the numerical error in the result is available
+ as `gsl_sf_pow_int_e'.
+
+ -- Function: double gsl_pow_2 (const double X)
+ -- Function: double gsl_pow_3 (const double X)
+ -- Function: double gsl_pow_4 (const double X)
+ -- Function: double gsl_pow_5 (const double X)
+ -- Function: double gsl_pow_6 (const double X)
+ -- Function: double gsl_pow_7 (const double X)
+ -- Function: double gsl_pow_8 (const double X)
+ -- Function: double gsl_pow_9 (const double X)
+ These functions can be used to compute small integer powers x^2,
+ x^3, etc. efficiently. The functions will be inlined when possible
+ so that use of these functions should be as efficient as
+ explicitly writing the corresponding product expression.
+
+ #include <gsl/gsl_math.h>
+ double y = gsl_pow_4 (3.141) /* compute 3.141**4 */
+
+
+File: gsl-ref.info, Node: Testing the Sign of Numbers, Next: Testing for Odd and Even Numbers, Prev: Small integer powers, Up: Mathematical Functions
+
+4.5 Testing the Sign of Numbers
+===============================
+
+ -- Macro: GSL_SIGN (x)
+ This macro returns the sign of X. It is defined as `((x) >= 0 ? 1
+ : -1)'. Note that with this definition the sign of zero is positive
+ (regardless of its IEEE sign bit).
+
+
+File: gsl-ref.info, Node: Testing for Odd and Even Numbers, Next: Maximum and Minimum functions, Prev: Testing the Sign of Numbers, Up: Mathematical Functions
+
+4.6 Testing for Odd and Even Numbers
+====================================
+
+ -- Macro: GSL_IS_ODD (n)
+ This macro evaluates to 1 if N is odd and 0 if N is even. The
+ argument N must be of integer type.
+
+ -- Macro: GSL_IS_EVEN (n)
+ This macro is the opposite of `GSL_IS_ODD(n)'. It evaluates to 1 if
+ N is even and 0 if N is odd. The argument N must be of integer
+ type.
+
+
+File: gsl-ref.info, Node: Maximum and Minimum functions, Next: Approximate Comparison of Floating Point Numbers, Prev: Testing for Odd and Even Numbers, Up: Mathematical Functions
+
+4.7 Maximum and Minimum functions
+=================================
+
+ -- Macro: GSL_MAX (a, b)
+ This macro returns the maximum of A and B. It is defined as `((a)
+ > (b) ? (a):(b))'.
+
+ -- Macro: GSL_MIN (a, b)
+ This macro returns the minimum of A and B. It is defined as `((a)
+ < (b) ? (a):(b))'.
+
+ -- Function: extern inline double GSL_MAX_DBL (double A, double B)
+ This function returns the maximum of the double precision numbers
+ A and B using an inline function. The use of a function allows for
+ type checking of the arguments as an extra safety feature. On
+ platforms where inline functions are not available the macro
+ `GSL_MAX' will be automatically substituted.
+
+ -- Function: extern inline double GSL_MIN_DBL (double A, double B)
+ This function returns the minimum of the double precision numbers
+ A and B using an inline function. The use of a function allows for
+ type checking of the arguments as an extra safety feature. On
+ platforms where inline functions are not available the macro
+ `GSL_MIN' will be automatically substituted.
+
+ -- Function: extern inline int GSL_MAX_INT (int A, int B)
+ -- Function: extern inline int GSL_MIN_INT (int A, int B)
+ These functions return the maximum or minimum of the integers A
+ and B using an inline function. On platforms where inline
+ functions are not available the macros `GSL_MAX' or `GSL_MIN' will
+ be automatically substituted.
+
+ -- Function: extern inline long double GSL_MAX_LDBL (long double A,
+ long double B)
+ -- Function: extern inline long double GSL_MIN_LDBL (long double A,
+ long double B)
+ These functions return the maximum or minimum of the long doubles A
+ and B using an inline function. On platforms where inline
+ functions are not available the macros `GSL_MAX' or `GSL_MIN' will
+ be automatically substituted.
+
+
+File: gsl-ref.info, Node: Approximate Comparison of Floating Point Numbers, Prev: Maximum and Minimum functions, Up: Mathematical Functions
+
+4.8 Approximate Comparison of Floating Point Numbers
+====================================================
+
+It is sometimes useful to be able to compare two floating point numbers
+approximately, to allow for rounding and truncation errors. The
+following function implements the approximate floating-point comparison
+algorithm proposed by D.E. Knuth in Section 4.2.2 of `Seminumerical
+Algorithms' (3rd edition).
+
+ -- Function: int gsl_fcmp (double X, double Y, double EPSILON)
+ This function determines whether x and y are approximately equal
+ to a relative accuracy EPSILON.
+
+ The relative accuracy is measured using an interval of size 2
+ \delta, where \delta = 2^k \epsilon and k is the maximum base-2
+ exponent of x and y as computed by the function `frexp'.
+
+ If x and y lie within this interval, they are considered
+ approximately equal and the function returns 0. Otherwise if x <
+ y, the function returns -1, or if x > y, the function returns +1.
+
+ The implementation is based on the package `fcmp' by T.C. Belding.
+
+
+File: gsl-ref.info, Node: Complex Numbers, Next: Polynomials, Prev: Mathematical Functions, Up: Top
+
+5 Complex Numbers
+*****************
+
+The functions described in this chapter provide support for complex
+numbers. The algorithms take care to avoid unnecessary intermediate
+underflows and overflows, allowing the functions to be evaluated over
+as much of the complex plane as possible.
+
+ For multiple-valued functions the branch cuts have been chosen to
+follow the conventions of Abramowitz and Stegun in the `Handbook of
+Mathematical Functions'. The functions return principal values which are
+the same as those in GNU Calc, which in turn are the same as those in
+`Common Lisp, The Language (Second Edition)'(1) and the HP-28/48 series
+of calculators.
+
+ The complex types are defined in the header file `gsl_complex.h',
+while the corresponding complex functions and arithmetic operations are
+defined in `gsl_complex_math.h'.
+
+* Menu:
+
+* Complex numbers::
+* Properties of complex numbers::
+* Complex arithmetic operators::
+* Elementary Complex Functions::
+* Complex Trigonometric Functions::
+* Inverse Complex Trigonometric Functions::
+* Complex Hyperbolic Functions::
+* Inverse Complex Hyperbolic Functions::
+* Complex Number References and Further Reading::
+
+ ---------- Footnotes ----------
+
+ (1) Note that the first edition uses different definitions.
+
+
+File: gsl-ref.info, Node: Complex numbers, Next: Properties of complex numbers, Up: Complex Numbers
+
+5.1 Complex numbers
+===================
+
+Complex numbers are represented using the type `gsl_complex'. The
+internal representation of this type may vary across platforms and
+should not be accessed directly. The functions and macros described
+below allow complex numbers to be manipulated in a portable way.
+
+ For reference, the default form of the `gsl_complex' type is given
+by the following struct,
+
+ typedef struct
+ {
+ double dat[2];
+ } gsl_complex;
+
+The real and imaginary part are stored in contiguous elements of a two
+element array. This eliminates any padding between the real and
+imaginary parts, `dat[0]' and `dat[1]', allowing the struct to be
+mapped correctly onto packed complex arrays.
+
+ -- Function: gsl_complex gsl_complex_rect (double X, double Y)
+ This function uses the rectangular cartesian components (X,Y) to
+ return the complex number z = x + i y.
+
+ -- Function: gsl_complex gsl_complex_polar (double R, double THETA)
+ This function returns the complex number z = r \exp(i \theta) = r
+ (\cos(\theta) + i \sin(\theta)) from the polar representation
+ (R,THETA).
+
+ -- Macro: GSL_REAL (Z)
+ -- Macro: GSL_IMAG (Z)
+ These macros return the real and imaginary parts of the complex
+ number Z.
+
+ -- Macro: GSL_SET_COMPLEX (ZP, X, Y)
+ This macro uses the cartesian components (X,Y) to set the real and
+ imaginary parts of the complex number pointed to by ZP. For
+ example,
+
+ GSL_SET_COMPLEX(&z, 3, 4)
+
+ sets Z to be 3 + 4i.
+
+ -- Macro: GSL_SET_REAL (ZP,X)
+ -- Macro: GSL_SET_IMAG (ZP,Y)
+ These macros allow the real and imaginary parts of the complex
+ number pointed to by ZP to be set independently.
+
+
+File: gsl-ref.info, Node: Properties of complex numbers, Next: Complex arithmetic operators, Prev: Complex numbers, Up: Complex Numbers
+
+5.2 Properties of complex numbers
+=================================
+
+ -- Function: double gsl_complex_arg (gsl_complex Z)
+ This function returns the argument of the complex number Z,
+ \arg(z), where -\pi < \arg(z) <= \pi.
+
+ -- Function: double gsl_complex_abs (gsl_complex Z)
+ This function returns the magnitude of the complex number Z, |z|.
+
+ -- Function: double gsl_complex_abs2 (gsl_complex Z)
+ This function returns the squared magnitude of the complex number
+ Z, |z|^2.
+
+ -- Function: double gsl_complex_logabs (gsl_complex Z)
+ This function returns the natural logarithm of the magnitude of the
+ complex number Z, \log|z|. It allows an accurate evaluation of
+ \log|z| when |z| is close to one. The direct evaluation of
+ `log(gsl_complex_abs(z))' would lead to a loss of precision in
+ this case.
+
+
+File: gsl-ref.info, Node: Complex arithmetic operators, Next: Elementary Complex Functions, Prev: Properties of complex numbers, Up: Complex Numbers
+
+5.3 Complex arithmetic operators
+================================
+
+ -- Function: gsl_complex gsl_complex_add (gsl_complex A, gsl_complex B)
+ This function returns the sum of the complex numbers A and B,
+ z=a+b.
+
+ -- Function: gsl_complex gsl_complex_sub (gsl_complex A, gsl_complex B)
+ This function returns the difference of the complex numbers A and
+ B, z=a-b.
+
+ -- Function: gsl_complex gsl_complex_mul (gsl_complex A, gsl_complex B)
+ This function returns the product of the complex numbers A and B,
+ z=ab.
+
+ -- Function: gsl_complex gsl_complex_div (gsl_complex A, gsl_complex B)
+ This function returns the quotient of the complex numbers A and B,
+ z=a/b.
+
+ -- Function: gsl_complex gsl_complex_add_real (gsl_complex A, double X)
+ This function returns the sum of the complex number A and the real
+ number X, z=a+x.
+
+ -- Function: gsl_complex gsl_complex_sub_real (gsl_complex A, double X)
+ This function returns the difference of the complex number A and
+ the real number X, z=a-x.
+
+ -- Function: gsl_complex gsl_complex_mul_real (gsl_complex A, double X)
+ This function returns the product of the complex number A and the
+ real number X, z=ax.
+
+ -- Function: gsl_complex gsl_complex_div_real (gsl_complex A, double X)
+ This function returns the quotient of the complex number A and the
+ real number X, z=a/x.
+
+ -- Function: gsl_complex gsl_complex_add_imag (gsl_complex A, double Y)
+ This function returns the sum of the complex number A and the
+ imaginary number iY, z=a+iy.
+
+ -- Function: gsl_complex gsl_complex_sub_imag (gsl_complex A, double Y)
+ This function returns the difference of the complex number A and
+ the imaginary number iY, z=a-iy.
+
+ -- Function: gsl_complex gsl_complex_mul_imag (gsl_complex A, double Y)
+ This function returns the product of the complex number A and the
+ imaginary number iY, z=a*(iy).
+
+ -- Function: gsl_complex gsl_complex_div_imag (gsl_complex A, double Y)
+ This function returns the quotient of the complex number A and the
+ imaginary number iY, z=a/(iy).
+
+ -- Function: gsl_complex gsl_complex_conjugate (gsl_complex Z)
+ This function returns the complex conjugate of the complex number
+ Z, z^* = x - i y.
+
+ -- Function: gsl_complex gsl_complex_inverse (gsl_complex Z)
+ This function returns the inverse, or reciprocal, of the complex
+ number Z, 1/z = (x - i y)/(x^2 + y^2).
+
+ -- Function: gsl_complex gsl_complex_negative (gsl_complex Z)
+ This function returns the negative of the complex number Z, -z =
+ (-x) + i(-y).
+
+
+File: gsl-ref.info, Node: Elementary Complex Functions, Next: Complex Trigonometric Functions, Prev: Complex arithmetic operators, Up: Complex Numbers
+
+5.4 Elementary Complex Functions
+================================
+
+ -- Function: gsl_complex gsl_complex_sqrt (gsl_complex Z)
+ This function returns the square root of the complex number Z,
+ \sqrt z. The branch cut is the negative real axis. The result
+ always lies in the right half of the complex plane.
+
+ -- Function: gsl_complex gsl_complex_sqrt_real (double X)
+ This function returns the complex square root of the real number
+ X, where X may be negative.
+
+ -- Function: gsl_complex gsl_complex_pow (gsl_complex Z, gsl_complex A)
+ The function returns the complex number Z raised to the complex
+ power A, z^a. This is computed as \exp(\log(z)*a) using complex
+ logarithms and complex exponentials.
+
+ -- Function: gsl_complex gsl_complex_pow_real (gsl_complex Z, double X)
+ This function returns the complex number Z raised to the real
+ power X, z^x.
+
+ -- Function: gsl_complex gsl_complex_exp (gsl_complex Z)
+ This function returns the complex exponential of the complex number
+ Z, \exp(z).
+
+ -- Function: gsl_complex gsl_complex_log (gsl_complex Z)
+ This function returns the complex natural logarithm (base e) of
+ the complex number Z, \log(z). The branch cut is the negative
+ real axis.
+
+ -- Function: gsl_complex gsl_complex_log10 (gsl_complex Z)
+ This function returns the complex base-10 logarithm of the complex
+ number Z, \log_10 (z).
+
+ -- Function: gsl_complex gsl_complex_log_b (gsl_complex Z, gsl_complex
+ B)
+ This function returns the complex base-B logarithm of the complex
+ number Z, \log_b(z). This quantity is computed as the ratio
+ \log(z)/\log(b).
+
+
+File: gsl-ref.info, Node: Complex Trigonometric Functions, Next: Inverse Complex Trigonometric Functions, Prev: Elementary Complex Functions, Up: Complex Numbers
+
+5.5 Complex Trigonometric Functions
+===================================
+
+ -- Function: gsl_complex gsl_complex_sin (gsl_complex Z)
+ This function returns the complex sine of the complex number Z,
+ \sin(z) = (\exp(iz) - \exp(-iz))/(2i).
+
+ -- Function: gsl_complex gsl_complex_cos (gsl_complex Z)
+ This function returns the complex cosine of the complex number Z,
+ \cos(z) = (\exp(iz) + \exp(-iz))/2.
+
+ -- Function: gsl_complex gsl_complex_tan (gsl_complex Z)
+ This function returns the complex tangent of the complex number Z,
+ \tan(z) = \sin(z)/\cos(z).
+
+ -- Function: gsl_complex gsl_complex_sec (gsl_complex Z)
+ This function returns the complex secant of the complex number Z,
+ \sec(z) = 1/\cos(z).
+
+ -- Function: gsl_complex gsl_complex_csc (gsl_complex Z)
+ This function returns the complex cosecant of the complex number Z,
+ \csc(z) = 1/\sin(z).
+
+ -- Function: gsl_complex gsl_complex_cot (gsl_complex Z)
+ This function returns the complex cotangent of the complex number
+ Z, \cot(z) = 1/\tan(z).
+
+
+File: gsl-ref.info, Node: Inverse Complex Trigonometric Functions, Next: Complex Hyperbolic Functions, Prev: Complex Trigonometric Functions, Up: Complex Numbers
+
+5.6 Inverse Complex Trigonometric Functions
+===========================================
+
+ -- Function: gsl_complex gsl_complex_arcsin (gsl_complex Z)
+ This function returns the complex arcsine of the complex number Z,
+ \arcsin(z). The branch cuts are on the real axis, less than -1 and
+ greater than 1.
+
+ -- Function: gsl_complex gsl_complex_arcsin_real (double Z)
+ This function returns the complex arcsine of the real number Z,
+ \arcsin(z). For z between -1 and 1, the function returns a real
+ value in the range [-\pi/2,\pi/2]. For z less than -1 the result
+ has a real part of -\pi/2 and a positive imaginary part. For z
+ greater than 1 the result has a real part of \pi/2 and a negative
+ imaginary part.
+
+ -- Function: gsl_complex gsl_complex_arccos (gsl_complex Z)
+ This function returns the complex arccosine of the complex number
+ Z, \arccos(z). The branch cuts are on the real axis, less than -1
+ and greater than 1.
+
+ -- Function: gsl_complex gsl_complex_arccos_real (double Z)
+ This function returns the complex arccosine of the real number Z,
+ \arccos(z). For z between -1 and 1, the function returns a real
+ value in the range [0,\pi]. For z less than -1 the result has a
+ real part of \pi and a negative imaginary part. For z greater
+ than 1 the result is purely imaginary and positive.
+
+ -- Function: gsl_complex gsl_complex_arctan (gsl_complex Z)
+ This function returns the complex arctangent of the complex number
+ Z, \arctan(z). The branch cuts are on the imaginary axis, below -i
+ and above i.
+
+ -- Function: gsl_complex gsl_complex_arcsec (gsl_complex Z)
+ This function returns the complex arcsecant of the complex number
+ Z, \arcsec(z) = \arccos(1/z).
+
+ -- Function: gsl_complex gsl_complex_arcsec_real (double Z)
+ This function returns the complex arcsecant of the real number Z,
+ \arcsec(z) = \arccos(1/z).
+
+ -- Function: gsl_complex gsl_complex_arccsc (gsl_complex Z)
+ This function returns the complex arccosecant of the complex
+ number Z, \arccsc(z) = \arcsin(1/z).
+
+ -- Function: gsl_complex gsl_complex_arccsc_real (double Z)
+ This function returns the complex arccosecant of the real number Z,
+ \arccsc(z) = \arcsin(1/z).
+
+ -- Function: gsl_complex gsl_complex_arccot (gsl_complex Z)
+ This function returns the complex arccotangent of the complex
+ number Z, \arccot(z) = \arctan(1/z).
+
+
+File: gsl-ref.info, Node: Complex Hyperbolic Functions, Next: Inverse Complex Hyperbolic Functions, Prev: Inverse Complex Trigonometric Functions, Up: Complex Numbers
+
+5.7 Complex Hyperbolic Functions
+================================
+
+ -- Function: gsl_complex gsl_complex_sinh (gsl_complex Z)
+ This function returns the complex hyperbolic sine of the complex
+ number Z, \sinh(z) = (\exp(z) - \exp(-z))/2.
+
+ -- Function: gsl_complex gsl_complex_cosh (gsl_complex Z)
+ This function returns the complex hyperbolic cosine of the complex
+ number Z, \cosh(z) = (\exp(z) + \exp(-z))/2.
+
+ -- Function: gsl_complex gsl_complex_tanh (gsl_complex Z)
+ This function returns the complex hyperbolic tangent of the
+ complex number Z, \tanh(z) = \sinh(z)/\cosh(z).
+
+ -- Function: gsl_complex gsl_complex_sech (gsl_complex Z)
+ This function returns the complex hyperbolic secant of the complex
+ number Z, \sech(z) = 1/\cosh(z).
+
+ -- Function: gsl_complex gsl_complex_csch (gsl_complex Z)
+ This function returns the complex hyperbolic cosecant of the
+ complex number Z, \csch(z) = 1/\sinh(z).
+
+ -- Function: gsl_complex gsl_complex_coth (gsl_complex Z)
+ This function returns the complex hyperbolic cotangent of the
+ complex number Z, \coth(z) = 1/\tanh(z).
+
+
+File: gsl-ref.info, Node: Inverse Complex Hyperbolic Functions, Next: Complex Number References and Further Reading, Prev: Complex Hyperbolic Functions, Up: Complex Numbers
+
+5.8 Inverse Complex Hyperbolic Functions
+========================================
+
+ -- Function: gsl_complex gsl_complex_arcsinh (gsl_complex Z)
+ This function returns the complex hyperbolic arcsine of the
+ complex number Z, \arcsinh(z). The branch cuts are on the
+ imaginary axis, below -i and above i.
+
+ -- Function: gsl_complex gsl_complex_arccosh (gsl_complex Z)
+ This function returns the complex hyperbolic arccosine of the
+ complex number Z, \arccosh(z). The branch cut is on the real
+ axis, less than 1. Note that in this case we use the negative
+ square root in formula 4.6.21 of Abramowitz & Stegun giving
+ \arccosh(z)=\log(z-\sqrt{z^2-1}).
+
+ -- Function: gsl_complex gsl_complex_arccosh_real (double Z)
+ This function returns the complex hyperbolic arccosine of the real
+ number Z, \arccosh(z).
+
+ -- Function: gsl_complex gsl_complex_arctanh (gsl_complex Z)
+ This function returns the complex hyperbolic arctangent of the
+ complex number Z, \arctanh(z). The branch cuts are on the real
+ axis, less than -1 and greater than 1.
+
+ -- Function: gsl_complex gsl_complex_arctanh_real (double Z)
+ This function returns the complex hyperbolic arctangent of the real
+ number Z, \arctanh(z).
+
+ -- Function: gsl_complex gsl_complex_arcsech (gsl_complex Z)
+ This function returns the complex hyperbolic arcsecant of the
+ complex number Z, \arcsech(z) = \arccosh(1/z).
+
+ -- Function: gsl_complex gsl_complex_arccsch (gsl_complex Z)
+ This function returns the complex hyperbolic arccosecant of the
+ complex number Z, \arccsch(z) = \arcsin(1/z).
+
+ -- Function: gsl_complex gsl_complex_arccoth (gsl_complex Z)
+ This function returns the complex hyperbolic arccotangent of the
+ complex number Z, \arccoth(z) = \arctanh(1/z).
+
+
+File: gsl-ref.info, Node: Complex Number References and Further Reading, Prev: Inverse Complex Hyperbolic Functions, Up: Complex Numbers
+
+5.9 References and Further Reading
+==================================
+
+The implementations of the elementary and trigonometric functions are
+based on the following papers,
+
+ T. E. Hull, Thomas F. Fairgrieve, Ping Tak Peter Tang,
+ "Implementing Complex Elementary Functions Using Exception
+ Handling", `ACM Transactions on Mathematical Software', Volume 20
+ (1994), pp 215-244, Corrigenda, p553
+
+ T. E. Hull, Thomas F. Fairgrieve, Ping Tak Peter Tang,
+ "Implementing the complex arcsin and arccosine functions using
+ exception handling", `ACM Transactions on Mathematical Software',
+ Volume 23 (1997) pp 299-335
+
+The general formulas and details of branch cuts can be found in the
+following books,
+
+ Abramowitz and Stegun, `Handbook of Mathematical Functions',
+ "Circular Functions in Terms of Real and Imaginary Parts", Formulas
+ 4.3.55-58, "Inverse Circular Functions in Terms of Real and
+ Imaginary Parts", Formulas 4.4.37-39, "Hyperbolic Functions in
+ Terms of Real and Imaginary Parts", Formulas 4.5.49-52, "Inverse
+ Hyperbolic Functions--relation to Inverse Circular Functions",
+ Formulas 4.6.14-19.
+
+ Dave Gillespie, `Calc Manual', Free Software Foundation, ISBN
+ 1-882114-18-3
+
+
+File: gsl-ref.info, Node: Polynomials, Next: Special Functions, Prev: Complex Numbers, Up: Top
+
+6 Polynomials
+*************
+
+This chapter describes functions for evaluating and solving polynomials.
+There are routines for finding real and complex roots of quadratic and
+cubic equations using analytic methods. An iterative polynomial solver
+is also available for finding the roots of general polynomials with real
+coefficients (of any order). The functions are declared in the header
+file `gsl_poly.h'.
+
+* Menu:
+
+* Polynomial Evaluation::
+* Divided Difference Representation of Polynomials::
+* Quadratic Equations::
+* Cubic Equations::
+* General Polynomial Equations::
+* Roots of Polynomials Examples::
+* Roots of Polynomials References and Further Reading::
+
+
+File: gsl-ref.info, Node: Polynomial Evaluation, Next: Divided Difference Representation of Polynomials, Up: Polynomials
+
+6.1 Polynomial Evaluation
+=========================
+
+ -- Function: double gsl_poly_eval (const double C[], const int LEN,
+ const double X)
+ This function evaluates the polynomial c[0] + c[1] x + c[2] x^2 +
+ \dots + c[len-1] x^{len-1} using Horner's method for stability.
+ The function is inlined when possible.
+
+
+File: gsl-ref.info, Node: Divided Difference Representation of Polynomials, Next: Quadratic Equations, Prev: Polynomial Evaluation, Up: Polynomials
+
+6.2 Divided Difference Representation of Polynomials
+====================================================
+
+The functions described here manipulate polynomials stored in Newton's
+divided-difference representation. The use of divided-differences is
+described in Abramowitz & Stegun sections 25.1.4 and 25.2.26.
+
+ -- Function: int gsl_poly_dd_init (double DD[], const double XA[],
+ const double YA[], size_t SIZE)
+ This function computes a divided-difference representation of the
+ interpolating polynomial for the points (XA, YA) stored in the
+ arrays XA and YA of length SIZE. On output the
+ divided-differences of (XA,YA) are stored in the array DD, also of
+ length SIZE.
+
+ -- Function: double gsl_poly_dd_eval (const double DD[], const double
+ XA[], const size_t SIZE, const double X)
+ This function evaluates the polynomial stored in
+ divided-difference form in the arrays DD and XA of length SIZE at
+ the point X.
+
+ -- Function: int gsl_poly_dd_taylor (double C[], double XP, const
+ double DD[], const double XA[], size_t SIZE, double W[])
+ This function converts the divided-difference representation of a
+ polynomial to a Taylor expansion. The divided-difference
+ representation is supplied in the arrays DD and XA of length SIZE.
+ On output the Taylor coefficients of the polynomial expanded about
+ the point XP are stored in the array C also of length SIZE. A
+ workspace of length SIZE must be provided in the array W.
+
+
+File: gsl-ref.info, Node: Quadratic Equations, Next: Cubic Equations, Prev: Divided Difference Representation of Polynomials, Up: Polynomials
+
+6.3 Quadratic Equations
+=======================
+
+ -- Function: int gsl_poly_solve_quadratic (double A, double B, double
+ C, double * X0, double * X1)
+ This function finds the real roots of the quadratic equation,
+
+ a x^2 + b x + c = 0
+
+ The number of real roots (either zero, one or two) is returned, and
+ their locations are stored in X0 and X1. If no real roots are
+ found then X0 and X1 are not modified. If one real root is found
+ (i.e. if a=0) then it is stored in X0. When two real roots are
+ found they are stored in X0 and X1 in ascending order. The case
+ of coincident roots is not considered special. For example
+ (x-1)^2=0 will have two roots, which happen to have exactly equal
+ values.
+
+ The number of roots found depends on the sign of the discriminant
+ b^2 - 4 a c. This will be subject to rounding and cancellation
+ errors when computed in double precision, and will also be subject
+ to errors if the coefficients of the polynomial are inexact.
+ These errors may cause a discrete change in the number of roots.
+ However, for polynomials with small integer coefficients the
+ discriminant can always be computed exactly.
+
+
+ -- Function: int gsl_poly_complex_solve_quadratic (double A, double B,
+ double C, gsl_complex * Z0, gsl_complex * Z1)
+ This function finds the complex roots of the quadratic equation,
+
+ a z^2 + b z + c = 0
+
+ The number of complex roots is returned (either one or two) and the
+ locations of the roots are stored in Z0 and Z1. The roots are
+ returned in ascending order, sorted first by their real components
+ and then by their imaginary components. If only one real root is
+ found (i.e. if a=0) then it is stored in Z0.
+
+
+
+File: gsl-ref.info, Node: Cubic Equations, Next: General Polynomial Equations, Prev: Quadratic Equations, Up: Polynomials
+
+6.4 Cubic Equations
+===================
+
+ -- Function: int gsl_poly_solve_cubic (double A, double B, double C,
+ double * X0, double * X1, double * X2)
+ This function finds the real roots of the cubic equation,
+
+ x^3 + a x^2 + b x + c = 0
+
+ with a leading coefficient of unity. The number of real roots
+ (either one or three) is returned, and their locations are stored
+ in X0, X1 and X2. If one real root is found then only X0 is
+ modified. When three real roots are found they are stored in X0,
+ X1 and X2 in ascending order. The case of coincident roots is not
+ considered special. For example, the equation (x-1)^3=0 will have
+ three roots with exactly equal values.
+
+
+ -- Function: int gsl_poly_complex_solve_cubic (double A, double B,
+ double C, gsl_complex * Z0, gsl_complex * Z1, gsl_complex *
+ Z2)
+ This function finds the complex roots of the cubic equation,
+
+ z^3 + a z^2 + b z + c = 0
+
+ The number of complex roots is returned (always three) and the
+ locations of the roots are stored in Z0, Z1 and Z2. The roots are
+ returned in ascending order, sorted first by their real components
+ and then by their imaginary components.
+
+
+
+File: gsl-ref.info, Node: General Polynomial Equations, Next: Roots of Polynomials Examples, Prev: Cubic Equations, Up: Polynomials
+
+6.5 General Polynomial Equations
+================================
+
+The roots of polynomial equations cannot be found analytically beyond
+the special cases of the quadratic, cubic and quartic equation. The
+algorithm described in this section uses an iterative method to find the
+approximate locations of roots of higher order polynomials.
+
+ -- Function: gsl_poly_complex_workspace *
+gsl_poly_complex_workspace_alloc (size_t N)
+ This function allocates space for a `gsl_poly_complex_workspace'
+ struct and a workspace suitable for solving a polynomial with N
+ coefficients using the routine `gsl_poly_complex_solve'.
+
+ The function returns a pointer to the newly allocated
+ `gsl_poly_complex_workspace' if no errors were detected, and a null
+ pointer in the case of error.
+
+ -- Function: void gsl_poly_complex_workspace_free
+ (gsl_poly_complex_workspace * W)
+ This function frees all the memory associated with the workspace W.
+
+ -- Function: int gsl_poly_complex_solve (const double * A, size_t N,
+ gsl_poly_complex_workspace * W, gsl_complex_packed_ptr Z)
+ This function computes the roots of the general polynomial P(x) =
+ a_0 + a_1 x + a_2 x^2 + ... + a_{n-1} x^{n-1} using balanced-QR
+ reduction of the companion matrix. The parameter N specifies the
+ length of the coefficient array. The coefficient of the highest
+ order term must be non-zero. The function requires a workspace W
+ of the appropriate size. The n-1 roots are returned in the packed
+ complex array Z of length 2(n-1), alternating real and imaginary
+ parts.
+
+ The function returns `GSL_SUCCESS' if all the roots are found. If
+ the QR reduction does not converge, the error handler is invoked
+ with an error code of `GSL_EFAILED'. Note that due to finite
+ precision, roots of higher multiplicity are returned as a cluster
+ of simple roots with reduced accuracy. The solution of
+ polynomials with higher-order roots requires specialized
+ algorithms that take the multiplicity structure into account (see
+ e.g. Z. Zeng, Algorithm 835, ACM Transactions on Mathematical
+ Software, Volume 30, Issue 2 (2004), pp 218-236).
+
+
+File: gsl-ref.info, Node: Roots of Polynomials Examples, Next: Roots of Polynomials References and Further Reading, Prev: General Polynomial Equations, Up: Polynomials
+
+6.6 Examples
+============
+
+To demonstrate the use of the general polynomial solver we will take the
+polynomial P(x) = x^5 - 1 which has the following roots,
+
+ 1, e^{2\pi i /5}, e^{4\pi i /5}, e^{6\pi i /5}, e^{8\pi i /5}
+
+The following program will find these roots.
+
+ #include <stdio.h>
+ #include <gsl/gsl_poly.h>
+
+ int
+ main (void)
+ {
+ int i;
+ /* coefficients of P(x) = -1 + x^5 */
+ double a[6] = { -1, 0, 0, 0, 0, 1 };
+ double z[10];
+
+ gsl_poly_complex_workspace * w
+ = gsl_poly_complex_workspace_alloc (6);
+
+ gsl_poly_complex_solve (a, 6, w, z);
+
+ gsl_poly_complex_workspace_free (w);
+
+ for (i = 0; i < 5; i++)
+ {
+ printf ("z%d = %+.18f %+.18f\n",
+ i, z[2*i], z[2*i+1]);
+ }
+
+ return 0;
+ }
+
+The output of the program is,
+
+ $ ./a.out
+ z0 = -0.809016994374947451 +0.587785252292473137
+ z1 = -0.809016994374947451 -0.587785252292473137
+ z2 = +0.309016994374947451 +0.951056516295153642
+ z3 = +0.309016994374947451 -0.951056516295153642
+ z4 = +1.000000000000000000 +0.000000000000000000
+
+which agrees with the analytic result, z_n = \exp(2 \pi n i/5).
+
+
+File: gsl-ref.info, Node: Roots of Polynomials References and Further Reading, Prev: Roots of Polynomials Examples, Up: Polynomials
+
+6.7 References and Further Reading
+==================================
+
+The balanced-QR method and its error analysis are described in the
+following papers,
+
+ R.S. Martin, G. Peters and J.H. Wilkinson, "The QR Algorithm for
+ Real Hessenberg Matrices", `Numerische Mathematik', 14 (1970),
+ 219-231.
+
+ B.N. Parlett and C. Reinsch, "Balancing a Matrix for Calculation of
+ Eigenvalues and Eigenvectors", `Numerische Mathematik', 13 (1969),
+ 293-304.
+
+ A. Edelman and H. Murakami, "Polynomial roots from companion matrix
+ eigenvalues", `Mathematics of Computation', Vol. 64, No. 210
+ (1995), 763-776.
+
+The formulas for divided differences are given in Abramowitz and Stegun,
+
+ Abramowitz and Stegun, `Handbook of Mathematical Functions',
+ Sections 25.1.4 and 25.2.26.
+
+
+File: gsl-ref.info, Node: Special Functions, Next: Vectors and Matrices, Prev: Polynomials, Up: Top
+
+7 Special Functions
+*******************
+
+This chapter describes the GSL special function library. The library
+includes routines for calculating the values of Airy functions, Bessel
+functions, Clausen functions, Coulomb wave functions, Coupling
+coefficients, the Dawson function, Debye functions, Dilogarithms,
+Elliptic integrals, Jacobi elliptic functions, Error functions,
+Exponential integrals, Fermi-Dirac functions, Gamma functions,
+Gegenbauer functions, Hypergeometric functions, Laguerre functions,
+Legendre functions and Spherical Harmonics, the Psi (Digamma) Function,
+Synchrotron functions, Transport functions, Trigonometric functions and
+Zeta functions. Each routine also computes an estimate of the numerical
+error in the calculated value of the function.
+
+ The functions in this chapter are declared in individual header
+files, such as `gsl_sf_airy.h', `gsl_sf_bessel.h', etc. The complete
+set of header files can be included using the file `gsl_sf.h'.
+
+* Menu:
+
+* Special Function Usage::
+* The gsl_sf_result struct::
+* Special Function Modes::
+* Airy Functions and Derivatives::
+* Bessel Functions::
+* Clausen Functions::
+* Coulomb Functions::
+* Coupling Coefficients::
+* Dawson Function::
+* Debye Functions::
+* Dilogarithm::
+* Elementary Operations::
+* Elliptic Integrals::
+* Elliptic Functions (Jacobi)::
+* Error Functions::
+* Exponential Functions::
+* Exponential Integrals::
+* Fermi-Dirac Function::
+* Gamma and Beta Functions::
+* Gegenbauer Functions::
+* Hypergeometric Functions::
+* Laguerre Functions::
+* Lambert W Functions::
+* Legendre Functions and Spherical Harmonics::
+* Logarithm and Related Functions::
+* Mathieu Functions::
+* Power Function::
+* Psi (Digamma) Function::
+* Synchrotron Functions::
+* Transport Functions::
+* Trigonometric Functions::
+* Zeta Functions::
+* Special Functions Examples::
+* Special Functions References and Further Reading::
+
+
+File: gsl-ref.info, Node: Special Function Usage, Next: The gsl_sf_result struct, Up: Special Functions
+
+7.1 Usage
+=========
+
+The special functions are available in two calling conventions, a
+"natural form" which returns the numerical value of the function and an
+"error-handling form" which returns an error code. The two types of
+function provide alternative ways of accessing the same underlying code.
+
+ The "natural form" returns only the value of the function and can be
+used directly in mathematical expressions. For example, the following
+function call will compute the value of the Bessel function J_0(x),
+
+ double y = gsl_sf_bessel_J0 (x);
+
+There is no way to access an error code or to estimate the error using
+this method. To allow access to this information the alternative
+error-handling form stores the value and error in a modifiable argument,
+
+ gsl_sf_result result;
+ int status = gsl_sf_bessel_J0_e (x, &result);
+
+The error-handling functions have the suffix `_e'. The returned status
+value indicates error conditions such as overflow, underflow or loss of
+precision. If there are no errors the error-handling functions return
+`GSL_SUCCESS'.
+
+
+File: gsl-ref.info, Node: The gsl_sf_result struct, Next: Special Function Modes, Prev: Special Function Usage, Up: Special Functions
+
+7.2 The gsl_sf_result struct
+============================
+
+The error handling form of the special functions always calculate an
+error estimate along with the value of the result. Therefore,
+structures are provided for amalgamating a value and error estimate.
+These structures are declared in the header file `gsl_sf_result.h'.
+
+ The `gsl_sf_result' struct contains value and error fields.
+
+ typedef struct
+ {
+ double val;
+ double err;
+ } gsl_sf_result;
+
+The field VAL contains the value and the field ERR contains an estimate
+of the absolute error in the value.
+
+ In some cases, an overflow or underflow can be detected and handled
+by a function. In this case, it may be possible to return a scaling
+exponent as well as an error/value pair in order to save the result from
+exceeding the dynamic range of the built-in types. The
+`gsl_sf_result_e10' struct contains value and error fields as well as
+an exponent field such that the actual result is obtained as `result *
+10^(e10)'.
+
+ typedef struct
+ {
+ double val;
+ double err;
+ int e10;
+ } gsl_sf_result_e10;
+
+
+File: gsl-ref.info, Node: Special Function Modes, Next: Airy Functions and Derivatives, Prev: The gsl_sf_result struct, Up: Special Functions
+
+7.3 Modes
+=========
+
+The goal of the library is to achieve double precision accuracy wherever
+possible. However the cost of evaluating some special functions to
+double precision can be significant, particularly where very high order
+terms are required. In these cases a `mode' argument allows the
+accuracy of the function to be reduced in order to improve performance.
+The following precision levels are available for the mode argument,
+
+`GSL_PREC_DOUBLE'
+ Double-precision, a relative accuracy of approximately 2 * 10^-16.
+
+`GSL_PREC_SINGLE'
+ Single-precision, a relative accuracy of approximately 10^-7.
+
+`GSL_PREC_APPROX'
+ Approximate values, a relative accuracy of approximately 5 * 10^-4.
+
+The approximate mode provides the fastest evaluation at the lowest
+accuracy.
+
+
+File: gsl-ref.info, Node: Airy Functions and Derivatives, Next: Bessel Functions, Prev: Special Function Modes, Up: Special Functions
+
+7.4 Airy Functions and Derivatives
+==================================
+
+The Airy functions Ai(x) and Bi(x) are defined by the integral
+representations,
+
+ Ai(x) = (1/\pi) \int_0^\infty \cos((1/3) t^3 + xt) dt
+ Bi(x) = (1/\pi) \int_0^\infty (e^(-(1/3) t^3) + \sin((1/3) t^3 + xt)) dt
+
+For further information see Abramowitz & Stegun, Section 10.4. The Airy
+functions are defined in the header file `gsl_sf_airy.h'.
+
+* Menu:
+
+* Airy Functions::
+* Derivatives of Airy Functions::
+* Zeros of Airy Functions::
+* Zeros of Derivatives of Airy Functions::
+
+
+File: gsl-ref.info, Node: Airy Functions, Next: Derivatives of Airy Functions, Up: Airy Functions and Derivatives
+
+7.4.1 Airy Functions
+--------------------
+
+ -- Function: double gsl_sf_airy_Ai (double X, gsl_mode_t MODE)
+ -- Function: int gsl_sf_airy_Ai_e (double X, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute the Airy function Ai(x) with an accuracy
+ specified by MODE.
+
+ -- Function: double gsl_sf_airy_Bi (double X, gsl_mode_t MODE)
+ -- Function: int gsl_sf_airy_Bi_e (double X, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute the Airy function Bi(x) with an accuracy
+ specified by MODE.
+
+ -- Function: double gsl_sf_airy_Ai_scaled (double X, gsl_mode_t MODE)
+ -- Function: int gsl_sf_airy_Ai_scaled_e (double X, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute a scaled version of the Airy function
+ S_A(x) Ai(x). For x>0 the scaling factor S_A(x) is \exp(+(2/3)
+ x^(3/2)), and is 1 for x<0.
+
+ -- Function: double gsl_sf_airy_Bi_scaled (double X, gsl_mode_t MODE)
+ -- Function: int gsl_sf_airy_Bi_scaled_e (double X, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute a scaled version of the Airy function
+ S_B(x) Bi(x). For x>0 the scaling factor S_B(x) is exp(-(2/3)
+ x^(3/2)), and is 1 for x<0.
+
+
+File: gsl-ref.info, Node: Derivatives of Airy Functions, Next: Zeros of Airy Functions, Prev: Airy Functions, Up: Airy Functions and Derivatives
+
+7.4.2 Derivatives of Airy Functions
+-----------------------------------
+
+ -- Function: double gsl_sf_airy_Ai_deriv (double X, gsl_mode_t MODE)
+ -- Function: int gsl_sf_airy_Ai_deriv_e (double X, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute the Airy function derivative Ai'(x) with an
+ accuracy specified by MODE.
+
+ -- Function: double gsl_sf_airy_Bi_deriv (double X, gsl_mode_t MODE)
+ -- Function: int gsl_sf_airy_Bi_deriv_e (double X, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute the Airy function derivative Bi'(x) with an
+ accuracy specified by MODE.
+
+ -- Function: double gsl_sf_airy_Ai_deriv_scaled (double X, gsl_mode_t
+ MODE)
+ -- Function: int gsl_sf_airy_Ai_deriv_scaled_e (double X, gsl_mode_t
+ MODE, gsl_sf_result * RESULT)
+ These routines compute the scaled Airy function derivative S_A(x)
+ Ai'(x). For x>0 the scaling factor S_A(x) is \exp(+(2/3)
+ x^(3/2)), and is 1 for x<0.
+
+ -- Function: double gsl_sf_airy_Bi_deriv_scaled (double X, gsl_mode_t
+ MODE)
+ -- Function: int gsl_sf_airy_Bi_deriv_scaled_e (double X, gsl_mode_t
+ MODE, gsl_sf_result * RESULT)
+ These routines compute the scaled Airy function derivative S_B(x)
+ Bi'(x). For x>0 the scaling factor S_B(x) is exp(-(2/3) x^(3/2)),
+ and is 1 for x<0.
+
+
+File: gsl-ref.info, Node: Zeros of Airy Functions, Next: Zeros of Derivatives of Airy Functions, Prev: Derivatives of Airy Functions, Up: Airy Functions and Derivatives
+
+7.4.3 Zeros of Airy Functions
+-----------------------------
+
+ -- Function: double gsl_sf_airy_zero_Ai (unsigned int S)
+ -- Function: int gsl_sf_airy_zero_Ai_e (unsigned int S, gsl_sf_result
+ * RESULT)
+ These routines compute the location of the S-th zero of the Airy
+ function Ai(x).
+
+ -- Function: double gsl_sf_airy_zero_Bi (unsigned int S)
+ -- Function: int gsl_sf_airy_zero_Bi_e (unsigned int S, gsl_sf_result
+ * RESULT)
+ These routines compute the location of the S-th zero of the Airy
+ function Bi(x).
+
+
+File: gsl-ref.info, Node: Zeros of Derivatives of Airy Functions, Prev: Zeros of Airy Functions, Up: Airy Functions and Derivatives
+
+7.4.4 Zeros of Derivatives of Airy Functions
+--------------------------------------------
+
+ -- Function: double gsl_sf_airy_zero_Ai_deriv (unsigned int S)
+ -- Function: int gsl_sf_airy_zero_Ai_deriv_e (unsigned int S,
+ gsl_sf_result * RESULT)
+ These routines compute the location of the S-th zero of the Airy
+ function derivative Ai'(x).
+
+ -- Function: double gsl_sf_airy_zero_Bi_deriv (unsigned int S)
+ -- Function: int gsl_sf_airy_zero_Bi_deriv_e (unsigned int S,
+ gsl_sf_result * RESULT)
+ These routines compute the location of the S-th zero of the Airy
+ function derivative Bi'(x).
+
+
+File: gsl-ref.info, Node: Bessel Functions, Next: Clausen Functions, Prev: Airy Functions and Derivatives, Up: Special Functions
+
+7.5 Bessel Functions
+====================
+
+The routines described in this section compute the Cylindrical Bessel
+functions J_n(x), Y_n(x), Modified cylindrical Bessel functions I_n(x),
+K_n(x), Spherical Bessel functions j_l(x), y_l(x), and Modified
+Spherical Bessel functions i_l(x), k_l(x). For more information see
+Abramowitz & Stegun, Chapters 9 and 10. The Bessel functions are
+defined in the header file `gsl_sf_bessel.h'.
+
+* Menu:
+
+* Regular Cylindrical Bessel Functions::
+* Irregular Cylindrical Bessel Functions::
+* Regular Modified Cylindrical Bessel Functions::
+* Irregular Modified Cylindrical Bessel Functions::
+* Regular Spherical Bessel Functions::
+* Irregular Spherical Bessel Functions::
+* Regular Modified Spherical Bessel Functions::
+* Irregular Modified Spherical Bessel Functions::
+* Regular Bessel Function - Fractional Order::
+* Irregular Bessel Functions - Fractional Order::
+* Regular Modified Bessel Functions - Fractional Order::
+* Irregular Modified Bessel Functions - Fractional Order::
+* Zeros of Regular Bessel Functions::
+
+
+File: gsl-ref.info, Node: Regular Cylindrical Bessel Functions, Next: Irregular Cylindrical Bessel Functions, Up: Bessel Functions
+
+7.5.1 Regular Cylindrical Bessel Functions
+------------------------------------------
+
+ -- Function: double gsl_sf_bessel_J0 (double X)
+ -- Function: int gsl_sf_bessel_J0_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular cylindrical Bessel function of
+ zeroth order, J_0(x).
+
+ -- Function: double gsl_sf_bessel_J1 (double X)
+ -- Function: int gsl_sf_bessel_J1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular cylindrical Bessel function of
+ first order, J_1(x).
+
+ -- Function: double gsl_sf_bessel_Jn (int N, double X)
+ -- Function: int gsl_sf_bessel_Jn_e (int N, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the regular cylindrical Bessel function of
+ order N, J_n(x).
+
+ -- Function: int gsl_sf_bessel_Jn_array (int NMIN, int NMAX, double X,
+ double RESULT_ARRAY[])
+ This routine computes the values of the regular cylindrical Bessel
+ functions J_n(x) for n from NMIN to NMAX inclusive, storing the
+ results in the array RESULT_ARRAY. The values are computed using
+ recurrence relations for efficiency, and therefore may differ
+ slightly from the exact values.
+
+
+File: gsl-ref.info, Node: Irregular Cylindrical Bessel Functions, Next: Regular Modified Cylindrical Bessel Functions, Prev: Regular Cylindrical Bessel Functions, Up: Bessel Functions
+
+7.5.2 Irregular Cylindrical Bessel Functions
+--------------------------------------------
+
+ -- Function: double gsl_sf_bessel_Y0 (double X)
+ -- Function: int gsl_sf_bessel_Y0_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular cylindrical Bessel function
+ of zeroth order, Y_0(x), for x>0.
+
+ -- Function: double gsl_sf_bessel_Y1 (double X)
+ -- Function: int gsl_sf_bessel_Y1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular cylindrical Bessel function
+ of first order, Y_1(x), for x>0.
+
+ -- Function: double gsl_sf_bessel_Yn (int N,double X)
+ -- Function: int gsl_sf_bessel_Yn_e (int N,double X, gsl_sf_result *
+ RESULT)
+ These routines compute the irregular cylindrical Bessel function of
+ order N, Y_n(x), for x>0.
+
+ -- Function: int gsl_sf_bessel_Yn_array (int NMIN, int NMAX, double X,
+ double RESULT_ARRAY[])
+ This routine computes the values of the irregular cylindrical
+ Bessel functions Y_n(x) for n from NMIN to NMAX inclusive, storing
+ the results in the array RESULT_ARRAY. The domain of the function
+ is x>0. The values are computed using recurrence relations for
+ efficiency, and therefore may differ slightly from the exact
+ values.
+
+
+File: gsl-ref.info, Node: Regular Modified Cylindrical Bessel Functions, Next: Irregular Modified Cylindrical Bessel Functions, Prev: Irregular Cylindrical Bessel Functions, Up: Bessel Functions
+
+7.5.3 Regular Modified Cylindrical Bessel Functions
+---------------------------------------------------
+
+ -- Function: double gsl_sf_bessel_I0 (double X)
+ -- Function: int gsl_sf_bessel_I0_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular modified cylindrical Bessel
+ function of zeroth order, I_0(x).
+
+ -- Function: double gsl_sf_bessel_I1 (double X)
+ -- Function: int gsl_sf_bessel_I1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular modified cylindrical Bessel
+ function of first order, I_1(x).
+
+ -- Function: double gsl_sf_bessel_In (int N, double X)
+ -- Function: int gsl_sf_bessel_In_e (int N, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the regular modified cylindrical Bessel
+ function of order N, I_n(x).
+
+ -- Function: int gsl_sf_bessel_In_array (int NMIN, int NMAX, double X,
+ double RESULT_ARRAY[])
+ This routine computes the values of the regular modified
+ cylindrical Bessel functions I_n(x) for n from NMIN to NMAX
+ inclusive, storing the results in the array RESULT_ARRAY. The
+ start of the range NMIN must be positive or zero. The values are
+ computed using recurrence relations for efficiency, and therefore
+ may differ slightly from the exact values.
+
+ -- Function: double gsl_sf_bessel_I0_scaled (double X)
+ -- Function: int gsl_sf_bessel_I0_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled regular modified cylindrical
+ Bessel function of zeroth order \exp(-|x|) I_0(x).
+
+ -- Function: double gsl_sf_bessel_I1_scaled (double X)
+ -- Function: int gsl_sf_bessel_I1_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled regular modified cylindrical
+ Bessel function of first order \exp(-|x|) I_1(x).
+
+ -- Function: double gsl_sf_bessel_In_scaled (int N, double X)
+ -- Function: int gsl_sf_bessel_In_scaled_e (int N, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the scaled regular modified cylindrical
+ Bessel function of order N, \exp(-|x|) I_n(x)
+
+ -- Function: int gsl_sf_bessel_In_scaled_array (int NMIN, int NMAX,
+ double X, double RESULT_ARRAY[])
+ This routine computes the values of the scaled regular cylindrical
+ Bessel functions \exp(-|x|) I_n(x) for n from NMIN to NMAX
+ inclusive, storing the results in the array RESULT_ARRAY. The
+ start of the range NMIN must be positive or zero. The values are
+ computed using recurrence relations for efficiency, and therefore
+ may differ slightly from the exact values.
+
+
+File: gsl-ref.info, Node: Irregular Modified Cylindrical Bessel Functions, Next: Regular Spherical Bessel Functions, Prev: Regular Modified Cylindrical Bessel Functions, Up: Bessel Functions
+
+7.5.4 Irregular Modified Cylindrical Bessel Functions
+-----------------------------------------------------
+
+ -- Function: double gsl_sf_bessel_K0 (double X)
+ -- Function: int gsl_sf_bessel_K0_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular modified cylindrical Bessel
+ function of zeroth order, K_0(x), for x > 0.
+
+ -- Function: double gsl_sf_bessel_K1 (double X)
+ -- Function: int gsl_sf_bessel_K1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular modified cylindrical Bessel
+ function of first order, K_1(x), for x > 0.
+
+ -- Function: double gsl_sf_bessel_Kn (int N, double X)
+ -- Function: int gsl_sf_bessel_Kn_e (int N, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the irregular modified cylindrical Bessel
+ function of order N, K_n(x), for x > 0.
+
+ -- Function: int gsl_sf_bessel_Kn_array (int NMIN, int NMAX, double X,
+ double RESULT_ARRAY[])
+ This routine computes the values of the irregular modified
+ cylindrical Bessel functions K_n(x) for n from NMIN to NMAX
+ inclusive, storing the results in the array RESULT_ARRAY. The
+ start of the range NMIN must be positive or zero. The domain of
+ the function is x>0. The values are computed using recurrence
+ relations for efficiency, and therefore may differ slightly from
+ the exact values.
+
+ -- Function: double gsl_sf_bessel_K0_scaled (double X)
+ -- Function: int gsl_sf_bessel_K0_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled irregular modified cylindrical
+ Bessel function of zeroth order \exp(x) K_0(x) for x>0.
+
+ -- Function: double gsl_sf_bessel_K1_scaled (double X)
+ -- Function: int gsl_sf_bessel_K1_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled irregular modified cylindrical
+ Bessel function of first order \exp(x) K_1(x) for x>0.
+
+ -- Function: double gsl_sf_bessel_Kn_scaled (int N, double X)
+ -- Function: int gsl_sf_bessel_Kn_scaled_e (int N, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the scaled irregular modified cylindrical
+ Bessel function of order N, \exp(x) K_n(x), for x>0.
+
+ -- Function: int gsl_sf_bessel_Kn_scaled_array (int NMIN, int NMAX,
+ double X, double RESULT_ARRAY[])
+ This routine computes the values of the scaled irregular
+ cylindrical Bessel functions \exp(x) K_n(x) for n from NMIN to
+ NMAX inclusive, storing the results in the array RESULT_ARRAY. The
+ start of the range NMIN must be positive or zero. The domain of
+ the function is x>0. The values are computed using recurrence
+ relations for efficiency, and therefore may differ slightly from
+ the exact values.
+
+
+File: gsl-ref.info, Node: Regular Spherical Bessel Functions, Next: Irregular Spherical Bessel Functions, Prev: Irregular Modified Cylindrical Bessel Functions, Up: Bessel Functions
+
+7.5.5 Regular Spherical Bessel Functions
+----------------------------------------
+
+ -- Function: double gsl_sf_bessel_j0 (double X)
+ -- Function: int gsl_sf_bessel_j0_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular spherical Bessel function of
+ zeroth order, j_0(x) = \sin(x)/x.
+
+ -- Function: double gsl_sf_bessel_j1 (double X)
+ -- Function: int gsl_sf_bessel_j1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular spherical Bessel function of
+ first order, j_1(x) = (\sin(x)/x - \cos(x))/x.
+
+ -- Function: double gsl_sf_bessel_j2 (double X)
+ -- Function: int gsl_sf_bessel_j2_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regular spherical Bessel function of
+ second order, j_2(x) = ((3/x^2 - 1)\sin(x) - 3\cos(x)/x)/x.
+
+ -- Function: double gsl_sf_bessel_jl (int L, double X)
+ -- Function: int gsl_sf_bessel_jl_e (int L, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the regular spherical Bessel function of
+ order L, j_l(x), for l >= 0 and x >= 0.
+
+ -- Function: int gsl_sf_bessel_jl_array (int LMAX, double X, double
+ RESULT_ARRAY[])
+ This routine computes the values of the regular spherical Bessel
+ functions j_l(x) for l from 0 to LMAX inclusive for lmax >= 0 and
+ x >= 0, storing the results in the array RESULT_ARRAY. The values
+ are computed using recurrence relations for efficiency, and
+ therefore may differ slightly from the exact values.
+
+ -- Function: int gsl_sf_bessel_jl_steed_array (int LMAX, double X,
+ double * JL_X_ARRAY)
+ This routine uses Steed's method to compute the values of the
+ regular spherical Bessel functions j_l(x) for l from 0 to LMAX
+ inclusive for lmax >= 0 and x >= 0, storing the results in the
+ array RESULT_ARRAY. The Steed/Barnett algorithm is described in
+ `Comp. Phys. Comm.' 21, 297 (1981). Steed's method is more stable
+ than the recurrence used in the other functions but is also slower.
+
+
+File: gsl-ref.info, Node: Irregular Spherical Bessel Functions, Next: Regular Modified Spherical Bessel Functions, Prev: Regular Spherical Bessel Functions, Up: Bessel Functions
+
+7.5.6 Irregular Spherical Bessel Functions
+------------------------------------------
+
+ -- Function: double gsl_sf_bessel_y0 (double X)
+ -- Function: int gsl_sf_bessel_y0_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular spherical Bessel function of
+ zeroth order, y_0(x) = -\cos(x)/x.
+
+ -- Function: double gsl_sf_bessel_y1 (double X)
+ -- Function: int gsl_sf_bessel_y1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular spherical Bessel function of
+ first order, y_1(x) = -(\cos(x)/x + \sin(x))/x.
+
+ -- Function: double gsl_sf_bessel_y2 (double X)
+ -- Function: int gsl_sf_bessel_y2_e (double X, gsl_sf_result * RESULT)
+ These routines compute the irregular spherical Bessel function of
+ second order, y_2(x) = (-3/x^3 + 1/x)\cos(x) - (3/x^2)\sin(x).
+
+ -- Function: double gsl_sf_bessel_yl (int L, double X)
+ -- Function: int gsl_sf_bessel_yl_e (int L, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the irregular spherical Bessel function of
+ order L, y_l(x), for l >= 0.
+
+ -- Function: int gsl_sf_bessel_yl_array (int LMAX, double X, double
+ RESULT_ARRAY[])
+ This routine computes the values of the irregular spherical Bessel
+ functions y_l(x) for l from 0 to LMAX inclusive for lmax >= 0,
+ storing the results in the array RESULT_ARRAY. The values are
+ computed using recurrence relations for efficiency, and therefore
+ may differ slightly from the exact values.
+
+
+File: gsl-ref.info, Node: Regular Modified Spherical Bessel Functions, Next: Irregular Modified Spherical Bessel Functions, Prev: Irregular Spherical Bessel Functions, Up: Bessel Functions
+
+7.5.7 Regular Modified Spherical Bessel Functions
+-------------------------------------------------
+
+The regular modified spherical Bessel functions i_l(x) are related to
+the modified Bessel functions of fractional order, i_l(x) =
+\sqrt{\pi/(2x)} I_{l+1/2}(x)
+
+ -- Function: double gsl_sf_bessel_i0_scaled (double X)
+ -- Function: int gsl_sf_bessel_i0_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled regular modified spherical Bessel
+ function of zeroth order, \exp(-|x|) i_0(x).
+
+ -- Function: double gsl_sf_bessel_i1_scaled (double X)
+ -- Function: int gsl_sf_bessel_i1_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled regular modified spherical Bessel
+ function of first order, \exp(-|x|) i_1(x).
+
+ -- Function: double gsl_sf_bessel_i2_scaled (double X)
+ -- Function: int gsl_sf_bessel_i2_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled regular modified spherical Bessel
+ function of second order, \exp(-|x|) i_2(x)
+
+ -- Function: double gsl_sf_bessel_il_scaled (int L, double X)
+ -- Function: int gsl_sf_bessel_il_scaled_e (int L, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the scaled regular modified spherical Bessel
+ function of order L, \exp(-|x|) i_l(x)
+
+ -- Function: int gsl_sf_bessel_il_scaled_array (int LMAX, double X,
+ double RESULT_ARRAY[])
+ This routine computes the values of the scaled regular modified
+ cylindrical Bessel functions \exp(-|x|) i_l(x) for l from 0 to
+ LMAX inclusive for lmax >= 0, storing the results in the array
+ RESULT_ARRAY. The values are computed using recurrence relations
+ for efficiency, and therefore may differ slightly from the exact
+ values.
+
+
+File: gsl-ref.info, Node: Irregular Modified Spherical Bessel Functions, Next: Regular Bessel Function - Fractional Order, Prev: Regular Modified Spherical Bessel Functions, Up: Bessel Functions
+
+7.5.8 Irregular Modified Spherical Bessel Functions
+---------------------------------------------------
+
+The irregular modified spherical Bessel functions k_l(x) are related to
+the irregular modified Bessel functions of fractional order, k_l(x) =
+\sqrt{\pi/(2x)} K_{l+1/2}(x).
+
+ -- Function: double gsl_sf_bessel_k0_scaled (double X)
+ -- Function: int gsl_sf_bessel_k0_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled irregular modified spherical
+ Bessel function of zeroth order, \exp(x) k_0(x), for x>0.
+
+ -- Function: double gsl_sf_bessel_k1_scaled (double X)
+ -- Function: int gsl_sf_bessel_k1_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled irregular modified spherical
+ Bessel function of first order, \exp(x) k_1(x), for x>0.
+
+ -- Function: double gsl_sf_bessel_k2_scaled (double X)
+ -- Function: int gsl_sf_bessel_k2_scaled_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the scaled irregular modified spherical
+ Bessel function of second order, \exp(x) k_2(x), for x>0.
+
+ -- Function: double gsl_sf_bessel_kl_scaled (int L, double X)
+ -- Function: int gsl_sf_bessel_kl_scaled_e (int L, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the scaled irregular modified spherical
+ Bessel function of order L, \exp(x) k_l(x), for x>0.
+
+ -- Function: int gsl_sf_bessel_kl_scaled_array (int LMAX, double X,
+ double RESULT_ARRAY[])
+ This routine computes the values of the scaled irregular modified
+ spherical Bessel functions \exp(x) k_l(x) for l from 0 to LMAX
+ inclusive for lmax >= 0 and x>0, storing the results in the array
+ RESULT_ARRAY. The values are computed using recurrence relations
+ for efficiency, and therefore may differ slightly from the exact
+ values.
+
+
+File: gsl-ref.info, Node: Regular Bessel Function - Fractional Order, Next: Irregular Bessel Functions - Fractional Order, Prev: Irregular Modified Spherical Bessel Functions, Up: Bessel Functions
+
+7.5.9 Regular Bessel Function--Fractional Order
+-----------------------------------------------
+
+ -- Function: double gsl_sf_bessel_Jnu (double NU, double X)
+ -- Function: int gsl_sf_bessel_Jnu_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the regular cylindrical Bessel function of
+ fractional order \nu, J_\nu(x).
+
+ -- Function: int gsl_sf_bessel_sequence_Jnu_e (double NU, gsl_mode_t
+ MODE, size_t SIZE, double V[])
+ This function computes the regular cylindrical Bessel function of
+ fractional order \nu, J_\nu(x), evaluated at a series of x values.
+ The array V of length SIZE contains the x values. They are
+ assumed to be strictly ordered and positive. The array is
+ over-written with the values of J_\nu(x_i).
+
+
+File: gsl-ref.info, Node: Irregular Bessel Functions - Fractional Order, Next: Regular Modified Bessel Functions - Fractional Order, Prev: Regular Bessel Function - Fractional Order, Up: Bessel Functions
+
+7.5.10 Irregular Bessel Functions--Fractional Order
+---------------------------------------------------
+
+ -- Function: double gsl_sf_bessel_Ynu (double NU, double X)
+ -- Function: int gsl_sf_bessel_Ynu_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the irregular cylindrical Bessel function of
+ fractional order \nu, Y_\nu(x).
+
+
+File: gsl-ref.info, Node: Regular Modified Bessel Functions - Fractional Order, Next: Irregular Modified Bessel Functions - Fractional Order, Prev: Irregular Bessel Functions - Fractional Order, Up: Bessel Functions
+
+7.5.11 Regular Modified Bessel Functions--Fractional Order
+----------------------------------------------------------
+
+ -- Function: double gsl_sf_bessel_Inu (double NU, double X)
+ -- Function: int gsl_sf_bessel_Inu_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the regular modified Bessel function of
+ fractional order \nu, I_\nu(x) for x>0, \nu>0.
+
+ -- Function: double gsl_sf_bessel_Inu_scaled (double NU, double X)
+ -- Function: int gsl_sf_bessel_Inu_scaled_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the scaled regular modified Bessel function
+ of fractional order \nu, \exp(-|x|)I_\nu(x) for x>0, \nu>0.
+
+
+File: gsl-ref.info, Node: Irregular Modified Bessel Functions - Fractional Order, Next: Zeros of Regular Bessel Functions, Prev: Regular Modified Bessel Functions - Fractional Order, Up: Bessel Functions
+
+7.5.12 Irregular Modified Bessel Functions--Fractional Order
+------------------------------------------------------------
+
+ -- Function: double gsl_sf_bessel_Knu (double NU, double X)
+ -- Function: int gsl_sf_bessel_Knu_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the irregular modified Bessel function of
+ fractional order \nu, K_\nu(x) for x>0, \nu>0.
+
+ -- Function: double gsl_sf_bessel_lnKnu (double NU, double X)
+ -- Function: int gsl_sf_bessel_lnKnu_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the logarithm of the irregular modified
+ Bessel function of fractional order \nu, \ln(K_\nu(x)) for x>0,
+ \nu>0.
+
+ -- Function: double gsl_sf_bessel_Knu_scaled (double NU, double X)
+ -- Function: int gsl_sf_bessel_Knu_scaled_e (double NU, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the scaled irregular modified Bessel
+ function of fractional order \nu, \exp(+|x|) K_\nu(x) for x>0,
+ \nu>0.
+
+
+File: gsl-ref.info, Node: Zeros of Regular Bessel Functions, Prev: Irregular Modified Bessel Functions - Fractional Order, Up: Bessel Functions
+
+7.5.13 Zeros of Regular Bessel Functions
+----------------------------------------
+
+ -- Function: double gsl_sf_bessel_zero_J0 (unsigned int S)
+ -- Function: int gsl_sf_bessel_zero_J0_e (unsigned int S,
+ gsl_sf_result * RESULT)
+ These routines compute the location of the S-th positive zero of
+ the Bessel function J_0(x).
+
+ -- Function: double gsl_sf_bessel_zero_J1 (unsigned int S)
+ -- Function: int gsl_sf_bessel_zero_J1_e (unsigned int S,
+ gsl_sf_result * RESULT)
+ These routines compute the location of the S-th positive zero of
+ the Bessel function J_1(x).
+
+ -- Function: double gsl_sf_bessel_zero_Jnu (double NU, unsigned int S)
+ -- Function: int gsl_sf_bessel_zero_Jnu_e (double NU, unsigned int S,
+ gsl_sf_result * RESULT)
+ These routines compute the location of the S-th positive zero of
+ the Bessel function J_\nu(x). The current implementation does not
+ support negative values of NU.
+
+
+File: gsl-ref.info, Node: Clausen Functions, Next: Coulomb Functions, Prev: Bessel Functions, Up: Special Functions
+
+7.6 Clausen Functions
+=====================
+
+The Clausen function is defined by the following integral,
+
+ Cl_2(x) = - \int_0^x dt \log(2 \sin(t/2))
+
+It is related to the dilogarithm by Cl_2(\theta) = \Im
+Li_2(\exp(i\theta)). The Clausen functions are declared in the header
+file `gsl_sf_clausen.h'.
+
+ -- Function: double gsl_sf_clausen (double X)
+ -- Function: int gsl_sf_clausen_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Clausen integral Cl_2(x).
+
+
+File: gsl-ref.info, Node: Coulomb Functions, Next: Coupling Coefficients, Prev: Clausen Functions, Up: Special Functions
+
+7.7 Coulomb Functions
+=====================
+
+The prototypes of the Coulomb functions are declared in the header file
+`gsl_sf_coulomb.h'. Both bound state and scattering solutions are
+available.
+
+* Menu:
+
+* Normalized Hydrogenic Bound States::
+* Coulomb Wave Functions::
+* Coulomb Wave Function Normalization Constant::
+
+
+File: gsl-ref.info, Node: Normalized Hydrogenic Bound States, Next: Coulomb Wave Functions, Up: Coulomb Functions
+
+7.7.1 Normalized Hydrogenic Bound States
+----------------------------------------
+
+ -- Function: double gsl_sf_hydrogenicR_1 (double Z, double R)
+ -- Function: int gsl_sf_hydrogenicR_1_e (double Z, double R,
+ gsl_sf_result * RESULT)
+ These routines compute the lowest-order normalized hydrogenic bound
+ state radial wavefunction R_1 := 2Z \sqrt{Z} \exp(-Z r).
+
+ -- Function: double gsl_sf_hydrogenicR (int N, int L, double Z, double
+ R)
+ -- Function: int gsl_sf_hydrogenicR_e (int N, int L, double Z, double
+ R, gsl_sf_result * RESULT)
+ These routines compute the N-th normalized hydrogenic bound state
+ radial wavefunction,
+
+ R_n := 2 (Z^{3/2}/n^2) \sqrt{(n-l-1)!/(n+l)!} \exp(-Z r/n) (2Zr/n)^l
+ L^{2l+1}_{n-l-1}(2Zr/n).
+
+ where L^a_b(x) is the generalized Laguerre polynomial (*note
+ Laguerre Functions::). The normalization is chosen such that the
+ wavefunction \psi is given by \psi(n,l,r) = R_n Y_{lm}.
+
+
+File: gsl-ref.info, Node: Coulomb Wave Functions, Next: Coulomb Wave Function Normalization Constant, Prev: Normalized Hydrogenic Bound States, Up: Coulomb Functions
+
+7.7.2 Coulomb Wave Functions
+----------------------------
+
+The Coulomb wave functions F_L(\eta,x), G_L(\eta,x) are described in
+Abramowitz & Stegun, Chapter 14. Because there can be a large dynamic
+range of values for these functions, overflows are handled gracefully.
+If an overflow occurs, `GSL_EOVRFLW' is signalled and exponent(s) are
+returned through the modifiable parameters EXP_F, EXP_G. The full
+solution can be reconstructed from the following relations,
+
+ F_L(eta,x) = fc[k_L] * exp(exp_F)
+ G_L(eta,x) = gc[k_L] * exp(exp_G)
+
+ F_L'(eta,x) = fcp[k_L] * exp(exp_F)
+ G_L'(eta,x) = gcp[k_L] * exp(exp_G)
+
+
+ -- Function: int gsl_sf_coulomb_wave_FG_e (double ETA, double X,
+ double L_F, int K, gsl_sf_result * F, gsl_sf_result * FP,
+ gsl_sf_result * G, gsl_sf_result * GP, double * EXP_F, double
+ * EXP_G)
+ This function computes the Coulomb wave functions F_L(\eta,x),
+ G_{L-k}(\eta,x) and their derivatives F'_L(\eta,x),
+ G'_{L-k}(\eta,x) with respect to x. The parameters are restricted
+ to L, L-k > -1/2, x > 0 and integer k. Note that L itself is not
+ restricted to being an integer. The results are stored in the
+ parameters F, G for the function values and FP, GP for the
+ derivative values. If an overflow occurs, `GSL_EOVRFLW' is
+ returned and scaling exponents are stored in the modifiable
+ parameters EXP_F, EXP_G.
+
+ -- Function: int gsl_sf_coulomb_wave_F_array (double L_MIN, int KMAX,
+ double ETA, double X, double FC_ARRAY[], double * F_EXPONENT)
+ This function computes the Coulomb wave function F_L(\eta,x) for L
+ = Lmin \dots Lmin + kmax, storing the results in FC_ARRAY. In the
+ case of overflow the exponent is stored in F_EXPONENT.
+
+ -- Function: int gsl_sf_coulomb_wave_FG_array (double L_MIN, int KMAX,
+ double ETA, double X, double FC_ARRAY[], double GC_ARRAY[],
+ double * F_EXPONENT, double * G_EXPONENT)
+ This function computes the functions F_L(\eta,x), G_L(\eta,x) for
+ L = Lmin \dots Lmin + kmax storing the results in FC_ARRAY and
+ GC_ARRAY. In the case of overflow the exponents are stored in
+ F_EXPONENT and G_EXPONENT.
+
+ -- Function: int gsl_sf_coulomb_wave_FGp_array (double L_MIN, int
+ KMAX, double ETA, double X, double FC_ARRAY[], double
+ FCP_ARRAY[], double GC_ARRAY[], double GCP_ARRAY[], double *
+ F_EXPONENT, double * G_EXPONENT)
+ This function computes the functions F_L(\eta,x), G_L(\eta,x) and
+ their derivatives F'_L(\eta,x), G'_L(\eta,x) for L = Lmin \dots
+ Lmin + kmax storing the results in FC_ARRAY, GC_ARRAY, FCP_ARRAY
+ and GCP_ARRAY. In the case of overflow the exponents are stored
+ in F_EXPONENT and G_EXPONENT.
+
+ -- Function: int gsl_sf_coulomb_wave_sphF_array (double L_MIN, int
+ KMAX, double ETA, double X, double FC_ARRAY[], double
+ F_EXPONENT[])
+ This function computes the Coulomb wave function divided by the
+ argument F_L(\eta, x)/x for L = Lmin \dots Lmin + kmax, storing the
+ results in FC_ARRAY. In the case of overflow the exponent is
+ stored in F_EXPONENT. This function reduces to spherical Bessel
+ functions in the limit \eta \to 0.
+
+
+File: gsl-ref.info, Node: Coulomb Wave Function Normalization Constant, Prev: Coulomb Wave Functions, Up: Coulomb Functions
+
+7.7.3 Coulomb Wave Function Normalization Constant
+--------------------------------------------------
+
+The Coulomb wave function normalization constant is defined in
+Abramowitz 14.1.7.
+
+ -- Function: int gsl_sf_coulomb_CL_e (double L, double ETA,
+ gsl_sf_result * RESULT)
+ This function computes the Coulomb wave function normalization
+ constant C_L(\eta) for L > -1.
+
+ -- Function: int gsl_sf_coulomb_CL_array (double LMIN, int KMAX,
+ double ETA, double CL[])
+ This function computes the Coulomb wave function normalization
+ constant C_L(\eta) for L = Lmin \dots Lmin + kmax, Lmin > -1.
+
+
+File: gsl-ref.info, Node: Coupling Coefficients, Next: Dawson Function, Prev: Coulomb Functions, Up: Special Functions
+
+7.8 Coupling Coefficients
+=========================
+
+The Wigner 3-j, 6-j and 9-j symbols give the coupling coefficients for
+combined angular momentum vectors. Since the arguments of the standard
+coupling coefficient functions are integer or half-integer, the
+arguments of the following functions are, by convention, integers equal
+to twice the actual spin value. For information on the 3-j coefficients
+see Abramowitz & Stegun, Section 27.9. The functions described in this
+section are declared in the header file `gsl_sf_coupling.h'.
+
+* Menu:
+
+* 3-j Symbols::
+* 6-j Symbols::
+* 9-j Symbols::
+
+
+File: gsl-ref.info, Node: 3-j Symbols, Next: 6-j Symbols, Up: Coupling Coefficients
+
+7.8.1 3-j Symbols
+-----------------
+
+ -- Function: double gsl_sf_coupling_3j (int TWO_JA, int TWO_JB, int
+ TWO_JC, int TWO_MA, int TWO_MB, int TWO_MC)
+ -- Function: int gsl_sf_coupling_3j_e (int TWO_JA, int TWO_JB, int
+ TWO_JC, int TWO_MA, int TWO_MB, int TWO_MC, gsl_sf_result *
+ RESULT)
+ These routines compute the Wigner 3-j coefficient,
+
+ (ja jb jc
+ ma mb mc)
+
+ where the arguments are given in half-integer units, ja =
+ TWO_JA/2, ma = TWO_MA/2, etc.
+
+
+File: gsl-ref.info, Node: 6-j Symbols, Next: 9-j Symbols, Prev: 3-j Symbols, Up: Coupling Coefficients
+
+7.8.2 6-j Symbols
+-----------------
+
+ -- Function: double gsl_sf_coupling_6j (int TWO_JA, int TWO_JB, int
+ TWO_JC, int TWO_JD, int TWO_JE, int TWO_JF)
+ -- Function: int gsl_sf_coupling_6j_e (int TWO_JA, int TWO_JB, int
+ TWO_JC, int TWO_JD, int TWO_JE, int TWO_JF, gsl_sf_result *
+ RESULT)
+ These routines compute the Wigner 6-j coefficient,
+
+ {ja jb jc
+ jd je jf}
+
+ where the arguments are given in half-integer units, ja =
+ TWO_JA/2, ma = TWO_MA/2, etc.
+
+
+File: gsl-ref.info, Node: 9-j Symbols, Prev: 6-j Symbols, Up: Coupling Coefficients
+
+7.8.3 9-j Symbols
+-----------------
+
+ -- Function: double gsl_sf_coupling_9j (int TWO_JA, int TWO_JB, int
+ TWO_JC, int TWO_JD, int TWO_JE, int TWO_JF, int TWO_JG, int
+ TWO_JH, int TWO_JI)
+ -- Function: int gsl_sf_coupling_9j_e (int TWO_JA, int TWO_JB, int
+ TWO_JC, int TWO_JD, int TWO_JE, int TWO_JF, int TWO_JG, int
+ TWO_JH, int TWO_JI, gsl_sf_result * RESULT)
+ These routines compute the Wigner 9-j coefficient,
+
+ {ja jb jc
+ jd je jf
+ jg jh ji}
+
+ where the arguments are given in half-integer units, ja =
+ TWO_JA/2, ma = TWO_MA/2, etc.
+
+
+File: gsl-ref.info, Node: Dawson Function, Next: Debye Functions, Prev: Coupling Coefficients, Up: Special Functions
+
+7.9 Dawson Function
+===================
+
+The Dawson integral is defined by \exp(-x^2) \int_0^x dt \exp(t^2). A
+table of Dawson's integral can be found in Abramowitz & Stegun, Table
+7.5. The Dawson functions are declared in the header file
+`gsl_sf_dawson.h'.
+
+ -- Function: double gsl_sf_dawson (double X)
+ -- Function: int gsl_sf_dawson_e (double X, gsl_sf_result * RESULT)
+ These routines compute the value of Dawson's integral for X.
+
+
+File: gsl-ref.info, Node: Debye Functions, Next: Dilogarithm, Prev: Dawson Function, Up: Special Functions
+
+7.10 Debye Functions
+====================
+
+The Debye functions D_n(x) are defined by the following integral,
+
+ D_n(x) = n/x^n \int_0^x dt (t^n/(e^t - 1))
+
+For further information see Abramowitz & Stegun, Section 27.1. The
+Debye functions are declared in the header file `gsl_sf_debye.h'.
+
+ -- Function: double gsl_sf_debye_1 (double X)
+ -- Function: int gsl_sf_debye_1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the first-order Debye function D_1(x) =
+ (1/x) \int_0^x dt (t/(e^t - 1)).
+
+ -- Function: double gsl_sf_debye_2 (double X)
+ -- Function: int gsl_sf_debye_2_e (double X, gsl_sf_result * RESULT)
+ These routines compute the second-order Debye function D_2(x) =
+ (2/x^2) \int_0^x dt (t^2/(e^t - 1)).
+
+ -- Function: double gsl_sf_debye_3 (double X)
+ -- Function: int gsl_sf_debye_3_e (double X, gsl_sf_result * RESULT)
+ These routines compute the third-order Debye function D_3(x) =
+ (3/x^3) \int_0^x dt (t^3/(e^t - 1)).
+
+ -- Function: double gsl_sf_debye_4 (double X)
+ -- Function: int gsl_sf_debye_4_e (double X, gsl_sf_result * RESULT)
+ These routines compute the fourth-order Debye function D_4(x) =
+ (4/x^4) \int_0^x dt (t^4/(e^t - 1)).
+
+ -- Function: double gsl_sf_debye_5 (double X)
+ -- Function: int gsl_sf_debye_5_e (double X, gsl_sf_result * RESULT)
+ These routines compute the fifth-order Debye function D_5(x) =
+ (5/x^5) \int_0^x dt (t^5/(e^t - 1)).
+
+ -- Function: double gsl_sf_debye_6 (double X)
+ -- Function: int gsl_sf_debye_6_e (double X, gsl_sf_result * RESULT)
+ These routines compute the sixth-order Debye function D_6(x) =
+ (6/x^6) \int_0^x dt (t^6/(e^t - 1)).
+
+
+File: gsl-ref.info, Node: Dilogarithm, Next: Elementary Operations, Prev: Debye Functions, Up: Special Functions
+
+7.11 Dilogarithm
+================
+
+The functions described in this section are declared in the header file
+`gsl_sf_dilog.h'.
+
+* Menu:
+
+* Real Argument::
+* Complex Argument::
+
+
+File: gsl-ref.info, Node: Real Argument, Next: Complex Argument, Up: Dilogarithm
+
+7.11.1 Real Argument
+--------------------
+
+ -- Function: double gsl_sf_dilog (double X)
+ -- Function: int gsl_sf_dilog_e (double X, gsl_sf_result * RESULT)
+ These routines compute the dilogarithm for a real argument. In
+ Lewin's notation this is Li_2(x), the real part of the dilogarithm
+ of a real x. It is defined by the integral representation Li_2(x)
+ = - \Re \int_0^x ds \log(1-s) / s. Note that \Im(Li_2(x)) = 0 for
+ x <= 1, and -\pi\log(x) for x > 1.
+
+
+
+File: gsl-ref.info, Node: Complex Argument, Prev: Real Argument, Up: Dilogarithm
+
+7.11.2 Complex Argument
+-----------------------
+
+ -- Function: int gsl_sf_complex_dilog_e (double R, double THETA,
+ gsl_sf_result * RESULT_RE, gsl_sf_result * RESULT_IM)
+ This function computes the full complex-valued dilogarithm for the
+ complex argument z = r \exp(i \theta). The real and imaginary
+ parts of the result are returned in RESULT_RE, RESULT_IM.
+
+
+File: gsl-ref.info, Node: Elementary Operations, Next: Elliptic Integrals, Prev: Dilogarithm, Up: Special Functions
+
+7.12 Elementary Operations
+==========================
+
+The following functions allow for the propagation of errors when
+combining quantities by multiplication. The functions are declared in
+the header file `gsl_sf_elementary.h'.
+
+ -- Function: int gsl_sf_multiply_e (double X, double Y, gsl_sf_result
+ * RESULT)
+ This function multiplies X and Y storing the product and its
+ associated error in RESULT.
+
+ -- Function: int gsl_sf_multiply_err_e (double X, double DX, double Y,
+ double DY, gsl_sf_result * RESULT)
+ This function multiplies X and Y with associated absolute errors
+ DX and DY. The product xy +/- xy \sqrt((dx/x)^2 +(dy/y)^2) is
+ stored in RESULT.
+
+
+File: gsl-ref.info, Node: Elliptic Integrals, Next: Elliptic Functions (Jacobi), Prev: Elementary Operations, Up: Special Functions
+
+7.13 Elliptic Integrals
+=======================
+
+The functions described in this section are declared in the header file
+`gsl_sf_ellint.h'. Further information about the elliptic integrals
+can be found in Abramowitz & Stegun, Chapter 17.
+
+* Menu:
+
+* Definition of Legendre Forms::
+* Definition of Carlson Forms::
+* Legendre Form of Complete Elliptic Integrals::
+* Legendre Form of Incomplete Elliptic Integrals::
+* Carlson Forms::
+
+
+File: gsl-ref.info, Node: Definition of Legendre Forms, Next: Definition of Carlson Forms, Up: Elliptic Integrals
+
+7.13.1 Definition of Legendre Forms
+-----------------------------------
+
+The Legendre forms of elliptic integrals F(\phi,k), E(\phi,k) and
+\Pi(\phi,k,n) are defined by,
+
+ F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))
+
+ E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))
+
+ Pi(\phi,k,n) = \int_0^\phi dt 1/((1 + n \sin^2(t))\sqrt(1 - k^2 \sin^2(t)))
+
+The complete Legendre forms are denoted by K(k) = F(\pi/2, k) and E(k)
+= E(\pi/2, k).
+
+ The notation used here is based on Carlson, `Numerische Mathematik'
+33 (1979) 1 and differs slightly from that used by Abramowitz & Stegun,
+where the functions are given in terms of the parameter m = k^2 and n
+is replaced by -n.
+
+
+File: gsl-ref.info, Node: Definition of Carlson Forms, Next: Legendre Form of Complete Elliptic Integrals, Prev: Definition of Legendre Forms, Up: Elliptic Integrals
+
+7.13.2 Definition of Carlson Forms
+----------------------------------
+
+The Carlson symmetric forms of elliptical integrals RC(x,y), RD(x,y,z),
+RF(x,y,z) and RJ(x,y,z,p) are defined by,
+
+ RC(x,y) = 1/2 \int_0^\infty dt (t+x)^(-1/2) (t+y)^(-1)
+
+ RD(x,y,z) = 3/2 \int_0^\infty dt (t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-3/2)
+
+ RF(x,y,z) = 1/2 \int_0^\infty dt (t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-1/2)
+
+ RJ(x,y,z,p) = 3/2 \int_0^\infty dt
+ (t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-1/2) (t+p)^(-1)
+
+
+File: gsl-ref.info, Node: Legendre Form of Complete Elliptic Integrals, Next: Legendre Form of Incomplete Elliptic Integrals, Prev: Definition of Carlson Forms, Up: Elliptic Integrals
+
+7.13.3 Legendre Form of Complete Elliptic Integrals
+---------------------------------------------------
+
+ -- Function: double gsl_sf_ellint_Kcomp (double K, gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_Kcomp_e (double K, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute the complete elliptic integral K(k) to the
+ accuracy specified by the mode variable MODE. Note that
+ Abramowitz & Stegun define this function in terms of the parameter
+ m = k^2.
+
+ -- Function: double gsl_sf_ellint_Ecomp (double K, gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_Ecomp_e (double K, gsl_mode_t MODE,
+ gsl_sf_result * RESULT)
+ These routines compute the complete elliptic integral E(k) to the
+ accuracy specified by the mode variable MODE. Note that
+ Abramowitz & Stegun define this function in terms of the parameter
+ m = k^2.
+
+ -- Function: double gsl_sf_ellint_Pcomp (double K, double N,
+ gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_Pcomp_e (double K, double N, gsl_mode_t
+ MODE, gsl_sf_result * RESULT)
+ These routines compute the complete elliptic integral \Pi(k,n) to
+ the accuracy specified by the mode variable MODE. Note that
+ Abramowitz & Stegun define this function in terms of the
+ parameters m = k^2 and \sin^2(\alpha) = k^2, with the change of
+ sign n \to -n.
+
+
+File: gsl-ref.info, Node: Legendre Form of Incomplete Elliptic Integrals, Next: Carlson Forms, Prev: Legendre Form of Complete Elliptic Integrals, Up: Elliptic Integrals
+
+7.13.4 Legendre Form of Incomplete Elliptic Integrals
+-----------------------------------------------------
+
+ -- Function: double gsl_sf_ellint_F (double PHI, double K, gsl_mode_t
+ MODE)
+ -- Function: int gsl_sf_ellint_F_e (double PHI, double K, gsl_mode_t
+ MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral F(\phi,k)
+ to the accuracy specified by the mode variable MODE. Note that
+ Abramowitz & Stegun define this function in terms of the parameter
+ m = k^2.
+
+ -- Function: double gsl_sf_ellint_E (double PHI, double K, gsl_mode_t
+ MODE)
+ -- Function: int gsl_sf_ellint_E_e (double PHI, double K, gsl_mode_t
+ MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral E(\phi,k)
+ to the accuracy specified by the mode variable MODE. Note that
+ Abramowitz & Stegun define this function in terms of the parameter
+ m = k^2.
+
+ -- Function: double gsl_sf_ellint_P (double PHI, double K, double N,
+ gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_P_e (double PHI, double K, double N,
+ gsl_mode_t MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral
+ \Pi(\phi,k,n) to the accuracy specified by the mode variable MODE.
+ Note that Abramowitz & Stegun define this function in terms of the
+ parameters m = k^2 and \sin^2(\alpha) = k^2, with the change of
+ sign n \to -n.
+
+ -- Function: double gsl_sf_ellint_D (double PHI, double K, double N,
+ gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_D_e (double PHI, double K, double N,
+ gsl_mode_t MODE, gsl_sf_result * RESULT)
+ These functions compute the incomplete elliptic integral D(\phi,k)
+ which is defined through the Carlson form RD(x,y,z) by the
+ following relation,
+
+ D(\phi,k,n) = (1/3)(\sin(\phi))^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1).
+ The argument N is not used and will be removed in a future release.
+
+
+
+File: gsl-ref.info, Node: Carlson Forms, Prev: Legendre Form of Incomplete Elliptic Integrals, Up: Elliptic Integrals
+
+7.13.5 Carlson Forms
+--------------------
+
+ -- Function: double gsl_sf_ellint_RC (double X, double Y, gsl_mode_t
+ MODE)
+ -- Function: int gsl_sf_ellint_RC_e (double X, double Y, gsl_mode_t
+ MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral RC(x,y) to
+ the accuracy specified by the mode variable MODE.
+
+ -- Function: double gsl_sf_ellint_RD (double X, double Y, double Z,
+ gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_RD_e (double X, double Y, double Z,
+ gsl_mode_t MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral RD(x,y,z)
+ to the accuracy specified by the mode variable MODE.
+
+ -- Function: double gsl_sf_ellint_RF (double X, double Y, double Z,
+ gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_RF_e (double X, double Y, double Z,
+ gsl_mode_t MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral RF(x,y,z)
+ to the accuracy specified by the mode variable MODE.
+
+ -- Function: double gsl_sf_ellint_RJ (double X, double Y, double Z,
+ double P, gsl_mode_t MODE)
+ -- Function: int gsl_sf_ellint_RJ_e (double X, double Y, double Z,
+ double P, gsl_mode_t MODE, gsl_sf_result * RESULT)
+ These routines compute the incomplete elliptic integral RJ(x,y,z,p)
+ to the accuracy specified by the mode variable MODE.
+
+
+File: gsl-ref.info, Node: Elliptic Functions (Jacobi), Next: Error Functions, Prev: Elliptic Integrals, Up: Special Functions
+
+7.14 Elliptic Functions (Jacobi)
+================================
+
+The Jacobian Elliptic functions are defined in Abramowitz & Stegun,
+Chapter 16. The functions are declared in the header file
+`gsl_sf_elljac.h'.
+
+ -- Function: int gsl_sf_elljac_e (double U, double M, double * SN,
+ double * CN, double * DN)
+ This function computes the Jacobian elliptic functions sn(u|m),
+ cn(u|m), dn(u|m) by descending Landen transformations.
+
+
+File: gsl-ref.info, Node: Error Functions, Next: Exponential Functions, Prev: Elliptic Functions (Jacobi), Up: Special Functions
+
+7.15 Error Functions
+====================
+
+The error function is described in Abramowitz & Stegun, Chapter 7. The
+functions in this section are declared in the header file
+`gsl_sf_erf.h'.
+
+* Menu:
+
+* Error Function::
+* Complementary Error Function::
+* Log Complementary Error Function::
+* Probability functions::
+
+
+File: gsl-ref.info, Node: Error Function, Next: Complementary Error Function, Up: Error Functions
+
+7.15.1 Error Function
+---------------------
+
+ -- Function: double gsl_sf_erf (double X)
+ -- Function: int gsl_sf_erf_e (double X, gsl_sf_result * RESULT)
+ These routines compute the error function erf(x), where erf(x) =
+ (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2).
+
+
+File: gsl-ref.info, Node: Complementary Error Function, Next: Log Complementary Error Function, Prev: Error Function, Up: Error Functions
+
+7.15.2 Complementary Error Function
+-----------------------------------
+
+ -- Function: double gsl_sf_erfc (double X)
+ -- Function: int gsl_sf_erfc_e (double X, gsl_sf_result * RESULT)
+ These routines compute the complementary error function erfc(x) =
+ 1 - erf(x) = (2/\sqrt(\pi)) \int_x^\infty \exp(-t^2).
+
+
+File: gsl-ref.info, Node: Log Complementary Error Function, Next: Probability functions, Prev: Complementary Error Function, Up: Error Functions
+
+7.15.3 Log Complementary Error Function
+---------------------------------------
+
+ -- Function: double gsl_sf_log_erfc (double X)
+ -- Function: int gsl_sf_log_erfc_e (double X, gsl_sf_result * RESULT)
+ These routines compute the logarithm of the complementary error
+ function \log(\erfc(x)).
+
+
+File: gsl-ref.info, Node: Probability functions, Prev: Log Complementary Error Function, Up: Error Functions
+
+7.15.4 Probability functions
+----------------------------
+
+The probability functions for the Normal or Gaussian distribution are
+described in Abramowitz & Stegun, Section 26.2.
+
+ -- Function: double gsl_sf_erf_Z (double X)
+ -- Function: int gsl_sf_erf_Z_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Gaussian probability density function
+ Z(x) = (1/\sqrt{2\pi}) \exp(-x^2/2).
+
+ -- Function: double gsl_sf_erf_Q (double X)
+ -- Function: int gsl_sf_erf_Q_e (double X, gsl_sf_result * RESULT)
+ These routines compute the upper tail of the Gaussian probability
+ function Q(x) = (1/\sqrt{2\pi}) \int_x^\infty dt \exp(-t^2/2).
+
+ The "hazard function" for the normal distribution, also known as the
+inverse Mill's ratio, is defined as,
+
+ h(x) = Z(x)/Q(x) = \sqrt{2/\pi} \exp(-x^2 / 2) / \erfc(x/\sqrt 2)
+
+It decreases rapidly as x approaches -\infty and asymptotes to h(x)
+\sim x as x approaches +\infty.
+
+ -- Function: double gsl_sf_hazard (double X)
+ -- Function: int gsl_sf_hazard_e (double X, gsl_sf_result * RESULT)
+ These routines compute the hazard function for the normal
+ distribution.
+
+
+File: gsl-ref.info, Node: Exponential Functions, Next: Exponential Integrals, Prev: Error Functions, Up: Special Functions
+
+7.16 Exponential Functions
+==========================
+
+The functions described in this section are declared in the header file
+`gsl_sf_exp.h'.
+
+* Menu:
+
+* Exponential Function::
+* Relative Exponential Functions::
+* Exponentiation With Error Estimate::
+
+
+File: gsl-ref.info, Node: Exponential Function, Next: Relative Exponential Functions, Up: Exponential Functions
+
+7.16.1 Exponential Function
+---------------------------
+
+ -- Function: double gsl_sf_exp (double X)
+ -- Function: int gsl_sf_exp_e (double X, gsl_sf_result * RESULT)
+ These routines provide an exponential function \exp(x) using GSL
+ semantics and error checking.
+
+ -- Function: int gsl_sf_exp_e10_e (double X, gsl_sf_result_e10 *
+ RESULT)
+ This function computes the exponential \exp(x) using the
+ `gsl_sf_result_e10' type to return a result with extended range.
+ This function may be useful if the value of \exp(x) would overflow
+ the numeric range of `double'.
+
+ -- Function: double gsl_sf_exp_mult (double X, double Y)
+ -- Function: int gsl_sf_exp_mult_e (double X, double Y, gsl_sf_result
+ * RESULT)
+ These routines exponentiate X and multiply by the factor Y to
+ return the product y \exp(x).
+
+ -- Function: int gsl_sf_exp_mult_e10_e (const double X, const double
+ Y, gsl_sf_result_e10 * RESULT)
+ This function computes the product y \exp(x) using the
+ `gsl_sf_result_e10' type to return a result with extended numeric
+ range.
+
+
+File: gsl-ref.info, Node: Relative Exponential Functions, Next: Exponentiation With Error Estimate, Prev: Exponential Function, Up: Exponential Functions
+
+7.16.2 Relative Exponential Functions
+-------------------------------------
+
+ -- Function: double gsl_sf_expm1 (double X)
+ -- Function: int gsl_sf_expm1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the quantity \exp(x)-1 using an algorithm
+ that is accurate for small x.
+
+ -- Function: double gsl_sf_exprel (double X)
+ -- Function: int gsl_sf_exprel_e (double X, gsl_sf_result * RESULT)
+ These routines compute the quantity (\exp(x)-1)/x using an
+ algorithm that is accurate for small x. For small x the algorithm
+ is based on the expansion (\exp(x)-1)/x = 1 + x/2 + x^2/(2*3) +
+ x^3/(2*3*4) + \dots.
+
+ -- Function: double gsl_sf_exprel_2 (double X)
+ -- Function: int gsl_sf_exprel_2_e (double X, gsl_sf_result * RESULT)
+ These routines compute the quantity 2(\exp(x)-1-x)/x^2 using an
+ algorithm that is accurate for small x. For small x the algorithm
+ is based on the expansion 2(\exp(x)-1-x)/x^2 = 1 + x/3 + x^2/(3*4)
+ + x^3/(3*4*5) + \dots.
+
+ -- Function: double gsl_sf_exprel_n (int N, double X)
+ -- Function: int gsl_sf_exprel_n_e (int N, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the N-relative exponential, which is the
+ N-th generalization of the functions `gsl_sf_exprel' and
+ `gsl_sf_exprel2'. The N-relative exponential is given by,
+
+ exprel_N(x) = N!/x^N (\exp(x) - \sum_{k=0}^{N-1} x^k/k!)
+ = 1 + x/(N+1) + x^2/((N+1)(N+2)) + ...
+ = 1F1 (1,1+N,x)
+
+
+File: gsl-ref.info, Node: Exponentiation With Error Estimate, Prev: Relative Exponential Functions, Up: Exponential Functions
+
+7.16.3 Exponentiation With Error Estimate
+-----------------------------------------
+
+ -- Function: int gsl_sf_exp_err_e (double X, double DX, gsl_sf_result
+ * RESULT)
+ This function exponentiates X with an associated absolute error DX.
+
+ -- Function: int gsl_sf_exp_err_e10_e (double X, double DX,
+ gsl_sf_result_e10 * RESULT)
+ This function exponentiates a quantity X with an associated
+ absolute error DX using the `gsl_sf_result_e10' type to return a
+ result with extended range.
+
+ -- Function: int gsl_sf_exp_mult_err_e (double X, double DX, double Y,
+ double DY, gsl_sf_result * RESULT)
+ This routine computes the product y \exp(x) for the quantities X,
+ Y with associated absolute errors DX, DY.
+
+ -- Function: int gsl_sf_exp_mult_err_e10_e (double X, double DX,
+ double Y, double DY, gsl_sf_result_e10 * RESULT)
+ This routine computes the product y \exp(x) for the quantities X,
+ Y with associated absolute errors DX, DY using the
+ `gsl_sf_result_e10' type to return a result with extended range.
+
+
+File: gsl-ref.info, Node: Exponential Integrals, Next: Fermi-Dirac Function, Prev: Exponential Functions, Up: Special Functions
+
+7.17 Exponential Integrals
+==========================
+
+Information on the exponential integrals can be found in Abramowitz &
+Stegun, Chapter 5. These functions are declared in the header file
+`gsl_sf_expint.h'.
+
+* Menu:
+
+* Exponential Integral::
+* Ei(x)::
+* Hyperbolic Integrals::
+* Ei_3(x)::
+* Trigonometric Integrals::
+* Arctangent Integral::
+
+
+File: gsl-ref.info, Node: Exponential Integral, Next: Ei(x), Up: Exponential Integrals
+
+7.17.1 Exponential Integral
+---------------------------
+
+ -- Function: double gsl_sf_expint_E1 (double X)
+ -- Function: int gsl_sf_expint_E1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the exponential integral E_1(x),
+
+ E_1(x) := \Re \int_1^\infty dt \exp(-xt)/t.
+
+
+
+ -- Function: double gsl_sf_expint_E2 (double X)
+ -- Function: int gsl_sf_expint_E2_e (double X, gsl_sf_result * RESULT)
+ These routines compute the second-order exponential integral
+ E_2(x),
+
+ E_2(x) := \Re \int_1^\infty dt \exp(-xt)/t^2.
+
+
+
+
+File: gsl-ref.info, Node: Ei(x), Next: Hyperbolic Integrals, Prev: Exponential Integral, Up: Exponential Integrals
+
+7.17.2 Ei(x)
+------------
+
+ -- Function: double gsl_sf_expint_Ei (double X)
+ -- Function: int gsl_sf_expint_Ei_e (double X, gsl_sf_result * RESULT)
+ These routines compute the exponential integral Ei(x),
+
+ Ei(x) := - PV(\int_{-x}^\infty dt \exp(-t)/t)
+
+ where PV denotes the principal value of the integral.
+
+
+File: gsl-ref.info, Node: Hyperbolic Integrals, Next: Ei_3(x), Prev: Ei(x), Up: Exponential Integrals
+
+7.17.3 Hyperbolic Integrals
+---------------------------
+
+ -- Function: double gsl_sf_Shi (double X)
+ -- Function: int gsl_sf_Shi_e (double X, gsl_sf_result * RESULT)
+ These routines compute the integral Shi(x) = \int_0^x dt
+ \sinh(t)/t.
+
+ -- Function: double gsl_sf_Chi (double X)
+ -- Function: int gsl_sf_Chi_e (double X, gsl_sf_result * RESULT)
+ These routines compute the integral Chi(x) := \Re[ \gamma_E +
+ \log(x) + \int_0^x dt (\cosh[t]-1)/t] , where \gamma_E is the
+ Euler constant (available as the macro `M_EULER').
+
+
+File: gsl-ref.info, Node: Ei_3(x), Next: Trigonometric Integrals, Prev: Hyperbolic Integrals, Up: Exponential Integrals
+
+7.17.4 Ei_3(x)
+--------------
+
+ -- Function: double gsl_sf_expint_3 (double X)
+ -- Function: int gsl_sf_expint_3_e (double X, gsl_sf_result * RESULT)
+ These routines compute the third-order exponential integral
+ Ei_3(x) = \int_0^xdt \exp(-t^3) for x >= 0.
+
+
+File: gsl-ref.info, Node: Trigonometric Integrals, Next: Arctangent Integral, Prev: Ei_3(x), Up: Exponential Integrals
+
+7.17.5 Trigonometric Integrals
+------------------------------
+
+ -- Function: double gsl_sf_Si (const double X)
+ -- Function: int gsl_sf_Si_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Sine integral Si(x) = \int_0^x dt
+ \sin(t)/t.
+
+ -- Function: double gsl_sf_Ci (const double X)
+ -- Function: int gsl_sf_Ci_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Cosine integral Ci(x) = -\int_x^\infty
+ dt \cos(t)/t for x > 0.
+
+
+File: gsl-ref.info, Node: Arctangent Integral, Prev: Trigonometric Integrals, Up: Exponential Integrals
+
+7.17.6 Arctangent Integral
+--------------------------
+
+ -- Function: double gsl_sf_atanint (double X)
+ -- Function: int gsl_sf_atanint_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Arctangent integral, which is defined
+ as AtanInt(x) = \int_0^x dt \arctan(t)/t.
+
+
+File: gsl-ref.info, Node: Fermi-Dirac Function, Next: Gamma and Beta Functions, Prev: Exponential Integrals, Up: Special Functions
+
+7.18 Fermi-Dirac Function
+=========================
+
+The functions described in this section are declared in the header file
+`gsl_sf_fermi_dirac.h'.
+
+* Menu:
+
+* Complete Fermi-Dirac Integrals::
+* Incomplete Fermi-Dirac Integrals::
+
+
+File: gsl-ref.info, Node: Complete Fermi-Dirac Integrals, Next: Incomplete Fermi-Dirac Integrals, Up: Fermi-Dirac Function
+
+7.18.1 Complete Fermi-Dirac Integrals
+-------------------------------------
+
+The complete Fermi-Dirac integral F_j(x) is given by,
+
+ F_j(x) := (1/r\Gamma(j+1)) \int_0^\infty dt (t^j / (\exp(t-x) + 1))
+
+ -- Function: double gsl_sf_fermi_dirac_m1 (double X)
+ -- Function: int gsl_sf_fermi_dirac_m1_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral with an
+ index of -1. This integral is given by F_{-1}(x) = e^x / (1 +
+ e^x).
+
+ -- Function: double gsl_sf_fermi_dirac_0 (double X)
+ -- Function: int gsl_sf_fermi_dirac_0_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral with an
+ index of 0. This integral is given by F_0(x) = \ln(1 + e^x).
+
+ -- Function: double gsl_sf_fermi_dirac_1 (double X)
+ -- Function: int gsl_sf_fermi_dirac_1_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral with an
+ index of 1, F_1(x) = \int_0^\infty dt (t /(\exp(t-x)+1)).
+
+ -- Function: double gsl_sf_fermi_dirac_2 (double X)
+ -- Function: int gsl_sf_fermi_dirac_2_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral with an
+ index of 2, F_2(x) = (1/2) \int_0^\infty dt (t^2 /(\exp(t-x)+1)).
+
+ -- Function: double gsl_sf_fermi_dirac_int (int J, double X)
+ -- Function: int gsl_sf_fermi_dirac_int_e (int J, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the complete Fermi-Dirac integral with an
+ integer index of j, F_j(x) = (1/\Gamma(j+1)) \int_0^\infty dt (t^j
+ /(\exp(t-x)+1)).
+
+ -- Function: double gsl_sf_fermi_dirac_mhalf (double X)
+ -- Function: int gsl_sf_fermi_dirac_mhalf_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral
+ F_{-1/2}(x).
+
+ -- Function: double gsl_sf_fermi_dirac_half (double X)
+ -- Function: int gsl_sf_fermi_dirac_half_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral
+ F_{1/2}(x).
+
+ -- Function: double gsl_sf_fermi_dirac_3half (double X)
+ -- Function: int gsl_sf_fermi_dirac_3half_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the complete Fermi-Dirac integral
+ F_{3/2}(x).
+
+
+File: gsl-ref.info, Node: Incomplete Fermi-Dirac Integrals, Prev: Complete Fermi-Dirac Integrals, Up: Fermi-Dirac Function
+
+7.18.2 Incomplete Fermi-Dirac Integrals
+---------------------------------------
+
+The incomplete Fermi-Dirac integral F_j(x,b) is given by,
+
+ F_j(x,b) := (1/\Gamma(j+1)) \int_b^\infty dt (t^j / (\Exp(t-x) + 1))
+
+ -- Function: double gsl_sf_fermi_dirac_inc_0 (double X, double B)
+ -- Function: int gsl_sf_fermi_dirac_inc_0_e (double X, double B,
+ gsl_sf_result * RESULT)
+ These routines compute the incomplete Fermi-Dirac integral with an
+ index of zero, F_0(x,b) = \ln(1 + e^{b-x}) - (b-x).
+
+
+File: gsl-ref.info, Node: Gamma and Beta Functions, Next: Gegenbauer Functions, Prev: Fermi-Dirac Function, Up: Special Functions
+
+7.19 Gamma and Beta Functions
+=============================
+
+The functions described in this section are declared in the header
+file `gsl_sf_gamma.h'.
+
+* Menu:
+
+* Gamma Functions::
+* Factorials::
+* Pochhammer Symbol::
+* Incomplete Gamma Functions::
+* Beta Functions::
+* Incomplete Beta Function::
+
+
+File: gsl-ref.info, Node: Gamma Functions, Next: Factorials, Up: Gamma and Beta Functions
+
+7.19.1 Gamma Functions
+----------------------
+
+The Gamma function is defined by the following integral,
+
+ \Gamma(x) = \int_0^\infty dt t^{x-1} \exp(-t)
+
+It is related to the factorial function by \Gamma(n)=(n-1)! for
+positive integer n. Further information on the Gamma function can be
+found in Abramowitz & Stegun, Chapter 6. The functions described in
+this section are declared in the header file `gsl_sf_gamma.h'.
+
+ -- Function: double gsl_sf_gamma (double X)
+ -- Function: int gsl_sf_gamma_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Gamma function \Gamma(x), subject to x
+ not being a negative integer or zero. The function is computed
+ using the real Lanczos method. The maximum value of x such that
+ \Gamma(x) is not considered an overflow is given by the macro
+ `GSL_SF_GAMMA_XMAX' and is 171.0.
+
+ -- Function: double gsl_sf_lngamma (double X)
+ -- Function: int gsl_sf_lngamma_e (double X, gsl_sf_result * RESULT)
+ These routines compute the logarithm of the Gamma function,
+ \log(\Gamma(x)), subject to x not being a negative integer or
+ zero. For x<0 the real part of \log(\Gamma(x)) is returned, which
+ is equivalent to \log(|\Gamma(x)|). The function is computed
+ using the real Lanczos method.
+
+ -- Function: int gsl_sf_lngamma_sgn_e (double X, gsl_sf_result *
+ RESULT_LG, double * SGN)
+ This routine computes the sign of the gamma function and the
+ logarithm of its magnitude, subject to x not being a negative
+ integer or zero. The function is computed using the real Lanczos
+ method. The value of the gamma function can be reconstructed
+ using the relation \Gamma(x) = sgn * \exp(resultlg).
+
+ -- Function: double gsl_sf_gammastar (double X)
+ -- Function: int gsl_sf_gammastar_e (double X, gsl_sf_result * RESULT)
+ These routines compute the regulated Gamma Function \Gamma^*(x)
+ for x > 0. The regulated gamma function is given by,
+
+ \Gamma^*(x) = \Gamma(x)/(\sqrt{2\pi} x^{(x-1/2)} \exp(-x))
+ = (1 + (1/12x) + ...) for x \to \infty
+ and is a useful suggestion of Temme.
+
+ -- Function: double gsl_sf_gammainv (double X)
+ -- Function: int gsl_sf_gammainv_e (double X, gsl_sf_result * RESULT)
+ These routines compute the reciprocal of the gamma function,
+ 1/\Gamma(x) using the real Lanczos method.
+
+ -- Function: int gsl_sf_lngamma_complex_e (double ZR, double ZI,
+ gsl_sf_result * LNR, gsl_sf_result * ARG)
+ This routine computes \log(\Gamma(z)) for complex z=z_r+i z_i and
+ z not a negative integer or zero, using the complex Lanczos
+ method. The returned parameters are lnr = \log|\Gamma(z)| and arg
+ = \arg(\Gamma(z)) in (-\pi,\pi]. Note that the phase part (ARG)
+ is not well-determined when |z| is very large, due to inevitable
+ roundoff in restricting to (-\pi,\pi]. This will result in a
+ `GSL_ELOSS' error when it occurs. The absolute value part (LNR),
+ however, never suffers from loss of precision.
+
+
+File: gsl-ref.info, Node: Factorials, Next: Pochhammer Symbol, Prev: Gamma Functions, Up: Gamma and Beta Functions
+
+7.19.2 Factorials
+-----------------
+
+Although factorials can be computed from the Gamma function, using the
+relation n! = \Gamma(n+1) for non-negative integer n, it is usually
+more efficient to call the functions in this section, particularly for
+small values of n, whose factorial values are maintained in hardcoded
+tables.
+
+ -- Function: double gsl_sf_fact (unsigned int N)
+ -- Function: int gsl_sf_fact_e (unsigned int N, gsl_sf_result * RESULT)
+ These routines compute the factorial n!. The factorial is related
+ to the Gamma function by n! = \Gamma(n+1). The maximum value of n
+ such that n! is not considered an overflow is given by the macro
+ `GSL_SF_FACT_NMAX' and is 170.
+
+ -- Function: double gsl_sf_doublefact (unsigned int N)
+ -- Function: int gsl_sf_doublefact_e (unsigned int N, gsl_sf_result *
+ RESULT)
+ These routines compute the double factorial n!! = n(n-2)(n-4)
+ \dots. The maximum value of n such that n!! is not considered an
+ overflow is given by the macro `GSL_SF_DOUBLEFACT_NMAX' and is 297.
+
+ -- Function: double gsl_sf_lnfact (unsigned int N)
+ -- Function: int gsl_sf_lnfact_e (unsigned int N, gsl_sf_result *
+ RESULT)
+ These routines compute the logarithm of the factorial of N,
+ \log(n!). The algorithm is faster than computing \ln(\Gamma(n+1))
+ via `gsl_sf_lngamma' for n < 170, but defers for larger N.
+
+ -- Function: double gsl_sf_lndoublefact (unsigned int N)
+ -- Function: int gsl_sf_lndoublefact_e (unsigned int N, gsl_sf_result
+ * RESULT)
+ These routines compute the logarithm of the double factorial of N,
+ \log(n!!).
+
+ -- Function: double gsl_sf_choose (unsigned int N, unsigned int M)
+ -- Function: int gsl_sf_choose_e (unsigned int N, unsigned int M,
+ gsl_sf_result * RESULT)
+ These routines compute the combinatorial factor `n choose m' =
+ n!/(m!(n-m)!)
+
+ -- Function: double gsl_sf_lnchoose (unsigned int N, unsigned int M)
+ -- Function: int gsl_sf_lnchoose_e (unsigned int N, unsigned int M,
+ gsl_sf_result * RESULT)
+ These routines compute the logarithm of `n choose m'. This is
+ equivalent to the sum \log(n!) - \log(m!) - \log((n-m)!).
+
+ -- Function: double gsl_sf_taylorcoeff (int N, double X)
+ -- Function: int gsl_sf_taylorcoeff_e (int N, double X, gsl_sf_result
+ * RESULT)
+ These routines compute the Taylor coefficient x^n / n! for x >= 0,
+ n >= 0.
+
+
+File: gsl-ref.info, Node: Pochhammer Symbol, Next: Incomplete Gamma Functions, Prev: Factorials, Up: Gamma and Beta Functions
+
+7.19.3 Pochhammer Symbol
+------------------------
+
+ -- Function: double gsl_sf_poch (double A, double X)
+ -- Function: int gsl_sf_poch_e (double A, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the Pochhammer symbol (a)_x = \Gamma(a +
+ x)/\Gamma(a), subject to a and a+x not being negative integers or
+ zero. The Pochhammer symbol is also known as the Apell symbol and
+ sometimes written as (a,x).
+
+ -- Function: double gsl_sf_lnpoch (double A, double X)
+ -- Function: int gsl_sf_lnpoch_e (double A, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the logarithm of the Pochhammer symbol,
+ \log((a)_x) = \log(\Gamma(a + x)/\Gamma(a)) for a > 0, a+x > 0.
+
+ -- Function: int gsl_sf_lnpoch_sgn_e (double A, double X,
+ gsl_sf_result * RESULT, double * SGN)
+ These routines compute the sign of the Pochhammer symbol and the
+ logarithm of its magnitude. The computed parameters are result =
+ \log(|(a)_x|) and sgn = \sgn((a)_x) where (a)_x = \Gamma(a +
+ x)/\Gamma(a), subject to a, a+x not being negative integers or
+ zero.
+
+ -- Function: double gsl_sf_pochrel (double A, double X)
+ -- Function: int gsl_sf_pochrel_e (double A, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the relative Pochhammer symbol ((a)_x -
+ 1)/x where (a)_x = \Gamma(a + x)/\Gamma(a).
+
+
+File: gsl-ref.info, Node: Incomplete Gamma Functions, Next: Beta Functions, Prev: Pochhammer Symbol, Up: Gamma and Beta Functions
+
+7.19.4 Incomplete Gamma Functions
+---------------------------------
+
+ -- Function: double gsl_sf_gamma_inc (double A, double X)
+ -- Function: int gsl_sf_gamma_inc_e (double A, double X, gsl_sf_result
+ * RESULT)
+ These functions compute the unnormalized incomplete Gamma Function
+ \Gamma(a,x) = \int_x^\infty dt t^{a-1} \exp(-t) for a real and x
+ >= 0.
+
+ -- Function: double gsl_sf_gamma_inc_Q (double A, double X)
+ -- Function: int gsl_sf_gamma_inc_Q_e (double A, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the normalized incomplete Gamma Function
+ Q(a,x) = 1/\Gamma(a) \int_x^\infty dt t^{a-1} \exp(-t) for a > 0,
+ x >= 0.
+
+ -- Function: double gsl_sf_gamma_inc_P (double A, double X)
+ -- Function: int gsl_sf_gamma_inc_P_e (double A, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the complementary normalized incomplete
+ Gamma Function P(a,x) = 1 - Q(a,x) = 1/\Gamma(a) \int_0^x dt
+ t^{a-1} \exp(-t) for a > 0, x >= 0.
+
+ Note that Abramowitz & Stegun call P(a,x) the incomplete gamma
+ function (section 6.5).
+
+
+File: gsl-ref.info, Node: Beta Functions, Next: Incomplete Beta Function, Prev: Incomplete Gamma Functions, Up: Gamma and Beta Functions
+
+7.19.5 Beta Functions
+---------------------
+
+ -- Function: double gsl_sf_beta (double A, double B)
+ -- Function: int gsl_sf_beta_e (double A, double B, gsl_sf_result *
+ RESULT)
+ These routines compute the Beta Function, B(a,b) =
+ \Gamma(a)\Gamma(b)/\Gamma(a+b) subject to a and b not being
+ negative integers.
+
+ -- Function: double gsl_sf_lnbeta (double A, double B)
+ -- Function: int gsl_sf_lnbeta_e (double A, double B, gsl_sf_result *
+ RESULT)
+ These routines compute the logarithm of the Beta Function,
+ \log(B(a,b)) subject to a and b not being negative integers.
+
+
+File: gsl-ref.info, Node: Incomplete Beta Function, Prev: Beta Functions, Up: Gamma and Beta Functions
+
+7.19.6 Incomplete Beta Function
+-------------------------------
+
+ -- Function: double gsl_sf_beta_inc (double A, double B, double X)
+ -- Function: int gsl_sf_beta_inc_e (double A, double B, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the normalized incomplete Beta function
+ I_x(a,b)=B_x(a,b)/B(a,b) where B_x(a,b) = \int_0^x t^{a-1}
+ (1-t)^{b-1} dt for a > 0, b > 0, and 0 <= x <= 1.
+
+
+File: gsl-ref.info, Node: Gegenbauer Functions, Next: Hypergeometric Functions, Prev: Gamma and Beta Functions, Up: Special Functions
+
+7.20 Gegenbauer Functions
+=========================
+
+The Gegenbauer polynomials are defined in Abramowitz & Stegun, Chapter
+22, where they are known as Ultraspherical polynomials. The functions
+described in this section are declared in the header file
+`gsl_sf_gegenbauer.h'.
+
+ -- Function: double gsl_sf_gegenpoly_1 (double LAMBDA, double X)
+ -- Function: double gsl_sf_gegenpoly_2 (double LAMBDA, double X)
+ -- Function: double gsl_sf_gegenpoly_3 (double LAMBDA, double X)
+ -- Function: int gsl_sf_gegenpoly_1_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ -- Function: int gsl_sf_gegenpoly_2_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ -- Function: int gsl_sf_gegenpoly_3_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ These functions evaluate the Gegenbauer polynomials
+ C^{(\lambda)}_n(x) using explicit representations for n =1, 2, 3.
+
+ -- Function: double gsl_sf_gegenpoly_n (int N, double LAMBDA, double X)
+ -- Function: int gsl_sf_gegenpoly_n_e (int N, double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ These functions evaluate the Gegenbauer polynomial
+ C^{(\lambda)}_n(x) for a specific value of N, LAMBDA, X subject to
+ \lambda > -1/2, n >= 0.
+
+ -- Function: int gsl_sf_gegenpoly_array (int NMAX, double LAMBDA,
+ double X, double RESULT_ARRAY[])
+ This function computes an array of Gegenbauer polynomials
+ C^{(\lambda)}_n(x) for n = 0, 1, 2, \dots, nmax, subject to
+ \lambda > -1/2, nmax >= 0.
+
+
+File: gsl-ref.info, Node: Hypergeometric Functions, Next: Laguerre Functions, Prev: Gegenbauer Functions, Up: Special Functions
+
+7.21 Hypergeometric Functions
+=============================
+
+Hypergeometric functions are described in Abramowitz & Stegun, Chapters
+13 and 15. These functions are declared in the header file
+`gsl_sf_hyperg.h'.
+
+ -- Function: double gsl_sf_hyperg_0F1 (double C, double X)
+ -- Function: int gsl_sf_hyperg_0F1_e (double C, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the hypergeometric function 0F1(c,x).
+
+ -- Function: double gsl_sf_hyperg_1F1_int (int M, int N, double X)
+ -- Function: int gsl_sf_hyperg_1F1_int_e (int M, int N, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the confluent hypergeometric function
+ 1F1(m,n,x) = M(m,n,x) for integer parameters M, N.
+
+ -- Function: double gsl_sf_hyperg_1F1 (double A, double B, double X)
+ -- Function: int gsl_sf_hyperg_1F1_e (double A, double B, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the confluent hypergeometric function
+ 1F1(a,b,x) = M(a,b,x) for general parameters A, B.
+
+ -- Function: double gsl_sf_hyperg_U_int (int M, int N, double X)
+ -- Function: int gsl_sf_hyperg_U_int_e (int M, int N, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the confluent hypergeometric function
+ U(m,n,x) for integer parameters M, N.
+
+ -- Function: int gsl_sf_hyperg_U_int_e10_e (int M, int N, double X,
+ gsl_sf_result_e10 * RESULT)
+ This routine computes the confluent hypergeometric function
+ U(m,n,x) for integer parameters M, N using the `gsl_sf_result_e10'
+ type to return a result with extended range.
+
+ -- Function: double gsl_sf_hyperg_U (double A, double B, double X)
+ -- Function: int gsl_sf_hyperg_U_e (double A, double B, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the confluent hypergeometric function
+ U(a,b,x).
+
+ -- Function: int gsl_sf_hyperg_U_e10_e (double A, double B, double X,
+ gsl_sf_result_e10 * RESULT)
+ This routine computes the confluent hypergeometric function
+ U(a,b,x) using the `gsl_sf_result_e10' type to return a result
+ with extended range.
+
+ -- Function: double gsl_sf_hyperg_2F1 (double A, double B, double C,
+ double X)
+ -- Function: int gsl_sf_hyperg_2F1_e (double A, double B, double C,
+ double X, gsl_sf_result * RESULT)
+ These routines compute the Gauss hypergeometric function
+ 2F1(a,b,c,x) for |x| < 1.
+
+ If the arguments (a,b,c,x) are too close to a singularity then the
+ function can return the error code `GSL_EMAXITER' when the series
+ approximation converges too slowly. This occurs in the region of
+ x=1, c - a - b = m for integer m.
+
+ -- Function: double gsl_sf_hyperg_2F1_conj (double AR, double AI,
+ double C, double X)
+ -- Function: int gsl_sf_hyperg_2F1_conj_e (double AR, double AI,
+ double C, double X, gsl_sf_result * RESULT)
+ These routines compute the Gauss hypergeometric function 2F1(a_R +
+ i a_I, a_R - i a_I, c, x) with complex parameters for |x| < 1.
+ exceptions:
+
+ -- Function: double gsl_sf_hyperg_2F1_renorm (double A, double B,
+ double C, double X)
+ -- Function: int gsl_sf_hyperg_2F1_renorm_e (double A, double B,
+ double C, double X, gsl_sf_result * RESULT)
+ These routines compute the renormalized Gauss hypergeometric
+ function 2F1(a,b,c,x) / \Gamma(c) for |x| < 1.
+
+ -- Function: double gsl_sf_hyperg_2F1_conj_renorm (double AR, double
+ AI, double C, double X)
+ -- Function: int gsl_sf_hyperg_2F1_conj_renorm_e (double AR, double
+ AI, double C, double X, gsl_sf_result * RESULT)
+ These routines compute the renormalized Gauss hypergeometric
+ function 2F1(a_R + i a_I, a_R - i a_I, c, x) / \Gamma(c) for |x| <
+ 1.
+
+ -- Function: double gsl_sf_hyperg_2F0 (double A, double B, double X)
+ -- Function: int gsl_sf_hyperg_2F0_e (double A, double B, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the hypergeometric function 2F0(a,b,x).
+ The series representation is a divergent hypergeometric series.
+ However, for x < 0 we have 2F0(a,b,x) = (-1/x)^a U(a,1+a-b,-1/x)
+
+
+File: gsl-ref.info, Node: Laguerre Functions, Next: Lambert W Functions, Prev: Hypergeometric Functions, Up: Special Functions
+
+7.22 Laguerre Functions
+=======================
+
+The generalized Laguerre polynomials are defined in terms of confluent
+hypergeometric functions as L^a_n(x) = ((a+1)_n / n!) 1F1(-n,a+1,x),
+and are sometimes referred to as the associated Laguerre polynomials.
+They are related to the plain Laguerre polynomials L_n(x) by L^0_n(x) =
+L_n(x) and L^k_n(x) = (-1)^k (d^k/dx^k) L_(n+k)(x). For more
+information see Abramowitz & Stegun, Chapter 22.
+
+ The functions described in this section are declared in the header
+file `gsl_sf_laguerre.h'.
+
+ -- Function: double gsl_sf_laguerre_1 (double A, double X)
+ -- Function: double gsl_sf_laguerre_2 (double A, double X)
+ -- Function: double gsl_sf_laguerre_3 (double A, double X)
+ -- Function: int gsl_sf_laguerre_1_e (double A, double X,
+ gsl_sf_result * RESULT)
+ -- Function: int gsl_sf_laguerre_2_e (double A, double X,
+ gsl_sf_result * RESULT)
+ -- Function: int gsl_sf_laguerre_3_e (double A, double X,
+ gsl_sf_result * RESULT)
+ These routines evaluate the generalized Laguerre polynomials
+ L^a_1(x), L^a_2(x), L^a_3(x) using explicit representations.
+
+ -- Function: double gsl_sf_laguerre_n (const int N, const double A,
+ const double X)
+ -- Function: int gsl_sf_laguerre_n_e (int N, double A, double X,
+ gsl_sf_result * RESULT)
+ These routines evaluate the generalized Laguerre polynomials
+ L^a_n(x) for a > -1, n >= 0.
+
+
+
+File: gsl-ref.info, Node: Lambert W Functions, Next: Legendre Functions and Spherical Harmonics, Prev: Laguerre Functions, Up: Special Functions
+
+7.23 Lambert W Functions
+========================
+
+Lambert's W functions, W(x), are defined to be solutions of the
+equation W(x) \exp(W(x)) = x. This function has multiple branches for x
+< 0; however, it has only two real-valued branches. We define W_0(x) to
+be the principal branch, where W > -1 for x < 0, and W_{-1}(x) to be
+the other real branch, where W < -1 for x < 0. The Lambert functions
+are declared in the header file `gsl_sf_lambert.h'.
+
+ -- Function: double gsl_sf_lambert_W0 (double X)
+ -- Function: int gsl_sf_lambert_W0_e (double X, gsl_sf_result * RESULT)
+ These compute the principal branch of the Lambert W function,
+ W_0(x).
+
+ -- Function: double gsl_sf_lambert_Wm1 (double X)
+ -- Function: int gsl_sf_lambert_Wm1_e (double X, gsl_sf_result *
+ RESULT)
+ These compute the secondary real-valued branch of the Lambert W
+ function, W_{-1}(x).
+
+
+File: gsl-ref.info, Node: Legendre Functions and Spherical Harmonics, Next: Logarithm and Related Functions, Prev: Lambert W Functions, Up: Special Functions
+
+7.24 Legendre Functions and Spherical Harmonics
+===============================================
+
+The Legendre Functions and Legendre Polynomials are described in
+Abramowitz & Stegun, Chapter 8. These functions are declared in the
+header file `gsl_sf_legendre.h'.
+
+* Menu:
+
+* Legendre Polynomials::
+* Associated Legendre Polynomials and Spherical Harmonics::
+* Conical Functions::
+* Radial Functions for Hyperbolic Space::
+
+
+File: gsl-ref.info, Node: Legendre Polynomials, Next: Associated Legendre Polynomials and Spherical Harmonics, Up: Legendre Functions and Spherical Harmonics
+
+7.24.1 Legendre Polynomials
+---------------------------
+
+ -- Function: double gsl_sf_legendre_P1 (double X)
+ -- Function: double gsl_sf_legendre_P2 (double X)
+ -- Function: double gsl_sf_legendre_P3 (double X)
+ -- Function: int gsl_sf_legendre_P1_e (double X, gsl_sf_result *
+ RESULT)
+ -- Function: int gsl_sf_legendre_P2_e (double X, gsl_sf_result *
+ RESULT)
+ -- Function: int gsl_sf_legendre_P3_e (double X, gsl_sf_result *
+ RESULT)
+ These functions evaluate the Legendre polynomials P_l(x) using
+ explicit representations for l=1, 2, 3.
+
+ -- Function: double gsl_sf_legendre_Pl (int L, double X)
+ -- Function: int gsl_sf_legendre_Pl_e (int L, double X, gsl_sf_result
+ * RESULT)
+ These functions evaluate the Legendre polynomial P_l(x) for a
+ specific value of L, X subject to l >= 0, |x| <= 1
+
+ -- Function: int gsl_sf_legendre_Pl_array (int LMAX, double X, double
+ RESULT_ARRAY[])
+ -- Function: int gsl_sf_legendre_Pl_deriv_array (int LMAX, double X,
+ double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[])
+ These functions compute an array of Legendre polynomials P_l(x),
+ and optionally their derivatives dP_l(x)/dx, for l = 0, \dots,
+ lmax, |x| <= 1
+
+ -- Function: double gsl_sf_legendre_Q0 (double X)
+ -- Function: int gsl_sf_legendre_Q0_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the Legendre function Q_0(x) for x > -1, x
+ != 1.
+
+ -- Function: double gsl_sf_legendre_Q1 (double X)
+ -- Function: int gsl_sf_legendre_Q1_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the Legendre function Q_1(x) for x > -1, x
+ != 1.
+
+ -- Function: double gsl_sf_legendre_Ql (int L, double X)
+ -- Function: int gsl_sf_legendre_Ql_e (int L, double X, gsl_sf_result
+ * RESULT)
+ These routines compute the Legendre function Q_l(x) for x > -1, x
+ != 1 and l >= 0.
+
+
+File: gsl-ref.info, Node: Associated Legendre Polynomials and Spherical Harmonics, Next: Conical Functions, Prev: Legendre Polynomials, Up: Legendre Functions and Spherical Harmonics
+
+7.24.2 Associated Legendre Polynomials and Spherical Harmonics
+--------------------------------------------------------------
+
+The following functions compute the associated Legendre Polynomials
+P_l^m(x). Note that this function grows combinatorially with l and can
+overflow for l larger than about 150. There is no trouble for small m,
+but overflow occurs when m and l are both large. Rather than allow
+overflows, these functions refuse to calculate P_l^m(x) and return
+`GSL_EOVRFLW' when they can sense that l and m are too big.
+
+ If you want to calculate a spherical harmonic, then _do not_ use
+these functions. Instead use `gsl_sf_legendre_sphPlm' below, which
+uses a similar recursion, but with the normalized functions.
+
+ -- Function: double gsl_sf_legendre_Plm (int L, int M, double X)
+ -- Function: int gsl_sf_legendre_Plm_e (int L, int M, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the associated Legendre polynomial P_l^m(x)
+ for m >= 0, l >= m, |x| <= 1.
+
+ -- Function: int gsl_sf_legendre_Plm_array (int LMAX, int M, double X,
+ double RESULT_ARRAY[])
+ -- Function: int gsl_sf_legendre_Plm_deriv_array (int LMAX, int M,
+ double X, double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[])
+ These functions compute an array of Legendre polynomials P_l^m(x),
+ and optionally their derivatives dP_l^m(x)/dx, for m >= 0, l =
+ |m|, ..., lmax, |x| <= 1.
+
+ -- Function: double gsl_sf_legendre_sphPlm (int L, int M, double X)
+ -- Function: int gsl_sf_legendre_sphPlm_e (int L, int M, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the normalized associated Legendre
+ polynomial $\sqrt{(2l+1)/(4\pi)} \sqrt{(l-m)!/(l+m)!} P_l^m(x)$
+ suitable for use in spherical harmonics. The parameters must
+ satisfy m >= 0, l >= m, |x| <= 1. Theses routines avoid the
+ overflows that occur for the standard normalization of P_l^m(x).
+
+ -- Function: int gsl_sf_legendre_sphPlm_array (int LMAX, int M, double
+ X, double RESULT_ARRAY[])
+ -- Function: int gsl_sf_legendre_sphPlm_deriv_array (int LMAX, int M,
+ double X, double RESULT_ARRAY[], double RESULT_DERIV_ARRAY[])
+ These functions compute an array of normalized associated Legendre
+ functions $\sqrt{(2l+1)/(4\pi)} \sqrt{(l-m)!/(l+m)!} P_l^m(x)$,
+ and optionally their derivatives, for m >= 0, l = |m|, ..., lmax,
+ |x| <= 1.0
+
+ -- Function: int gsl_sf_legendre_array_size (const int LMAX, const int
+ M)
+ This function returns the size of RESULT_ARRAY[] needed for the
+ array versions of P_l^m(x), LMAX - M + 1.
+
+
+File: gsl-ref.info, Node: Conical Functions, Next: Radial Functions for Hyperbolic Space, Prev: Associated Legendre Polynomials and Spherical Harmonics, Up: Legendre Functions and Spherical Harmonics
+
+7.24.3 Conical Functions
+------------------------
+
+The Conical Functions P^\mu_{-(1/2)+i\lambda}(x) and
+Q^\mu_{-(1/2)+i\lambda} are described in Abramowitz & Stegun, Section
+8.12.
+
+ -- Function: double gsl_sf_conicalP_half (double LAMBDA, double X)
+ -- Function: int gsl_sf_conicalP_half_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the irregular Spherical Conical Function
+ P^{1/2}_{-1/2 + i \lambda}(x) for x > -1.
+
+ -- Function: double gsl_sf_conicalP_mhalf (double LAMBDA, double X)
+ -- Function: int gsl_sf_conicalP_mhalf_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the regular Spherical Conical Function
+ P^{-1/2}_{-1/2 + i \lambda}(x) for x > -1.
+
+ -- Function: double gsl_sf_conicalP_0 (double LAMBDA, double X)
+ -- Function: int gsl_sf_conicalP_0_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the conical function P^0_{-1/2 + i
+ \lambda}(x) for x > -1.
+
+ -- Function: double gsl_sf_conicalP_1 (double LAMBDA, double X)
+ -- Function: int gsl_sf_conicalP_1_e (double LAMBDA, double X,
+ gsl_sf_result * RESULT)
+ These routines compute the conical function P^1_{-1/2 + i
+ \lambda}(x) for x > -1.
+
+ -- Function: double gsl_sf_conicalP_sph_reg (int L, double LAMBDA,
+ double X)
+ -- Function: int gsl_sf_conicalP_sph_reg_e (int L, double LAMBDA,
+ double X, gsl_sf_result * RESULT)
+ These routines compute the Regular Spherical Conical Function
+ P^{-1/2-l}_{-1/2 + i \lambda}(x) for x > -1, l >= -1.
+
+ -- Function: double gsl_sf_conicalP_cyl_reg (int M, double LAMBDA,
+ double X)
+ -- Function: int gsl_sf_conicalP_cyl_reg_e (int M, double LAMBDA,
+ double X, gsl_sf_result * RESULT)
+ These routines compute the Regular Cylindrical Conical Function
+ P^{-m}_{-1/2 + i \lambda}(x) for x > -1, m >= -1.
+
+
+File: gsl-ref.info, Node: Radial Functions for Hyperbolic Space, Prev: Conical Functions, Up: Legendre Functions and Spherical Harmonics
+
+7.24.4 Radial Functions for Hyperbolic Space
+--------------------------------------------
+
+The following spherical functions are specializations of Legendre
+functions which give the regular eigenfunctions of the Laplacian on a
+3-dimensional hyperbolic space H3d. Of particular interest is the flat
+limit, \lambda \to \infty, \eta \to 0, \lambda\eta fixed.
+
+ -- Function: double gsl_sf_legendre_H3d_0 (double LAMBDA, double ETA)
+ -- Function: int gsl_sf_legendre_H3d_0_e (double LAMBDA, double ETA,
+ gsl_sf_result * RESULT)
+ These routines compute the zeroth radial eigenfunction of the
+ Laplacian on the 3-dimensional hyperbolic space,
+ L^{H3d}_0(\lambda,\eta) := \sin(\lambda\eta)/(\lambda\sinh(\eta))
+ for \eta >= 0. In the flat limit this takes the form
+ L^{H3d}_0(\lambda,\eta) = j_0(\lambda\eta).
+
+ -- Function: double gsl_sf_legendre_H3d_1 (double LAMBDA, double ETA)
+ -- Function: int gsl_sf_legendre_H3d_1_e (double LAMBDA, double ETA,
+ gsl_sf_result * RESULT)
+ These routines compute the first radial eigenfunction of the
+ Laplacian on the 3-dimensional hyperbolic space,
+ L^{H3d}_1(\lambda,\eta) := 1/\sqrt{\lambda^2 + 1} \sin(\lambda
+ \eta)/(\lambda \sinh(\eta)) (\coth(\eta) - \lambda
+ \cot(\lambda\eta)) for \eta >= 0. In the flat limit this takes
+ the form L^{H3d}_1(\lambda,\eta) = j_1(\lambda\eta).
+
+ -- Function: double gsl_sf_legendre_H3d (int L, double LAMBDA, double
+ ETA)
+ -- Function: int gsl_sf_legendre_H3d_e (int L, double LAMBDA, double
+ ETA, gsl_sf_result * RESULT)
+ These routines compute the L-th radial eigenfunction of the
+ Laplacian on the 3-dimensional hyperbolic space \eta >= 0, l >= 0.
+ In the flat limit this takes the form L^{H3d}_l(\lambda,\eta) =
+ j_l(\lambda\eta).
+
+ -- Function: int gsl_sf_legendre_H3d_array (int LMAX, double LAMBDA,
+ double ETA, double RESULT_ARRAY[])
+ This function computes an array of radial eigenfunctions
+ L^{H3d}_l(\lambda, \eta) for 0 <= l <= lmax.
+
+
+File: gsl-ref.info, Node: Logarithm and Related Functions, Next: Mathieu Functions, Prev: Legendre Functions and Spherical Harmonics, Up: Special Functions
+
+7.25 Logarithm and Related Functions
+====================================
+
+Information on the properties of the Logarithm function can be found in
+Abramowitz & Stegun, Chapter 4. The functions described in this section
+are declared in the header file `gsl_sf_log.h'.
+
+ -- Function: double gsl_sf_log (double X)
+ -- Function: int gsl_sf_log_e (double X, gsl_sf_result * RESULT)
+ These routines compute the logarithm of X, \log(x), for x > 0.
+
+ -- Function: double gsl_sf_log_abs (double X)
+ -- Function: int gsl_sf_log_abs_e (double X, gsl_sf_result * RESULT)
+ These routines compute the logarithm of the magnitude of X,
+ \log(|x|), for x \ne 0.
+
+ -- Function: int gsl_sf_complex_log_e (double ZR, double ZI,
+ gsl_sf_result * LNR, gsl_sf_result * THETA)
+ This routine computes the complex logarithm of z = z_r + i z_i.
+ The results are returned as LNR, THETA such that \exp(lnr + i
+ \theta) = z_r + i z_i, where \theta lies in the range [-\pi,\pi].
+
+ -- Function: double gsl_sf_log_1plusx (double X)
+ -- Function: int gsl_sf_log_1plusx_e (double X, gsl_sf_result * RESULT)
+ These routines compute \log(1 + x) for x > -1 using an algorithm
+ that is accurate for small x.
+
+ -- Function: double gsl_sf_log_1plusx_mx (double X)
+ -- Function: int gsl_sf_log_1plusx_mx_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute \log(1 + x) - x for x > -1 using an
+ algorithm that is accurate for small x.
+
+
+File: gsl-ref.info, Node: Mathieu Functions, Next: Power Function, Prev: Logarithm and Related Functions, Up: Special Functions
+
+7.26 Mathieu Functions
+======================
+
+The routines described in this section compute the angular and radial
+Mathieu functions, and their characteristic values. Mathieu functions
+are the solutions of the following two differential equations:
+
+ d^2y/dv^2 + (a - 2q\cos 2v)y = 0
+ d^2f/du^2 - (a - 2q\cosh 2u)f = 0
+
+The angular Mathieu functions ce_r(x,q), se_r(x,q) are the even and odd
+periodic solutions of the first equation, which is known as Mathieu's
+equation. These exist only for the discrete sequence of characteristic
+values a=a_r(q) (even-periodic) and a=b_r(q) (odd-periodic).
+
+ The radial Mathieu functions Mc^{(j)}_{r}(z,q), Ms^{(j)}_{r}(z,q)
+are the solutions of the second equation, which is referred to as
+Mathieu's modified equation. The radial Mathieu functions of the
+first, second, third and fourth kind are denoted by the parameter j,
+which takes the value 1, 2, 3 or 4.
+
+ For more information on the Mathieu functions, see Abramowitz and
+Stegun, Chapter 20. These functions are defined in the header file
+`gsl_sf_mathieu.h'.
+
+* Menu:
+
+* Mathieu Function Workspace::
+* Mathieu Function Characteristic Values::
+* Angular Mathieu Functions::
+* Radial Mathieu Functions::
+
+
+File: gsl-ref.info, Node: Mathieu Function Workspace, Next: Mathieu Function Characteristic Values, Up: Mathieu Functions
+
+7.26.1 Mathieu Function Workspace
+---------------------------------
+
+The Mathieu functions can be computed for a single order or for
+multiple orders, using array-based routines. The array-based routines
+require a preallocated workspace.
+
+ -- Function: gsl_sf_mathieu_workspace * gsl_sf_mathieu_alloc (size_t
+ N, double QMAX)
+ This function returns a workspace for the array versions of the
+ Mathieu routines. The arguments N and QMAX specify the maximum
+ order and q-value of Mathieu functions which can be computed with
+ this workspace.
+
+
+ -- Function: void gsl_sf_mathieu_free (gsl_sf_mathieu_workspace *WORK)
+ This function frees the workspace WORK.
+
+
+File: gsl-ref.info, Node: Mathieu Function Characteristic Values, Next: Angular Mathieu Functions, Prev: Mathieu Function Workspace, Up: Mathieu Functions
+
+7.26.2 Mathieu Function Characteristic Values
+---------------------------------------------
+
+ -- Function: int gsl_sf_mathieu_a (int N, double Q, gsl_sf_result
+ *RESULT)
+ -- Function: int gsl_sf_mathieu_b (int N, double Q, gsl_sf_result
+ *RESULT)
+ These routines compute the characteristic values a_n(q), b_n(q) of
+ the Mathieu functions ce_n(q,x) and se_n(q,x), respectively.
+
+ -- Function: int gsl_sf_mathieu_a_array (int ORDER_MIN, int ORDER_MAX,
+ double Q, gsl_sf_mathieu_workspace *WORK, double
+ RESULT_ARRAY[])
+ -- Function: int gsl_sf_mathieu_b_array (int ORDER_MIN, int ORDER_MAX,
+ double Q, gsl_sf_mathieu_workspace *WORK, double
+ RESULT_ARRAY[])
+ These routines compute a series of Mathieu characteristic values
+ a_n(q), b_n(q) for n from ORDER_MIN to ORDER_MAX inclusive,
+ storing the results in the array RESULT_ARRAY.
+
+
+File: gsl-ref.info, Node: Angular Mathieu Functions, Next: Radial Mathieu Functions, Prev: Mathieu Function Characteristic Values, Up: Mathieu Functions
+
+7.26.3 Angular Mathieu Functions
+--------------------------------
+
+ -- Function: int gsl_sf_mathieu_ce (int N, double Q, double X,
+ gsl_sf_result *RESULT)
+ -- Function: int gsl_sf_mathieu_se (int N, double Q, double X,
+ gsl_sf_result *RESULT)
+ These routines compute the angular Mathieu functions ce_n(q,x) and
+ se_n(q,x), respectively.
+
+ -- Function: int gsl_sf_mathieu_ce_array (int NMIN, int NMAX, double
+ Q, double X, gsl_sf_mathieu_workspace *WORK, double
+ RESULT_ARRAY[])
+ -- Function: int gsl_sf_mathieu_se_array (int NMIN, int NMAX, double
+ Q, double X, gsl_sf_mathieu_workspace *WORK, double
+ RESULT_ARRAY[])
+ These routines compute a series of the angular Mathieu functions
+ ce_n(q,x) and se_n(q,x) of order n from NMIN to NMAX inclusive,
+ storing the results in the array RESULT_ARRAY.
+
+
+File: gsl-ref.info, Node: Radial Mathieu Functions, Prev: Angular Mathieu Functions, Up: Mathieu Functions
+
+7.26.4 Radial Mathieu Functions
+-------------------------------
+
+ -- Function: int gsl_sf_mathieu_Mc (int J, int N, double Q, double X,
+ gsl_sf_result *RESULT)
+ -- Function: int gsl_sf_mathieu_Ms (int J, int N, double Q, double X,
+ gsl_sf_result *RESULT)
+ These routines compute the radial J-th kind Mathieu functions
+ Mc_n^{(j)}(q,x) and Ms_n^{(j)}(q,x) of order N.
+
+ The allowed values of J are 1 and 2. The functions for j = 3,4
+ can be computed as M_n^{(3)} = M_n^{(1)} + iM_n^{(2)} and
+ M_n^{(4)} = M_n^{(1)} - iM_n^{(2)}, where M_n^{(j)} = Mc_n^{(j)} or
+ Ms_n^{(j)}.
+
+ -- Function: int gsl_sf_mathieu_Mc_array (int J, int NMIN, int NMAX,
+ double Q, double X, gsl_sf_mathieu_workspace *WORK, double
+ RESULT_ARRAY[])
+ -- Function: int gsl_sf_mathieu_Ms_array (int J, int NMIN, int NMAX,
+ double Q, double X, gsl_sf_mathieu_workspace *WORK, double
+ RESULT_ARRAY[])
+ These routines compute a series of the radial Mathieu functions of
+ kind J, with order from NMIN to NMAX inclusive, storing the
+ results in the array RESULT_ARRAY.
+
+
+File: gsl-ref.info, Node: Power Function, Next: Psi (Digamma) Function, Prev: Mathieu Functions, Up: Special Functions
+
+7.27 Power Function
+===================
+
+The following functions are equivalent to the function `gsl_pow_int'
+(*note Small integer powers::) with an error estimate. These functions
+are declared in the header file `gsl_sf_pow_int.h'.
+
+ -- Function: double gsl_sf_pow_int (double X, int N)
+ -- Function: int gsl_sf_pow_int_e (double X, int N, gsl_sf_result *
+ RESULT)
+ These routines compute the power x^n for integer N. The power is
+ computed using the minimum number of multiplications. For example,
+ x^8 is computed as ((x^2)^2)^2, requiring only 3 multiplications.
+ For reasons of efficiency, these functions do not check for
+ overflow or underflow conditions.
+
+ #include <gsl/gsl_sf_pow_int.h>
+ /* compute 3.0**12 */
+ double y = gsl_sf_pow_int(3.0, 12);
+
+
+File: gsl-ref.info, Node: Psi (Digamma) Function, Next: Synchrotron Functions, Prev: Power Function, Up: Special Functions
+
+7.28 Psi (Digamma) Function
+===========================
+
+The polygamma functions of order n are defined by
+
+ \psi^{(n)}(x) = (d/dx)^n \psi(x) = (d/dx)^{n+1} \log(\Gamma(x))
+
+where \psi(x) = \Gamma'(x)/\Gamma(x) is known as the digamma function.
+These functions are declared in the header file `gsl_sf_psi.h'.
+
+* Menu:
+
+* Digamma Function::
+* Trigamma Function::
+* Polygamma Function::
+
+
+File: gsl-ref.info, Node: Digamma Function, Next: Trigamma Function, Up: Psi (Digamma) Function
+
+7.28.1 Digamma Function
+-----------------------
+
+ -- Function: double gsl_sf_psi_int (int N)
+ -- Function: int gsl_sf_psi_int_e (int N, gsl_sf_result * RESULT)
+ These routines compute the digamma function \psi(n) for positive
+ integer N. The digamma function is also called the Psi function.
+
+ -- Function: double gsl_sf_psi (double X)
+ -- Function: int gsl_sf_psi_e (double X, gsl_sf_result * RESULT)
+ These routines compute the digamma function \psi(x) for general x,
+ x \ne 0.
+
+ -- Function: double gsl_sf_psi_1piy (double Y)
+ -- Function: int gsl_sf_psi_1piy_e (double Y, gsl_sf_result * RESULT)
+ These routines compute the real part of the digamma function on
+ the line 1+i y, \Re[\psi(1 + i y)].
+
+
+File: gsl-ref.info, Node: Trigamma Function, Next: Polygamma Function, Prev: Digamma Function, Up: Psi (Digamma) Function
+
+7.28.2 Trigamma Function
+------------------------
+
+ -- Function: double gsl_sf_psi_1_int (int N)
+ -- Function: int gsl_sf_psi_1_int_e (int N, gsl_sf_result * RESULT)
+ These routines compute the Trigamma function \psi'(n) for positive
+ integer n.
+
+ -- Function: double gsl_sf_psi_1 (double X)
+ -- Function: int gsl_sf_psi_1_e (double X, gsl_sf_result * RESULT)
+ These routines compute the Trigamma function \psi'(x) for general
+ x.
+
+
+File: gsl-ref.info, Node: Polygamma Function, Prev: Trigamma Function, Up: Psi (Digamma) Function
+
+7.28.3 Polygamma Function
+-------------------------
+
+ -- Function: double gsl_sf_psi_n (int N, double X)
+ -- Function: int gsl_sf_psi_n_e (int N, double X, gsl_sf_result *
+ RESULT)
+ These routines compute the polygamma function \psi^{(n)}(x) for n
+ >= 0, x > 0.
+
+
+File: gsl-ref.info, Node: Synchrotron Functions, Next: Transport Functions, Prev: Psi (Digamma) Function, Up: Special Functions
+
+7.29 Synchrotron Functions
+==========================
+
+The functions described in this section are declared in the header file
+`gsl_sf_synchrotron.h'.
+
+ -- Function: double gsl_sf_synchrotron_1 (double X)
+ -- Function: int gsl_sf_synchrotron_1_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the first synchrotron function x
+ \int_x^\infty dt K_{5/3}(t) for x >= 0.
+
+ -- Function: double gsl_sf_synchrotron_2 (double X)
+ -- Function: int gsl_sf_synchrotron_2_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the second synchrotron function x
+ K_{2/3}(x) for x >= 0.
+
+
+File: gsl-ref.info, Node: Transport Functions, Next: Trigonometric Functions, Prev: Synchrotron Functions, Up: Special Functions
+
+7.30 Transport Functions
+========================
+
+The transport functions J(n,x) are defined by the integral
+representations J(n,x) := \int_0^x dt t^n e^t /(e^t - 1)^2. They are
+declared in the header file `gsl_sf_transport.h'.
+
+ -- Function: double gsl_sf_transport_2 (double X)
+ -- Function: int gsl_sf_transport_2_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the transport function J(2,x).
+
+ -- Function: double gsl_sf_transport_3 (double X)
+ -- Function: int gsl_sf_transport_3_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the transport function J(3,x).
+
+ -- Function: double gsl_sf_transport_4 (double X)
+ -- Function: int gsl_sf_transport_4_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the transport function J(4,x).
+
+ -- Function: double gsl_sf_transport_5 (double X)
+ -- Function: int gsl_sf_transport_5_e (double X, gsl_sf_result *
+ RESULT)
+ These routines compute the transport function J(5,x).
+
+
+File: gsl-ref.info, Node: Trigonometric Functions, Next: Zeta Functions, Prev: Transport Functions, Up: Special Functions
+
+7.31 Trigonometric Functions
+============================
+
+The library includes its own trigonometric functions in order to provide
+consistency across platforms and reliable error estimates. These
+functions are declared in the header file `gsl_sf_trig.h'.
+
+* Menu:
+
+* Circular Trigonometric Functions::
+* Trigonometric Functions for Complex Arguments::
+* Hyperbolic Trigonometric Functions::
+* Conversion Functions::
+* Restriction Functions::
+* Trigonometric Functions With Error Estimates::
+
+
+File: gsl-ref.info, Node: Circular Trigonometric Functions, Next: Trigonometric Functions for Complex Arguments, Up: Trigonometric Functions
+
+7.31.1 Circular Trigonometric Functions
+---------------------------------------
+
+ -- Function: double gsl_sf_sin (double X)
+ -- Function: int gsl_sf_sin_e (double X, gsl_sf_result * RESULT)
+ These routines compute the sine function \sin(x).
+
+ -- Function: double gsl_sf_cos (double X)
+ -- Function: int gsl_sf_cos_e (double X, gsl_sf_result * RESULT)
+ These routines compute the cosine function \cos(x).
+
+ -- Function: double gsl_sf_hypot (double X, double Y)
+ -- Function: int gsl_sf_hypot_e (double X, double Y, gsl_sf_result *
+ RESULT)
+ These routines compute the hypotenuse function \sqrt{x^2 + y^2}
+ avoiding overflow and underflow.
+
+ -- Function: double gsl_sf_sinc (double X)
+ -- Function: int gsl_sf_sinc_e (double X, gsl_sf_result * RESULT)
+ These routines compute \sinc(x) = \sin(\pi x) / (\pi x) for any
+ value of X.
+
+
+File: gsl-ref.info, Node: Trigonometric Functions for Complex Arguments, Next: Hyperbolic Trigonometric Functions, Prev: Circular Trigonometric Functions, Up: Trigonometric Functions
+
+7.31.2 Trigonometric Functions for Complex Arguments
+----------------------------------------------------
+
+ -- Function: int gsl_sf_complex_sin_e (double ZR, double ZI,
+ gsl_sf_result * SZR, gsl_sf_result * SZI)
+ This function computes the complex sine, \sin(z_r + i z_i) storing
+ the real and imaginary parts in SZR, SZI.
+
+ -- Function: int gsl_sf_complex_cos_e (double ZR, double ZI,
+ gsl_sf_result * CZR, gsl_sf_result * CZI)
+ This function computes the complex cosine, \cos(z_r + i z_i)
+ storing the real and imaginary parts in SZR, SZI.
+
+ -- Function: int gsl_sf_complex_logsin_e (double ZR, double ZI,
+ gsl_sf_result * LSZR, gsl_sf_result * LSZI)
+ This function computes the logarithm of the complex sine,
+ \log(\sin(z_r + i z_i)) storing the real and imaginary parts in
+ SZR, SZI.
+
+
+File: gsl-ref.info, Node: Hyperbolic Trigonometric Functions, Next: Conversion Functions, Prev: Trigonometric Functions for Complex Arguments, Up: Trigonometric Functions
+
+7.31.3 Hyperbolic Trigonometric Functions
+-----------------------------------------
+
+ -- Function: double gsl_sf_lnsinh (double X)
+ -- Function: int gsl_sf_lnsinh_e (double X, gsl_sf_result * RESULT)
+ These routines compute \log(\sinh(x)) for x > 0.
+
+ -- Function: double gsl_sf_lncosh (double X)
+ -- Function: int gsl_sf_lncosh_e (double X, gsl_sf_result * RESULT)
+ These routines compute \log(\cosh(x)) for any X.
+
+
+File: gsl-ref.info, Node: Conversion Functions, Next: Restriction Functions, Prev: Hyperbolic Trigonometric Functions, Up: Trigonometric Functions
+
+7.31.4 Conversion Functions
+---------------------------
+
+ -- Function: int gsl_sf_polar_to_rect (double R, double THETA,
+ gsl_sf_result * X, gsl_sf_result * Y);
+ This function converts the polar coordinates (R,THETA) to
+ rectilinear coordinates (X,Y), x = r\cos(\theta), y =
+ r\sin(\theta).
+
+ -- Function: int gsl_sf_rect_to_polar (double X, double Y,
+ gsl_sf_result * R, gsl_sf_result * THETA)
+ This function converts the rectilinear coordinates (X,Y) to polar
+ coordinates (R,THETA), such that x = r\cos(\theta), y =
+ r\sin(\theta). The argument THETA lies in the range [-\pi, \pi].
+
+
+File: gsl-ref.info, Node: Restriction Functions, Next: Trigonometric Functions With Error Estimates, Prev: Conversion Functions, Up: Trigonometric Functions
+
+7.31.5 Restriction Functions
+----------------------------
+
+ -- Function: double gsl_sf_angle_restrict_symm (double THETA)
+ -- Function: int gsl_sf_angle_restrict_symm_e (double * THETA)
+ These routines force the angle THETA to lie in the range
+ (-\pi,\pi].
+
+ Note that the mathematical value of \pi is slightly greater than
+ `M_PI', so the machine numbers `M_PI' and `-M_PI' are included in
+ the range.
+
+ -- Function: double gsl_sf_angle_restrict_pos (double THETA)
+ -- Function: int gsl_sf_angle_restrict_pos_e (double * THETA)
+ These routines force the angle THETA to lie in the range [0, 2\pi).
+
+ Note that the mathematical value of 2\pi is slightly greater than
+ `2*M_PI', so the machine number `2*M_PI' is included in the range.
+
+
+
+File: gsl-ref.info, Node: Trigonometric Functions With Error Estimates, Prev: Restriction Functions, Up: Trigonometric Functions
+
+7.31.6 Trigonometric Functions With Error Estimates
+---------------------------------------------------
+
+ -- Function: int gsl_sf_sin_err_e (double X, double DX, gsl_sf_result
+ * RESULT)
+ This routine computes the sine of an angle X with an associated
+ absolute error DX, \sin(x \pm dx). Note that this function is
+ provided in the error-handling form only since its purpose is to
+ compute the propagated error.
+
+ -- Function: int gsl_sf_cos_err_e (double X, double DX, gsl_sf_result
+ * RESULT)
+ This routine computes the cosine of an angle X with an associated
+ absolute error DX, \cos(x \pm dx). Note that this function is
+ provided in the error-handling form only since its purpose is to
+ compute the propagated error.
+
+
+File: gsl-ref.info, Node: Zeta Functions, Next: Special Functions Examples, Prev: Trigonometric Functions, Up: Special Functions
+
+7.32 Zeta Functions
+===================
+
+The Riemann zeta function is defined in Abramowitz & Stegun, Section
+23.2. The functions described in this section are declared in the
+header file `gsl_sf_zeta.h'.
+
+* Menu:
+
+* Riemann Zeta Function::
+* Riemann Zeta Function Minus One::
+* Hurwitz Zeta Function::
+* Eta Function::
+
+
+File: gsl-ref.info, Node: Riemann Zeta Function, Next: Riemann Zeta Function Minus One, Up: Zeta Functions
+
+7.32.1 Riemann Zeta Function
+----------------------------
+
+The Riemann zeta function is defined by the infinite sum \zeta(s) =
+\sum_{k=1}^\infty k^{-s}.
+
+ -- Function: double gsl_sf_zeta_int (int N)
+ -- Function: int gsl_sf_zeta_int_e (int N, gsl_sf_result * RESULT)
+ These routines compute the Riemann zeta function \zeta(n) for
+ integer N, n \ne 1.
+
+ -- Function: double gsl_sf_zeta (double S)
+ -- Function: int gsl_sf_zeta_e (double S, gsl_sf_result * RESULT)
+ These routines compute the Riemann zeta function \zeta(s) for
+ arbitrary S, s \ne 1.
+
+
+File: gsl-ref.info, Node: Riemann Zeta Function Minus One, Next: Hurwitz Zeta Function, Prev: Riemann Zeta Function, Up: Zeta Functions
+
+7.32.2 Riemann Zeta Function Minus One
+--------------------------------------
+
+For large positive argument, the Riemann zeta function approaches one.
+In this region the fractional part is interesting, and therefore we
+need a function to evaluate it explicitly.
+
+ -- Function: double gsl_sf_zetam1_int (int N)
+ -- Function: int gsl_sf_zetam1_int_e (int N, gsl_sf_result * RESULT)
+ These routines compute \zeta(n) - 1 for integer N, n \ne 1.
+
+ -- Function: double gsl_sf_zetam1 (double S)
+ -- Function: int gsl_sf_zetam1_e (double S, gsl_sf_result * RESULT)
+ These routines compute \zeta(s) - 1 for arbitrary S, s \ne 1.
+
+
+File: gsl-ref.info, Node: Hurwitz Zeta Function, Next: Eta Function, Prev: Riemann Zeta Function Minus One, Up: Zeta Functions
+
+7.32.3 Hurwitz Zeta Function
+----------------------------
+
+The Hurwitz zeta function is defined by \zeta(s,q) = \sum_0^\infty
+(k+q)^{-s}.
+
+ -- Function: double gsl_sf_hzeta (double S, double Q)
+ -- Function: int gsl_sf_hzeta_e (double S, double Q, gsl_sf_result *
+ RESULT)
+ These routines compute the Hurwitz zeta function \zeta(s,q) for s
+ > 1, q > 0.
+
+
+File: gsl-ref.info, Node: Eta Function, Prev: Hurwitz Zeta Function, Up: Zeta Functions
+
+7.32.4 Eta Function
+-------------------
+
+The eta function is defined by \eta(s) = (1-2^{1-s}) \zeta(s).
+
+ -- Function: double gsl_sf_eta_int (int N)
+ -- Function: int gsl_sf_eta_int_e (int N, gsl_sf_result * RESULT)
+ These routines compute the eta function \eta(n) for integer N.
+
+ -- Function: double gsl_sf_eta (double S)
+ -- Function: int gsl_sf_eta_e (double S, gsl_sf_result * RESULT)
+ These routines compute the eta function \eta(s) for arbitrary S.
+
+
+File: gsl-ref.info, Node: Special Functions Examples, Next: Special Functions References and Further Reading, Prev: Zeta Functions, Up: Special Functions
+
+7.33 Examples
+=============
+
+The following example demonstrates the use of the error handling form of
+the special functions, in this case to compute the Bessel function
+J_0(5.0),
+
+ #include <stdio.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_sf_bessel.h>
+
+ int
+ main (void)
+ {
+ double x = 5.0;
+ gsl_sf_result result;
+
+ double expected = -0.17759677131433830434739701;
+
+ int status = gsl_sf_bessel_J0_e (x, &result);
+
+ printf ("status = %s\n", gsl_strerror(status));
+ printf ("J0(5.0) = %.18f\n"
+ " +/- % .18f\n",
+ result.val, result.err);
+ printf ("exact = %.18f\n", expected);
+ return status;
+ }
+
+Here are the results of running the program,
+
+ $ ./a.out
+ status = success
+ J0(5.0) = -0.177596771314338292
+ +/- 0.000000000000000193
+ exact = -0.177596771314338292
+
+The next program computes the same quantity using the natural form of
+the function. In this case the error term RESULT.ERR and return status
+are not accessible.
+
+ #include <stdio.h>
+ #include <gsl/gsl_sf_bessel.h>
+
+ int
+ main (void)
+ {
+ double x = 5.0;
+ double expected = -0.17759677131433830434739701;
+
+ double y = gsl_sf_bessel_J0 (x);
+
+ printf ("J0(5.0) = %.18f\n", y);
+ printf ("exact = %.18f\n", expected);
+ return 0;
+ }
+
+The results of the function are the same,
+
+ $ ./a.out
+ J0(5.0) = -0.177596771314338292
+ exact = -0.177596771314338292
+
+
+File: gsl-ref.info, Node: Special Functions References and Further Reading, Prev: Special Functions Examples, Up: Special Functions
+
+7.34 References and Further Reading
+===================================
+
+The library follows the conventions of `Abramowitz & Stegun' where
+possible,
+ Abramowitz & Stegun (eds.), `Handbook of Mathematical Functions'
+
+The following papers contain information on the algorithms used to
+compute the special functions,
+ MISCFUN: A software package to compute uncommon special functions.
+ `ACM Trans. Math. Soft.', vol. 22, 1996, 288-301
+
+ G.N. Watson, A Treatise on the Theory of Bessel Functions, 2nd
+ Edition (Cambridge University Press, 1944).
+
+ G. Nemeth, Mathematical Approximations of Special Functions, Nova
+ Science Publishers, ISBN 1-56072-052-2
+
+ B.C. Carlson, Special Functions of Applied Mathematics (1977)
+
+ W.J. Thompson, Atlas for Computing Mathematical Functions, John
+ Wiley & Sons, New York (1997).
+
+ Y.Y. Luke, Algorithms for the Computation of Mathematical
+ Functions, Academic Press, New York (1977).
+
+
+
+File: gsl-ref.info, Node: Vectors and Matrices, Next: Permutations, Prev: Special Functions, Up: Top
+
+8 Vectors and Matrices
+**********************
+
+The functions described in this chapter provide a simple vector and
+matrix interface to ordinary C arrays. The memory management of these
+arrays is implemented using a single underlying type, known as a block.
+By writing your functions in terms of vectors and matrices you can pass
+a single structure containing both data and dimensions as an argument
+without needing additional function parameters. The structures are
+compatible with the vector and matrix formats used by BLAS routines.
+
+* Menu:
+
+* Data types::
+* Blocks::
+* Vectors::
+* Matrices::
+* Vector and Matrix References and Further Reading::
+
+
+File: gsl-ref.info, Node: Data types, Next: Blocks, Up: Vectors and Matrices
+
+8.1 Data types
+==============
+
+All the functions are available for each of the standard data-types.
+The versions for `double' have the prefix `gsl_block', `gsl_vector' and
+`gsl_matrix'. Similarly the versions for single-precision `float'
+arrays have the prefix `gsl_block_float', `gsl_vector_float' and
+`gsl_matrix_float'. The full list of available types is given below,
+
+ gsl_block double
+ gsl_block_float float
+ gsl_block_long_double long double
+ gsl_block_int int
+ gsl_block_uint unsigned int
+ gsl_block_long long
+ gsl_block_ulong unsigned long
+ gsl_block_short short
+ gsl_block_ushort unsigned short
+ gsl_block_char char
+ gsl_block_uchar unsigned char
+ gsl_block_complex complex double
+ gsl_block_complex_float complex float
+ gsl_block_complex_long_double complex long double
+
+Corresponding types exist for the `gsl_vector' and `gsl_matrix'
+functions.
+
+
+File: gsl-ref.info, Node: Blocks, Next: Vectors, Prev: Data types, Up: Vectors and Matrices
+
+8.2 Blocks
+==========
+
+For consistency all memory is allocated through a `gsl_block'
+structure. The structure contains two components, the size of an area
+of memory and a pointer to the memory. The `gsl_block' structure looks
+like this,
+
+ typedef struct
+ {
+ size_t size;
+ double * data;
+ } gsl_block;
+
+Vectors and matrices are made by "slicing" an underlying block. A slice
+is a set of elements formed from an initial offset and a combination of
+indices and step-sizes. In the case of a matrix the step-size for the
+column index represents the row-length. The step-size for a vector is
+known as the "stride".
+
+ The functions for allocating and deallocating blocks are defined in
+`gsl_block.h'
+
+* Menu:
+
+* Block allocation::
+* Reading and writing blocks::
+* Example programs for blocks::
+
+
+File: gsl-ref.info, Node: Block allocation, Next: Reading and writing blocks, Up: Blocks
+
+8.2.1 Block allocation
+----------------------
+
+The functions for allocating memory to a block follow the style of
+`malloc' and `free'. In addition they also perform their own error
+checking. If there is insufficient memory available to allocate a
+block then the functions call the GSL error handler (with an error
+number of `GSL_ENOMEM') in addition to returning a null pointer. Thus
+if you use the library error handler to abort your program then it
+isn't necessary to check every `alloc'.
+
+ -- Function: gsl_block * gsl_block_alloc (size_t N)
+ This function allocates memory for a block of N double-precision
+ elements, returning a pointer to the block struct. The block is
+ not initialized and so the values of its elements are undefined.
+ Use the function `gsl_block_calloc' if you want to ensure that all
+ the elements are initialized to zero.
+
+ A null pointer is returned if insufficient memory is available to
+ create the block.
+
+ -- Function: gsl_block * gsl_block_calloc (size_t N)
+ This function allocates memory for a block and initializes all the
+ elements of the block to zero.
+
+ -- Function: void gsl_block_free (gsl_block * B)
+ This function frees the memory used by a block B previously
+ allocated with `gsl_block_alloc' or `gsl_block_calloc'. The block
+ B must be a valid block object (a null pointer is not allowed).
+
+
+File: gsl-ref.info, Node: Reading and writing blocks, Next: Example programs for blocks, Prev: Block allocation, Up: Blocks
+
+8.2.2 Reading and writing blocks
+--------------------------------
+
+The library provides functions for reading and writing blocks to a file
+as binary data or formatted text.
+
+ -- Function: int gsl_block_fwrite (FILE * STREAM, const gsl_block * B)
+ This function writes the elements of the block B to the stream
+ STREAM in binary format. The return value is 0 for success and
+ `GSL_EFAILED' if there was a problem writing to the file. Since
+ the data is written in the native binary format it may not be
+ portable between different architectures.
+
+ -- Function: int gsl_block_fread (FILE * STREAM, gsl_block * B)
+ This function reads into the block B from the open stream STREAM
+ in binary format. The block B must be preallocated with the
+ correct length since the function uses the size of B to determine
+ how many bytes to read. The return value is 0 for success and
+ `GSL_EFAILED' if there was a problem reading from the file. The
+ data is assumed to have been written in the native binary format
+ on the same architecture.
+
+ -- Function: int gsl_block_fprintf (FILE * STREAM, const gsl_block *
+ B, const char * FORMAT)
+ This function writes the elements of the block B line-by-line to
+ the stream STREAM using the format specifier FORMAT, which should
+ be one of the `%g', `%e' or `%f' formats for floating point
+ numbers and `%d' for integers. The function returns 0 for success
+ and `GSL_EFAILED' if there was a problem writing to the file.
+
+ -- Function: int gsl_block_fscanf (FILE * STREAM, gsl_block * B)
+ This function reads formatted data from the stream STREAM into the
+ block B. The block B must be preallocated with the correct length
+ since the function uses the size of B to determine how many
+ numbers to read. The function returns 0 for success and
+ `GSL_EFAILED' if there was a problem reading from the file.
+
+
+File: gsl-ref.info, Node: Example programs for blocks, Prev: Reading and writing blocks, Up: Blocks
+
+8.2.3 Example programs for blocks
+---------------------------------
+
+The following program shows how to allocate a block,
+
+ #include <stdio.h>
+ #include <gsl/gsl_block.h>
+
+ int
+ main (void)
+ {
+ gsl_block * b = gsl_block_alloc (100);
+
+ printf ("length of block = %u\n", b->size);
+ printf ("block data address = %#x\n", b->data);
+
+ gsl_block_free (b);
+ return 0;
+ }
+
+Here is the output from the program,
+
+ length of block = 100
+ block data address = 0x804b0d8
+
+
+File: gsl-ref.info, Node: Vectors, Next: Matrices, Prev: Blocks, Up: Vectors and Matrices
+
+8.3 Vectors
+===========
+
+Vectors are defined by a `gsl_vector' structure which describes a slice
+of a block. Different vectors can be created which point to the same
+block. A vector slice is a set of equally-spaced elements of an area
+of memory.
+
+ The `gsl_vector' structure contains five components, the "size", the
+"stride", a pointer to the memory where the elements are stored, DATA,
+a pointer to the block owned by the vector, BLOCK, if any, and an
+ownership flag, OWNER. The structure is very simple and looks like
+this,
+
+ typedef struct
+ {
+ size_t size;
+ size_t stride;
+ double * data;
+ gsl_block * block;
+ int owner;
+ } gsl_vector;
+
+The SIZE is simply the number of vector elements. The range of valid
+indices runs from 0 to `size-1'. The STRIDE is the step-size from one
+element to the next in physical memory, measured in units of the
+appropriate datatype. The pointer DATA gives the location of the first
+element of the vector in memory. The pointer BLOCK stores the location
+of the memory block in which the vector elements are located (if any).
+If the vector owns this block then the OWNER field is set to one and
+the block will be deallocated when the vector is freed. If the vector
+points to a block owned by another object then the OWNER field is zero
+and any underlying block will not be deallocated with the vector.
+
+ The functions for allocating and accessing vectors are defined in
+`gsl_vector.h'
+
+* Menu:
+
+* Vector allocation::
+* Accessing vector elements::
+* Initializing vector elements::
+* Reading and writing vectors::
+* Vector views::
+* Copying vectors::
+* Exchanging elements::
+* Vector operations::
+* Finding maximum and minimum elements of vectors::
+* Vector properties::
+* Example programs for vectors::
+
+
+File: gsl-ref.info, Node: Vector allocation, Next: Accessing vector elements, Up: Vectors
+
+8.3.1 Vector allocation
+-----------------------
+
+The functions for allocating memory to a vector follow the style of
+`malloc' and `free'. In addition they also perform their own error
+checking. If there is insufficient memory available to allocate a
+vector then the functions call the GSL error handler (with an error
+number of `GSL_ENOMEM') in addition to returning a null pointer. Thus
+if you use the library error handler to abort your program then it
+isn't necessary to check every `alloc'.
+
+ -- Function: gsl_vector * gsl_vector_alloc (size_t N)
+ This function creates a vector of length N, returning a pointer to
+ a newly initialized vector struct. A new block is allocated for the
+ elements of the vector, and stored in the BLOCK component of the
+ vector struct. The block is "owned" by the vector, and will be
+ deallocated when the vector is deallocated.
+
+ -- Function: gsl_vector * gsl_vector_calloc (size_t N)
+ This function allocates memory for a vector of length N and
+ initializes all the elements of the vector to zero.
+
+ -- Function: void gsl_vector_free (gsl_vector * V)
+ This function frees a previously allocated vector V. If the
+ vector was created using `gsl_vector_alloc' then the block
+ underlying the vector will also be deallocated. If the vector has
+ been created from another object then the memory is still owned by
+ that object and will not be deallocated. The vector V must be a
+ valid vector object (a null pointer is not allowed).
+
+
+File: gsl-ref.info, Node: Accessing vector elements, Next: Initializing vector elements, Prev: Vector allocation, Up: Vectors
+
+8.3.2 Accessing vector elements
+-------------------------------
+
+Unlike FORTRAN compilers, C compilers do not usually provide support
+for range checking of vectors and matrices. Range checking is
+available in the GNU C Compiler bounds-checking extension, but it is not
+part of the default installation of GCC. The functions
+`gsl_vector_get' and `gsl_vector_set' can perform portable range
+checking for you and report an error if you attempt to access elements
+outside the allowed range.
+
+ The functions for accessing the elements of a vector or matrix are
+defined in `gsl_vector.h' and declared `extern inline' to eliminate
+function-call overhead. You must compile your program with the macro
+`HAVE_INLINE' defined to use these functions.
+
+ If necessary you can turn off range checking completely without
+modifying any source files by recompiling your program with the
+preprocessor definition `GSL_RANGE_CHECK_OFF'. Provided your compiler
+supports inline functions the effect of turning off range checking is
+to replace calls to `gsl_vector_get(v,i)' by `v->data[i*v->stride]' and
+calls to `gsl_vector_set(v,i,x)' by `v->data[i*v->stride]=x'. Thus
+there should be no performance penalty for using the range checking
+functions when range checking is turned off.
+
+ -- Function: double gsl_vector_get (const gsl_vector * V, size_t I)
+ This function returns the I-th element of a vector V. If I lies
+ outside the allowed range of 0 to N-1 then the error handler is
+ invoked and 0 is returned.
+
+ -- Function: void gsl_vector_set (gsl_vector * V, size_t I, double X)
+ This function sets the value of the I-th element of a vector V to
+ X. If I lies outside the allowed range of 0 to N-1 then the error
+ handler is invoked.
+
+ -- Function: double * gsl_vector_ptr (gsl_vector * V, size_t I)
+ -- Function: const double * gsl_vector_const_ptr (const gsl_vector *
+ V, size_t I)
+ These functions return a pointer to the I-th element of a vector
+ V. If I lies outside the allowed range of 0 to N-1 then the error
+ handler is invoked and a null pointer is returned.
+
+
+File: gsl-ref.info, Node: Initializing vector elements, Next: Reading and writing vectors, Prev: Accessing vector elements, Up: Vectors
+
+8.3.3 Initializing vector elements
+----------------------------------
+
+ -- Function: void gsl_vector_set_all (gsl_vector * V, double X)
+ This function sets all the elements of the vector V to the value X.
+
+ -- Function: void gsl_vector_set_zero (gsl_vector * V)
+ This function sets all the elements of the vector V to zero.
+
+ -- Function: int gsl_vector_set_basis (gsl_vector * V, size_t I)
+ This function makes a basis vector by setting all the elements of
+ the vector V to zero except for the I-th element which is set to
+ one.
+
+
+File: gsl-ref.info, Node: Reading and writing vectors, Next: Vector views, Prev: Initializing vector elements, Up: Vectors
+
+8.3.4 Reading and writing vectors
+---------------------------------
+
+The library provides functions for reading and writing vectors to a file
+as binary data or formatted text.
+
+ -- Function: int gsl_vector_fwrite (FILE * STREAM, const gsl_vector *
+ V)
+ This function writes the elements of the vector V to the stream
+ STREAM in binary format. The return value is 0 for success and
+ `GSL_EFAILED' if there was a problem writing to the file. Since
+ the data is written in the native binary format it may not be
+ portable between different architectures.
+
+ -- Function: int gsl_vector_fread (FILE * STREAM, gsl_vector * V)
+ This function reads into the vector V from the open stream STREAM
+ in binary format. The vector V must be preallocated with the
+ correct length since the function uses the size of V to determine
+ how many bytes to read. The return value is 0 for success and
+ `GSL_EFAILED' if there was a problem reading from the file. The
+ data is assumed to have been written in the native binary format
+ on the same architecture.
+
+ -- Function: int gsl_vector_fprintf (FILE * STREAM, const gsl_vector *
+ V, const char * FORMAT)
+ This function writes the elements of the vector V line-by-line to
+ the stream STREAM using the format specifier FORMAT, which should
+ be one of the `%g', `%e' or `%f' formats for floating point
+ numbers and `%d' for integers. The function returns 0 for success
+ and `GSL_EFAILED' if there was a problem writing to the file.
+
+ -- Function: int gsl_vector_fscanf (FILE * STREAM, gsl_vector * V)
+ This function reads formatted data from the stream STREAM into the
+ vector V. The vector V must be preallocated with the correct
+ length since the function uses the size of V to determine how many
+ numbers to read. The function returns 0 for success and
+ `GSL_EFAILED' if there was a problem reading from the file.
+
+
+File: gsl-ref.info, Node: Vector views, Next: Copying vectors, Prev: Reading and writing vectors, Up: Vectors
+
+8.3.5 Vector views
+------------------
+
+In addition to creating vectors from slices of blocks it is also
+possible to slice vectors and create vector views. For example, a
+subvector of another vector can be described with a view, or two views
+can be made which provide access to the even and odd elements of a
+vector.
+
+ A vector view is a temporary object, stored on the stack, which can
+be used to operate on a subset of vector elements. Vector views can be
+defined for both constant and non-constant vectors, using separate types
+that preserve constness. A vector view has the type `gsl_vector_view'
+and a constant vector view has the type `gsl_vector_const_view'. In
+both cases the elements of the view can be accessed as a `gsl_vector'
+using the `vector' component of the view object. A pointer to a vector
+of type `gsl_vector *' or `const gsl_vector *' can be obtained by
+taking the address of this component with the `&' operator.
+
+ When using this pointer it is important to ensure that the view
+itself remains in scope--the simplest way to do so is by always writing
+the pointer as `&'VIEW`.vector', and never storing this value in
+another variable.
+
+ -- Function: gsl_vector_view gsl_vector_subvector (gsl_vector * V,
+ size_t OFFSET, size_t N)
+ -- Function: gsl_vector_const_view gsl_vector_const_subvector (const
+ gsl_vector * V, size_t OFFSET, size_t N)
+ These functions return a vector view of a subvector of another
+ vector V. The start of the new vector is offset by OFFSET elements
+ from the start of the original vector. The new vector has N
+ elements. Mathematically, the I-th element of the new vector V'
+ is given by,
+
+ v'(i) = v->data[(offset + i)*v->stride]
+
+ where the index I runs from 0 to `n-1'.
+
+ The `data' pointer of the returned vector struct is set to null if
+ the combined parameters (OFFSET,N) overrun the end of the original
+ vector.
+
+ The new vector is only a view of the block underlying the original
+ vector, V. The block containing the elements of V is not owned by
+ the new vector. When the view goes out of scope the original
+ vector V and its block will continue to exist. The original
+ memory can only be deallocated by freeing the original vector. Of
+ course, the original vector should not be deallocated while the
+ view is still in use.
+
+ The function `gsl_vector_const_subvector' is equivalent to
+ `gsl_vector_subvector' but can be used for vectors which are
+ declared `const'.
+
+ -- Function: gsl_vector_view gsl_vector_subvector_with_stride
+ (gsl_vector * V, size_t OFFSET, size_t STRIDE, size_t N)
+ -- Function: gsl_vector_const_view
+gsl_vector_const_subvector_with_stride (const gsl_vector * V, size_t
+ OFFSET, size_t STRIDE, size_t N)
+ These functions return a vector view of a subvector of another
+ vector V with an additional stride argument. The subvector is
+ formed in the same way as for `gsl_vector_subvector' but the new
+ vector has N elements with a step-size of STRIDE from one element
+ to the next in the original vector. Mathematically, the I-th
+ element of the new vector V' is given by,
+
+ v'(i) = v->data[(offset + i*stride)*v->stride]
+
+ where the index I runs from 0 to `n-1'.
+
+ Note that subvector views give direct access to the underlying
+ elements of the original vector. For example, the following code
+ will zero the even elements of the vector `v' of length `n', while
+ leaving the odd elements untouched,
+
+ gsl_vector_view v_even
+ = gsl_vector_subvector_with_stride (v, 0, 2, n/2);
+ gsl_vector_set_zero (&v_even.vector);
+
+ A vector view can be passed to any subroutine which takes a vector
+ argument just as a directly allocated vector would be, using
+ `&'VIEW`.vector'. For example, the following code computes the
+ norm of the odd elements of `v' using the BLAS routine DNRM2,
+
+ gsl_vector_view v_odd
+ = gsl_vector_subvector_with_stride (v, 1, 2, n/2);
+ double r = gsl_blas_dnrm2 (&v_odd.vector);
+
+ The function `gsl_vector_const_subvector_with_stride' is equivalent
+ to `gsl_vector_subvector_with_stride' but can be used for vectors
+ which are declared `const'.
+
+ -- Function: gsl_vector_view gsl_vector_complex_real
+ (gsl_vector_complex * V)
+ -- Function: gsl_vector_const_view gsl_vector_complex_const_real
+ (const gsl_vector_complex * V)
+ These functions return a vector view of the real parts of the
+ complex vector V.
+
+ The function `gsl_vector_complex_const_real' is equivalent to
+ `gsl_vector_complex_real' but can be used for vectors which are
+ declared `const'.
+
+ -- Function: gsl_vector_view gsl_vector_complex_imag
+ (gsl_vector_complex * V)
+ -- Function: gsl_vector_const_view gsl_vector_complex_const_imag
+ (const gsl_vector_complex * V)
+ These functions return a vector view of the imaginary parts of the
+ complex vector V.
+
+ The function `gsl_vector_complex_const_imag' is equivalent to
+ `gsl_vector_complex_imag' but can be used for vectors which are
+ declared `const'.
+
+ -- Function: gsl_vector_view gsl_vector_view_array (double * BASE,
+ size_t N)
+ -- Function: gsl_vector_const_view gsl_vector_const_view_array (const
+ double * BASE, size_t N)
+ These functions return a vector view of an array. The start of
+ the new vector is given by BASE and has N elements.
+ Mathematically, the I-th element of the new vector V' is given by,
+
+ v'(i) = base[i]
+
+ where the index I runs from 0 to `n-1'.
+
+ The array containing the elements of V is not owned by the new
+ vector view. When the view goes out of scope the original array
+ will continue to exist. The original memory can only be
+ deallocated by freeing the original pointer BASE. Of course, the
+ original array should not be deallocated while the view is still
+ in use.
+
+ The function `gsl_vector_const_view_array' is equivalent to
+ `gsl_vector_view_array' but can be used for arrays which are
+ declared `const'.
+
+ -- Function: gsl_vector_view gsl_vector_view_array_with_stride (double
+ * BASE, size_t STRIDE, size_t N)
+ -- Function: gsl_vector_const_view
+gsl_vector_const_view_array_with_stride (const double * BASE, size_t
+ STRIDE, size_t N)
+ These functions return a vector view of an array BASE with an
+ additional stride argument. The subvector is formed in the same
+ way as for `gsl_vector_view_array' but the new vector has N
+ elements with a step-size of STRIDE from one element to the next
+ in the original array. Mathematically, the I-th element of the new
+ vector V' is given by,
+
+ v'(i) = base[i*stride]
+
+ where the index I runs from 0 to `n-1'.
+
+ Note that the view gives direct access to the underlying elements
+ of the original array. A vector view can be passed to any
+ subroutine which takes a vector argument just as a directly
+ allocated vector would be, using `&'VIEW`.vector'.
+
+ The function `gsl_vector_const_view_array_with_stride' is
+ equivalent to `gsl_vector_view_array_with_stride' but can be used
+ for arrays which are declared `const'.
+
+
+File: gsl-ref.info, Node: Copying vectors, Next: Exchanging elements, Prev: Vector views, Up: Vectors
+
+8.3.6 Copying vectors
+---------------------
+
+Common operations on vectors such as addition and multiplication are
+available in the BLAS part of the library (*note BLAS Support::).
+However, it is useful to have a small number of utility functions which
+do not require the full BLAS code. The following functions fall into
+this category.
+
+ -- Function: int gsl_vector_memcpy (gsl_vector * DEST, const
+ gsl_vector * SRC)
+ This function copies the elements of the vector SRC into the
+ vector DEST. The two vectors must have the same length.
+
+ -- Function: int gsl_vector_swap (gsl_vector * V, gsl_vector * W)
+ This function exchanges the elements of the vectors V and W by
+ copying. The two vectors must have the same length.
+
+
+File: gsl-ref.info, Node: Exchanging elements, Next: Vector operations, Prev: Copying vectors, Up: Vectors
+
+8.3.7 Exchanging elements
+-------------------------
+
+The following function can be used to exchange, or permute, the elements
+of a vector.
+
+ -- Function: int gsl_vector_swap_elements (gsl_vector * V, size_t I,
+ size_t J)
+ This function exchanges the I-th and J-th elements of the vector V
+ in-place.
+
+ -- Function: int gsl_vector_reverse (gsl_vector * V)
+ This function reverses the order of the elements of the vector V.
+
+
+File: gsl-ref.info, Node: Vector operations, Next: Finding maximum and minimum elements of vectors, Prev: Exchanging elements, Up: Vectors
+
+8.3.8 Vector operations
+-----------------------
+
+The following operations are only defined for real vectors.
+
+ -- Function: int gsl_vector_add (gsl_vector * A, const gsl_vector * B)
+ This function adds the elements of vector B to the elements of
+ vector A, a'_i = a_i + b_i. The two vectors must have the same
+ length.
+
+ -- Function: int gsl_vector_sub (gsl_vector * A, const gsl_vector * B)
+ This function subtracts the elements of vector B from the elements
+ of vector A, a'_i = a_i - b_i. The two vectors must have the same
+ length.
+
+ -- Function: int gsl_vector_mul (gsl_vector * A, const gsl_vector * B)
+ This function multiplies the elements of vector A by the elements
+ of vector B, a'_i = a_i * b_i. The two vectors must have the same
+ length.
+
+ -- Function: int gsl_vector_div (gsl_vector * A, const gsl_vector * B)
+ This function divides the elements of vector A by the elements of
+ vector B, a'_i = a_i / b_i. The two vectors must have the same
+ length.
+
+ -- Function: int gsl_vector_scale (gsl_vector * A, const double X)
+ This function multiplies the elements of vector A by the constant
+ factor X, a'_i = x a_i.
+
+ -- Function: int gsl_vector_add_constant (gsl_vector * A, const double
+ X)
+ This function adds the constant value X to the elements of the
+ vector A, a'_i = a_i + x.
+
+
+File: gsl-ref.info, Node: Finding maximum and minimum elements of vectors, Next: Vector properties, Prev: Vector operations, Up: Vectors
+
+8.3.9 Finding maximum and minimum elements of vectors
+-----------------------------------------------------
+
+ -- Function: double gsl_vector_max (const gsl_vector * V)
+ This function returns the maximum value in the vector V.
+
+ -- Function: double gsl_vector_min (const gsl_vector * V)
+ This function returns the minimum value in the vector V.
+
+ -- Function: void gsl_vector_minmax (const gsl_vector * V, double *
+ MIN_OUT, double * MAX_OUT)
+ This function returns the minimum and maximum values in the vector
+ V, storing them in MIN_OUT and MAX_OUT.
+
+ -- Function: size_t gsl_vector_max_index (const gsl_vector * V)
+ This function returns the index of the maximum value in the vector
+ V. When there are several equal maximum elements then the lowest
+ index is returned.
+
+ -- Function: size_t gsl_vector_min_index (const gsl_vector * V)
+ This function returns the index of the minimum value in the vector
+ V. When there are several equal minimum elements then the lowest
+ index is returned.
+
+ -- Function: void gsl_vector_minmax_index (const gsl_vector * V,
+ size_t * IMIN, size_t * IMAX)
+ This function returns the indices of the minimum and maximum
+ values in the vector V, storing them in IMIN and IMAX. When there
+ are several equal minimum or maximum elements then the lowest
+ indices are returned.
+
+
+File: gsl-ref.info, Node: Vector properties, Next: Example programs for vectors, Prev: Finding maximum and minimum elements of vectors, Up: Vectors
+
+8.3.10 Vector properties
+------------------------
+
+ -- Function: int gsl_vector_isnull (const gsl_vector * V)
+ -- Function: int gsl_vector_ispos (const gsl_vector * V)
+ -- Function: int gsl_vector_isneg (const gsl_vector * V)
+ These functions return 1 if all the elements of the vector V are
+ zero, strictly positive, or strictly negative respectively, and 0
+ otherwise. To test for a non-negative vector, use the expression
+ `!gsl_vector_isneg(v)'.
+
+
+File: gsl-ref.info, Node: Example programs for vectors, Prev: Vector properties, Up: Vectors
+
+8.3.11 Example programs for vectors
+-----------------------------------
+
+This program shows how to allocate, initialize and read from a vector
+using the functions `gsl_vector_alloc', `gsl_vector_set' and
+`gsl_vector_get'.
+
+ #include <stdio.h>
+ #include <gsl/gsl_vector.h>
+
+ int
+ main (void)
+ {
+ int i;
+ gsl_vector * v = gsl_vector_alloc (3);
+
+ for (i = 0; i < 3; i++)
+ {
+ gsl_vector_set (v, i, 1.23 + i);
+ }
+
+ for (i = 0; i < 100; i++) /* OUT OF RANGE ERROR */
+ {
+ printf ("v_%d = %g\n", i, gsl_vector_get (v, i));
+ }
+
+ gsl_vector_free (v);
+ return 0;
+ }
+
+Here is the output from the program. The final loop attempts to read
+outside the range of the vector `v', and the error is trapped by the
+range-checking code in `gsl_vector_get'.
+
+ $ ./a.out
+ v_0 = 1.23
+ v_1 = 2.23
+ v_2 = 3.23
+ gsl: vector_source.c:12: ERROR: index out of range
+ Default GSL error handler invoked.
+ Aborted (core dumped)
+
+The next program shows how to write a vector to a file.
+
+ #include <stdio.h>
+ #include <gsl/gsl_vector.h>
+
+ int
+ main (void)
+ {
+ int i;
+ gsl_vector * v = gsl_vector_alloc (100);
+
+ for (i = 0; i < 100; i++)
+ {
+ gsl_vector_set (v, i, 1.23 + i);
+ }
+
+ {
+ FILE * f = fopen ("test.dat", "w");
+ gsl_vector_fprintf (f, v, "%.5g");
+ fclose (f);
+ }
+
+ gsl_vector_free (v);
+ return 0;
+ }
+
+After running this program the file `test.dat' should contain the
+elements of `v', written using the format specifier `%.5g'. The vector
+could then be read back in using the function `gsl_vector_fscanf (f,
+v)' as follows:
+
+ #include <stdio.h>
+ #include <gsl/gsl_vector.h>
+
+ int
+ main (void)
+ {
+ int i;
+ gsl_vector * v = gsl_vector_alloc (10);
+
+ {
+ FILE * f = fopen ("test.dat", "r");
+ gsl_vector_fscanf (f, v);
+ fclose (f);
+ }
+
+ for (i = 0; i < 10; i++)
+ {
+ printf ("%g\n", gsl_vector_get(v, i));
+ }
+
+ gsl_vector_free (v);
+ return 0;
+ }
+
+
+File: gsl-ref.info, Node: Matrices, Next: Vector and Matrix References and Further Reading, Prev: Vectors, Up: Vectors and Matrices
+
+8.4 Matrices
+============
+
+Matrices are defined by a `gsl_matrix' structure which describes a
+generalized slice of a block. Like a vector it represents a set of
+elements in an area of memory, but uses two indices instead of one.
+
+ The `gsl_matrix' structure contains six components, the two
+dimensions of the matrix, a physical dimension, a pointer to the memory
+where the elements of the matrix are stored, DATA, a pointer to the
+block owned by the matrix BLOCK, if any, and an ownership flag, OWNER.
+The physical dimension determines the memory layout and can differ from
+the matrix dimension to allow the use of submatrices. The `gsl_matrix'
+structure is very simple and looks like this,
+
+ typedef struct
+ {
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ double * data;
+ gsl_block * block;
+ int owner;
+ } gsl_matrix;
+
+Matrices are stored in row-major order, meaning that each row of
+elements forms a contiguous block in memory. This is the standard
+"C-language ordering" of two-dimensional arrays. Note that FORTRAN
+stores arrays in column-major order. The number of rows is SIZE1. The
+range of valid row indices runs from 0 to `size1-1'. Similarly SIZE2
+is the number of columns. The range of valid column indices runs from
+0 to `size2-1'. The physical row dimension TDA, or "trailing
+dimension", specifies the size of a row of the matrix as laid out in
+memory.
+
+ For example, in the following matrix SIZE1 is 3, SIZE2 is 4, and TDA
+is 8. The physical memory layout of the matrix begins in the top left
+hand-corner and proceeds from left to right along each row in turn.
+
+ 00 01 02 03 XX XX XX XX
+ 10 11 12 13 XX XX XX XX
+ 20 21 22 23 XX XX XX XX
+
+Each unused memory location is represented by "`XX'". The pointer DATA
+gives the location of the first element of the matrix in memory. The
+pointer BLOCK stores the location of the memory block in which the
+elements of the matrix are located (if any). If the matrix owns this
+block then the OWNER field is set to one and the block will be
+deallocated when the matrix is freed. If the matrix is only a slice of
+a block owned by another object then the OWNER field is zero and any
+underlying block will not be freed.
+
+ The functions for allocating and accessing matrices are defined in
+`gsl_matrix.h'
+
+* Menu:
+
+* Matrix allocation::
+* Accessing matrix elements::
+* Initializing matrix elements::
+* Reading and writing matrices::
+* Matrix views::
+* Creating row and column views::
+* Copying matrices::
+* Copying rows and columns::
+* Exchanging rows and columns::
+* Matrix operations::
+* Finding maximum and minimum elements of matrices::
+* Matrix properties::
+* Example programs for matrices::
+
+
+File: gsl-ref.info, Node: Matrix allocation, Next: Accessing matrix elements, Up: Matrices
+
+8.4.1 Matrix allocation
+-----------------------
+
+The functions for allocating memory to a matrix follow the style of
+`malloc' and `free'. They also perform their own error checking. If
+there is insufficient memory available to allocate a vector then the
+functions call the GSL error handler (with an error number of
+`GSL_ENOMEM') in addition to returning a null pointer. Thus if you use
+the library error handler to abort your program then it isn't necessary
+to check every `alloc'.
+
+ -- Function: gsl_matrix * gsl_matrix_alloc (size_t N1, size_t N2)
+ This function creates a matrix of size N1 rows by N2 columns,
+ returning a pointer to a newly initialized matrix struct. A new
+ block is allocated for the elements of the matrix, and stored in
+ the BLOCK component of the matrix struct. The block is "owned" by
+ the matrix, and will be deallocated when the matrix is deallocated.
+
+ -- Function: gsl_matrix * gsl_matrix_calloc (size_t N1, size_t N2)
+ This function allocates memory for a matrix of size N1 rows by N2
+ columns and initializes all the elements of the matrix to zero.
+
+ -- Function: void gsl_matrix_free (gsl_matrix * M)
+ This function frees a previously allocated matrix M. If the
+ matrix was created using `gsl_matrix_alloc' then the block
+ underlying the matrix will also be deallocated. If the matrix has
+ been created from another object then the memory is still owned by
+ that object and will not be deallocated. The matrix M must be a
+ valid matrix object (a null pointer is not allowed).
+
+
+File: gsl-ref.info, Node: Accessing matrix elements, Next: Initializing matrix elements, Prev: Matrix allocation, Up: Matrices
+
+8.4.2 Accessing matrix elements
+-------------------------------
+
+The functions for accessing the elements of a matrix use the same range
+checking system as vectors. You can turn off range checking by
+recompiling your program with the preprocessor definition
+`GSL_RANGE_CHECK_OFF'.
+
+ The elements of the matrix are stored in "C-order", where the second
+index moves continuously through memory. More precisely, the element
+accessed by the function `gsl_matrix_get(m,i,j)' and
+`gsl_matrix_set(m,i,j,x)' is
+
+ m->data[i * m->tda + j]
+
+where TDA is the physical row-length of the matrix.
+
+ -- Function: double gsl_matrix_get (const gsl_matrix * M, size_t I,
+ size_t J)
+ This function returns the (i,j)-th element of a matrix M. If I or
+ J lie outside the allowed range of 0 to N1-1 and 0 to N2-1 then
+ the error handler is invoked and 0 is returned.
+
+ -- Function: void gsl_matrix_set (gsl_matrix * M, size_t I, size_t J,
+ double X)
+ This function sets the value of the (i,j)-th element of a matrix M
+ to X. If I or J lies outside the allowed range of 0 to N1-1 and 0
+ to N2-1 then the error handler is invoked.
+
+ -- Function: double * gsl_matrix_ptr (gsl_matrix * M, size_t I, size_t
+ J)
+ -- Function: const double * gsl_matrix_const_ptr (const gsl_matrix *
+ M, size_t I, size_t J)
+ These functions return a pointer to the (i,j)-th element of a
+ matrix M. If I or J lie outside the allowed range of 0 to N1-1
+ and 0 to N2-1 then the error handler is invoked and a null pointer
+ is returned.
+
+
+File: gsl-ref.info, Node: Initializing matrix elements, Next: Reading and writing matrices, Prev: Accessing matrix elements, Up: Matrices
+
+8.4.3 Initializing matrix elements
+----------------------------------
+
+ -- Function: void gsl_matrix_set_all (gsl_matrix * M, double X)
+ This function sets all the elements of the matrix M to the value X.
+
+ -- Function: void gsl_matrix_set_zero (gsl_matrix * M)
+ This function sets all the elements of the matrix M to zero.
+
+ -- Function: void gsl_matrix_set_identity (gsl_matrix * M)
+ This function sets the elements of the matrix M to the
+ corresponding elements of the identity matrix, m(i,j) =
+ \delta(i,j), i.e. a unit diagonal with all off-diagonal elements
+ zero. This applies to both square and rectangular matrices.
+
+
+File: gsl-ref.info, Node: Reading and writing matrices, Next: Matrix views, Prev: Initializing matrix elements, Up: Matrices
+
+8.4.4 Reading and writing matrices
+----------------------------------
+
+The library provides functions for reading and writing matrices to a
+file as binary data or formatted text.
+
+ -- Function: int gsl_matrix_fwrite (FILE * STREAM, const gsl_matrix *
+ M)
+ This function writes the elements of the matrix M to the stream
+ STREAM in binary format. The return value is 0 for success and
+ `GSL_EFAILED' if there was a problem writing to the file. Since
+ the data is written in the native binary format it may not be
+ portable between different architectures.
+
+ -- Function: int gsl_matrix_fread (FILE * STREAM, gsl_matrix * M)
+ This function reads into the matrix M from the open stream STREAM
+ in binary format. The matrix M must be preallocated with the
+ correct dimensions since the function uses the size of M to
+ determine how many bytes to read. The return value is 0 for
+ success and `GSL_EFAILED' if there was a problem reading from the
+ file. The data is assumed to have been written in the native
+ binary format on the same architecture.
+
+ -- Function: int gsl_matrix_fprintf (FILE * STREAM, const gsl_matrix *
+ M, const char * FORMAT)
+ This function writes the elements of the matrix M line-by-line to
+ the stream STREAM using the format specifier FORMAT, which should
+ be one of the `%g', `%e' or `%f' formats for floating point
+ numbers and `%d' for integers. The function returns 0 for success
+ and `GSL_EFAILED' if there was a problem writing to the file.
+
+ -- Function: int gsl_matrix_fscanf (FILE * STREAM, gsl_matrix * M)
+ This function reads formatted data from the stream STREAM into the
+ matrix M. The matrix M must be preallocated with the correct
+ dimensions since the function uses the size of M to determine how
+ many numbers to read. The function returns 0 for success and
+ `GSL_EFAILED' if there was a problem reading from the file.
+
+
+File: gsl-ref.info, Node: Matrix views, Next: Creating row and column views, Prev: Reading and writing matrices, Up: Matrices
+
+8.4.5 Matrix views
+------------------
+
+A matrix view is a temporary object, stored on the stack, which can be
+used to operate on a subset of matrix elements. Matrix views can be
+defined for both constant and non-constant matrices using separate types
+that preserve constness. A matrix view has the type `gsl_matrix_view'
+and a constant matrix view has the type `gsl_matrix_const_view'. In
+both cases the elements of the view can by accessed using the `matrix'
+component of the view object. A pointer `gsl_matrix *' or `const
+gsl_matrix *' can be obtained by taking the address of the `matrix'
+component with the `&' operator. In addition to matrix views it is
+also possible to create vector views of a matrix, such as row or column
+views.
+
+ -- Function: gsl_matrix_view gsl_matrix_submatrix (gsl_matrix * M,
+ size_t K1, size_t K2, size_t N1, size_t N2)
+ -- Function: gsl_matrix_const_view gsl_matrix_const_submatrix (const
+ gsl_matrix * M, size_t K1, size_t K2, size_t N1, size_t N2)
+ These functions return a matrix view of a submatrix of the matrix
+ M. The upper-left element of the submatrix is the element (K1,K2)
+ of the original matrix. The submatrix has N1 rows and N2 columns.
+ The physical number of columns in memory given by TDA is
+ unchanged. Mathematically, the (i,j)-th element of the new matrix
+ is given by,
+
+ m'(i,j) = m->data[(k1*m->tda + k2) + i*m->tda + j]
+
+ where the index I runs from 0 to `n1-1' and the index J runs from
+ 0 to `n2-1'.
+
+ The `data' pointer of the returned matrix struct is set to null if
+ the combined parameters (I,J,N1,N2,TDA) overrun the ends of the
+ original matrix.
+
+ The new matrix view is only a view of the block underlying the
+ existing matrix, M. The block containing the elements of M is not
+ owned by the new matrix view. When the view goes out of scope the
+ original matrix M and its block will continue to exist. The
+ original memory can only be deallocated by freeing the original
+ matrix. Of course, the original matrix should not be deallocated
+ while the view is still in use.
+
+ The function `gsl_matrix_const_submatrix' is equivalent to
+ `gsl_matrix_submatrix' but can be used for matrices which are
+ declared `const'.
+
+ -- Function: gsl_matrix_view gsl_matrix_view_array (double * BASE,
+ size_t N1, size_t N2)
+ -- Function: gsl_matrix_const_view gsl_matrix_const_view_array (const
+ double * BASE, size_t N1, size_t N2)
+ These functions return a matrix view of the array BASE. The
+ matrix has N1 rows and N2 columns. The physical number of columns
+ in memory is also given by N2. Mathematically, the (i,j)-th
+ element of the new matrix is given by,
+
+ m'(i,j) = base[i*n2 + j]
+
+ where the index I runs from 0 to `n1-1' and the index J runs from
+ 0 to `n2-1'.
+
+ The new matrix is only a view of the array BASE. When the view
+ goes out of scope the original array BASE will continue to exist.
+ The original memory can only be deallocated by freeing the original
+ array. Of course, the original array should not be deallocated
+ while the view is still in use.
+
+ The function `gsl_matrix_const_view_array' is equivalent to
+ `gsl_matrix_view_array' but can be used for matrices which are
+ declared `const'.
+
+ -- Function: gsl_matrix_view gsl_matrix_view_array_with_tda (double *
+ BASE, size_t N1, size_t N2, size_t TDA)
+ -- Function: gsl_matrix_const_view
+ gsl_matrix_const_view_array_with_tda (const double * BASE,
+ size_t N1, size_t N2, size_t TDA)
+ These functions return a matrix view of the array BASE with a
+ physical number of columns TDA which may differ from the
+ corresponding dimension of the matrix. The matrix has N1 rows and
+ N2 columns, and the physical number of columns in memory is given
+ by TDA. Mathematically, the (i,j)-th element of the new matrix is
+ given by,
+
+ m'(i,j) = base[i*tda + j]
+
+ where the index I runs from 0 to `n1-1' and the index J runs from
+ 0 to `n2-1'.
+
+ The new matrix is only a view of the array BASE. When the view
+ goes out of scope the original array BASE will continue to exist.
+ The original memory can only be deallocated by freeing the original
+ array. Of course, the original array should not be deallocated
+ while the view is still in use.
+
+ The function `gsl_matrix_const_view_array_with_tda' is equivalent
+ to `gsl_matrix_view_array_with_tda' but can be used for matrices
+ which are declared `const'.
+
+ -- Function: gsl_matrix_view gsl_matrix_view_vector (gsl_vector * V,
+ size_t N1, size_t N2)
+ -- Function: gsl_matrix_const_view gsl_matrix_const_view_vector (const
+ gsl_vector * V, size_t N1, size_t N2)
+ These functions return a matrix view of the vector V. The matrix
+ has N1 rows and N2 columns. The vector must have unit stride. The
+ physical number of columns in memory is also given by N2.
+ Mathematically, the (i,j)-th element of the new matrix is given by,
+
+ m'(i,j) = v->data[i*n2 + j]
+
+ where the index I runs from 0 to `n1-1' and the index J runs from
+ 0 to `n2-1'.
+
+ The new matrix is only a view of the vector V. When the view goes
+ out of scope the original vector V will continue to exist. The
+ original memory can only be deallocated by freeing the original
+ vector. Of course, the original vector should not be deallocated
+ while the view is still in use.
+
+ The function `gsl_matrix_const_view_vector' is equivalent to
+ `gsl_matrix_view_vector' but can be used for matrices which are
+ declared `const'.
+
+ -- Function: gsl_matrix_view gsl_matrix_view_vector_with_tda
+ (gsl_vector * V, size_t N1, size_t N2, size_t TDA)
+ -- Function: gsl_matrix_const_view
+gsl_matrix_const_view_vector_with_tda (const gsl_vector * V, size_t N1,
+ size_t N2, size_t TDA)
+ These functions return a matrix view of the vector V with a
+ physical number of columns TDA which may differ from the
+ corresponding matrix dimension. The vector must have unit stride.
+ The matrix has N1 rows and N2 columns, and the physical number of
+ columns in memory is given by TDA. Mathematically, the (i,j)-th
+ element of the new matrix is given by,
+
+ m'(i,j) = v->data[i*tda + j]
+
+ where the index I runs from 0 to `n1-1' and the index J runs from
+ 0 to `n2-1'.
+
+ The new matrix is only a view of the vector V. When the view goes
+ out of scope the original vector V will continue to exist. The
+ original memory can only be deallocated by freeing the original
+ vector. Of course, the original vector should not be deallocated
+ while the view is still in use.
+
+ The function `gsl_matrix_const_view_vector_with_tda' is equivalent
+ to `gsl_matrix_view_vector_with_tda' but can be used for matrices
+ which are declared `const'.
+
+
+File: gsl-ref.info, Node: Creating row and column views, Next: Copying matrices, Prev: Matrix views, Up: Matrices
+
+8.4.6 Creating row and column views
+-----------------------------------
+
+In general there are two ways to access an object, by reference or by
+copying. The functions described in this section create vector views
+which allow access to a row or column of a matrix by reference.
+Modifying elements of the view is equivalent to modifying the matrix,
+since both the vector view and the matrix point to the same memory
+block.
+
+ -- Function: gsl_vector_view gsl_matrix_row (gsl_matrix * M, size_t I)
+ -- Function: gsl_vector_const_view gsl_matrix_const_row (const
+ gsl_matrix * M, size_t I)
+ These functions return a vector view of the I-th row of the matrix
+ M. The `data' pointer of the new vector is set to null if I is
+ out of range.
+
+ The function `gsl_vector_const_row' is equivalent to
+ `gsl_matrix_row' but can be used for matrices which are declared
+ `const'.
+
+ -- Function: gsl_vector_view gsl_matrix_column (gsl_matrix * M, size_t
+ J)
+ -- Function: gsl_vector_const_view gsl_matrix_const_column (const
+ gsl_matrix * M, size_t J)
+ These functions return a vector view of the J-th column of the
+ matrix M. The `data' pointer of the new vector is set to null if
+ J is out of range.
+
+ The function `gsl_vector_const_column' is equivalent to
+ `gsl_matrix_column' but can be used for matrices which are declared
+ `const'.
+
+ -- Function: gsl_vector_view gsl_matrix_diagonal (gsl_matrix * M)
+ -- Function: gsl_vector_const_view gsl_matrix_const_diagonal (const
+ gsl_matrix * M)
+ These functions returns a vector view of the diagonal of the matrix
+ M. The matrix M is not required to be square. For a rectangular
+ matrix the length of the diagonal is the same as the smaller
+ dimension of the matrix.
+
+ The function `gsl_matrix_const_diagonal' is equivalent to
+ `gsl_matrix_diagonal' but can be used for matrices which are
+ declared `const'.
+
+ -- Function: gsl_vector_view gsl_matrix_subdiagonal (gsl_matrix * M,
+ size_t K)
+ -- Function: gsl_vector_const_view gsl_matrix_const_subdiagonal (const
+ gsl_matrix * M, size_t K)
+ These functions return a vector view of the K-th subdiagonal of
+ the matrix M. The matrix M is not required to be square. The
+ diagonal of the matrix corresponds to k = 0.
+
+ The function `gsl_matrix_const_subdiagonal' is equivalent to
+ `gsl_matrix_subdiagonal' but can be used for matrices which are
+ declared `const'.
+
+ -- Function: gsl_vector_view gsl_matrix_superdiagonal (gsl_matrix * M,
+ size_t K)
+ -- Function: gsl_vector_const_view gsl_matrix_const_superdiagonal
+ (const gsl_matrix * M, size_t K)
+ These functions return a vector view of the K-th superdiagonal of
+ the matrix M. The matrix M is not required to be square. The
+ diagonal of the matrix corresponds to k = 0.
+
+ The function `gsl_matrix_const_superdiagonal' is equivalent to
+ `gsl_matrix_superdiagonal' but can be used for matrices which are
+ declared `const'.
+
+
+File: gsl-ref.info, Node: Copying matrices, Next: Copying rows and columns, Prev: Creating row and column views, Up: Matrices
+
+8.4.7 Copying matrices
+----------------------
+
+ -- Function: int gsl_matrix_memcpy (gsl_matrix * DEST, const
+ gsl_matrix * SRC)
+ This function copies the elements of the matrix SRC into the
+ matrix DEST. The two matrices must have the same size.
+
+ -- Function: int gsl_matrix_swap (gsl_matrix * M1, gsl_matrix * M2)
+ This function exchanges the elements of the matrices M1 and M2 by
+ copying. The two matrices must have the same size.
+
+
+File: gsl-ref.info, Node: Copying rows and columns, Next: Exchanging rows and columns, Prev: Copying matrices, Up: Matrices
+
+8.4.8 Copying rows and columns
+------------------------------
+
+The functions described in this section copy a row or column of a matrix
+into a vector. This allows the elements of the vector and the matrix to
+be modified independently. Note that if the matrix and the vector point
+to overlapping regions of memory then the result will be undefined. The
+same effect can be achieved with more generality using
+`gsl_vector_memcpy' with vector views of rows and columns.
+
+ -- Function: int gsl_matrix_get_row (gsl_vector * V, const gsl_matrix
+ * M, size_t I)
+ This function copies the elements of the I-th row of the matrix M
+ into the vector V. The length of the vector must be the same as
+ the length of the row.
+
+ -- Function: int gsl_matrix_get_col (gsl_vector * V, const gsl_matrix
+ * M, size_t J)
+ This function copies the elements of the J-th column of the matrix
+ M into the vector V. The length of the vector must be the same as
+ the length of the column.
+
+ -- Function: int gsl_matrix_set_row (gsl_matrix * M, size_t I, const
+ gsl_vector * V)
+ This function copies the elements of the vector V into the I-th
+ row of the matrix M. The length of the vector must be the same as
+ the length of the row.
+
+ -- Function: int gsl_matrix_set_col (gsl_matrix * M, size_t J, const
+ gsl_vector * V)
+ This function copies the elements of the vector V into the J-th
+ column of the matrix M. The length of the vector must be the same
+ as the length of the column.
+
+
+File: gsl-ref.info, Node: Exchanging rows and columns, Next: Matrix operations, Prev: Copying rows and columns, Up: Matrices
+
+8.4.9 Exchanging rows and columns
+---------------------------------
+
+The following functions can be used to exchange the rows and columns of
+a matrix.
+
+ -- Function: int gsl_matrix_swap_rows (gsl_matrix * M, size_t I,
+ size_t J)
+ This function exchanges the I-th and J-th rows of the matrix M
+ in-place.
+
+ -- Function: int gsl_matrix_swap_columns (gsl_matrix * M, size_t I,
+ size_t J)
+ This function exchanges the I-th and J-th columns of the matrix M
+ in-place.
+
+ -- Function: int gsl_matrix_swap_rowcol (gsl_matrix * M, size_t I,
+ size_t J)
+ This function exchanges the I-th row and J-th column of the matrix
+ M in-place. The matrix must be square for this operation to be
+ possible.
+
+ -- Function: int gsl_matrix_transpose_memcpy (gsl_matrix * DEST, const
+ gsl_matrix * SRC)
+ This function makes the matrix DEST the transpose of the matrix
+ SRC by copying the elements of SRC into DEST. This function works
+ for all matrices provided that the dimensions of the matrix DEST
+ match the transposed dimensions of the matrix SRC.
+
+ -- Function: int gsl_matrix_transpose (gsl_matrix * M)
+ This function replaces the matrix M by its transpose by copying
+ the elements of the matrix in-place. The matrix must be square
+ for this operation to be possible.
+
+
+File: gsl-ref.info, Node: Matrix operations, Next: Finding maximum and minimum elements of matrices, Prev: Exchanging rows and columns, Up: Matrices
+
+8.4.10 Matrix operations
+------------------------
+
+The following operations are defined for real and complex matrices.
+
+ -- Function: int gsl_matrix_add (gsl_matrix * A, const gsl_matrix * B)
+ This function adds the elements of matrix B to the elements of
+ matrix A, a'(i,j) = a(i,j) + b(i,j). The two matrices must have the
+ same dimensions.
+
+ -- Function: int gsl_matrix_sub (gsl_matrix * A, const gsl_matrix * B)
+ This function subtracts the elements of matrix B from the elements
+ of matrix A, a'(i,j) = a(i,j) - b(i,j). The two matrices must have
+ the same dimensions.
+
+ -- Function: int gsl_matrix_mul_elements (gsl_matrix * A, const
+ gsl_matrix * B)
+ This function multiplies the elements of matrix A by the elements
+ of matrix B, a'(i,j) = a(i,j) * b(i,j). The two matrices must have
+ the same dimensions.
+
+ -- Function: int gsl_matrix_div_elements (gsl_matrix * A, const
+ gsl_matrix * B)
+ This function divides the elements of matrix A by the elements of
+ matrix B, a'(i,j) = a(i,j) / b(i,j). The two matrices must have the
+ same dimensions.
+
+ -- Function: int gsl_matrix_scale (gsl_matrix * A, const double X)
+ This function multiplies the elements of matrix A by the constant
+ factor X, a'(i,j) = x a(i,j).
+
+ -- Function: int gsl_matrix_add_constant (gsl_matrix * A, const double
+ X)
+ This function adds the constant value X to the elements of the
+ matrix A, a'(i,j) = a(i,j) + x.
+
+
+File: gsl-ref.info, Node: Finding maximum and minimum elements of matrices, Next: Matrix properties, Prev: Matrix operations, Up: Matrices
+
+8.4.11 Finding maximum and minimum elements of matrices
+-------------------------------------------------------
+
+The following operations are only defined for real matrices.
+
+ -- Function: double gsl_matrix_max (const gsl_matrix * M)
+ This function returns the maximum value in the matrix M.
+
+ -- Function: double gsl_matrix_min (const gsl_matrix * M)
+ This function returns the minimum value in the matrix M.
+
+ -- Function: void gsl_matrix_minmax (const gsl_matrix * M, double *
+ MIN_OUT, double * MAX_OUT)
+ This function returns the minimum and maximum values in the matrix
+ M, storing them in MIN_OUT and MAX_OUT.
+
+ -- Function: void gsl_matrix_max_index (const gsl_matrix * M, size_t *
+ IMAX, size_t * JMAX)
+ This function returns the indices of the maximum value in the
+ matrix M, storing them in IMAX and JMAX. When there are several
+ equal maximum elements then the first element found is returned,
+ searching in row-major order.
+
+ -- Function: void gsl_matrix_min_index (const gsl_matrix * M, size_t *
+ IMIN, size_t * JMIN)
+ This function returns the indices of the minimum value in the
+ matrix M, storing them in IMIN and JMIN. When there are several
+ equal minimum elements then the first element found is returned,
+ searching in row-major order.
+
+ -- Function: void gsl_matrix_minmax_index (const gsl_matrix * M,
+ size_t * IMIN, size_t * JMIN, size_t * IMAX, size_t * JMAX)
+ This function returns the indices of the minimum and maximum
+ values in the matrix M, storing them in (IMIN,JMIN) and
+ (IMAX,JMAX). When there are several equal minimum or maximum
+ elements then the first elements found are returned, searching in
+ row-major order.
+
+
+File: gsl-ref.info, Node: Matrix properties, Next: Example programs for matrices, Prev: Finding maximum and minimum elements of matrices, Up: Matrices
+
+8.4.12 Matrix properties
+------------------------
+
+ -- Function: int gsl_matrix_isnull (const gsl_matrix * M)
+ -- Function: int gsl_matrix_ispos (const gsl_matrix * M)
+ -- Function: int gsl_matrix_isneg (const gsl_matrix * M)
+ These functions return 1 if all the elements of the matrix M are
+ zero, strictly positive, or strictly negative respectively, and 0
+ otherwise. To test for a non-negative matrix, use the expression
+ `!gsl_matrix_isneg(m)'. To test whether a matrix is
+ positive-definite, use the Cholesky decomposition (*note Cholesky
+ Decomposition::).
+
+
+File: gsl-ref.info, Node: Example programs for matrices, Prev: Matrix properties, Up: Matrices
+
+8.4.13 Example programs for matrices
+------------------------------------
+
+The program below shows how to allocate, initialize and read from a
+matrix using the functions `gsl_matrix_alloc', `gsl_matrix_set' and
+`gsl_matrix_get'.
+
+ #include <stdio.h>
+ #include <gsl/gsl_matrix.h>
+
+ int
+ main (void)
+ {
+ int i, j;
+ gsl_matrix * m = gsl_matrix_alloc (10, 3);
+
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 3; j++)
+ gsl_matrix_set (m, i, j, 0.23 + 100*i + j);
+
+ for (i = 0; i < 100; i++) /* OUT OF RANGE ERROR */
+ for (j = 0; j < 3; j++)
+ printf ("m(%d,%d) = %g\n", i, j,
+ gsl_matrix_get (m, i, j));
+
+ gsl_matrix_free (m);
+
+ return 0;
+ }
+
+Here is the output from the program. The final loop attempts to read
+outside the range of the matrix `m', and the error is trapped by the
+range-checking code in `gsl_matrix_get'.
+
+ $ ./a.out
+ m(0,0) = 0.23
+ m(0,1) = 1.23
+ m(0,2) = 2.23
+ m(1,0) = 100.23
+ m(1,1) = 101.23
+ m(1,2) = 102.23
+ ...
+ m(9,2) = 902.23
+ gsl: matrix_source.c:13: ERROR: first index out of range
+ Default GSL error handler invoked.
+ Aborted (core dumped)
+
+The next program shows how to write a matrix to a file.
+
+ #include <stdio.h>
+ #include <gsl/gsl_matrix.h>
+
+ int
+ main (void)
+ {
+ int i, j, k = 0;
+ gsl_matrix * m = gsl_matrix_alloc (100, 100);
+ gsl_matrix * a = gsl_matrix_alloc (100, 100);
+
+ for (i = 0; i < 100; i++)
+ for (j = 0; j < 100; j++)
+ gsl_matrix_set (m, i, j, 0.23 + i + j);
+
+ {
+ FILE * f = fopen ("test.dat", "wb");
+ gsl_matrix_fwrite (f, m);
+ fclose (f);
+ }
+
+ {
+ FILE * f = fopen ("test.dat", "rb");
+ gsl_matrix_fread (f, a);
+ fclose (f);
+ }
+
+ for (i = 0; i < 100; i++)
+ for (j = 0; j < 100; j++)
+ {
+ double mij = gsl_matrix_get (m, i, j);
+ double aij = gsl_matrix_get (a, i, j);
+ if (mij != aij) k++;
+ }
+
+ gsl_matrix_free (m);
+ gsl_matrix_free (a);
+
+ printf ("differences = %d (should be zero)\n", k);
+ return (k > 0);
+ }
+
+After running this program the file `test.dat' should contain the
+elements of `m', written in binary format. The matrix which is read
+back in using the function `gsl_matrix_fread' should be exactly equal
+to the original matrix.
+
+ The following program demonstrates the use of vector views. The
+program computes the column norms of a matrix.
+
+ #include <math.h>
+ #include <stdio.h>
+ #include <gsl/gsl_matrix.h>
+ #include <gsl/gsl_blas.h>
+
+ int
+ main (void)
+ {
+ size_t i,j;
+
+ gsl_matrix *m = gsl_matrix_alloc (10, 10);
+
+ for (i = 0; i < 10; i++)
+ for (j = 0; j < 10; j++)
+ gsl_matrix_set (m, i, j, sin (i) + cos (j));
+
+ for (j = 0; j < 10; j++)
+ {
+ gsl_vector_view column = gsl_matrix_column (m, j);
+ double d;
+
+ d = gsl_blas_dnrm2 (&column.vector);
+
+ printf ("matrix column %d, norm = %g\n", j, d);
+ }
+
+ gsl_matrix_free (m);
+
+ return 0;
+ }
+
+Here is the output of the program,
+
+ $ ./a.out
+ matrix column 0, norm = 4.31461
+ matrix column 1, norm = 3.1205
+ matrix column 2, norm = 2.19316
+ matrix column 3, norm = 3.26114
+ matrix column 4, norm = 2.53416
+ matrix column 5, norm = 2.57281
+ matrix column 6, norm = 4.20469
+ matrix column 7, norm = 3.65202
+ matrix column 8, norm = 2.08524
+ matrix column 9, norm = 3.07313
+
+The results can be confirmed using GNU OCTAVE,
+
+ $ octave
+ GNU Octave, version 2.0.16.92
+ octave> m = sin(0:9)' * ones(1,10)
+ + ones(10,1) * cos(0:9);
+ octave> sqrt(sum(m.^2))
+ ans =
+ 4.3146 3.1205 2.1932 3.2611 2.5342 2.5728
+ 4.2047 3.6520 2.0852 3.0731
+
+
+File: gsl-ref.info, Node: Vector and Matrix References and Further Reading, Prev: Matrices, Up: Vectors and Matrices
+
+8.5 References and Further Reading
+==================================
+
+The block, vector and matrix objects in GSL follow the `valarray' model
+of C++. A description of this model can be found in the following
+reference,
+
+ B. Stroustrup, `The C++ Programming Language' (3rd Ed), Section
+ 22.4 Vector Arithmetic. Addison-Wesley 1997, ISBN 0-201-88954-4.
+
+
+File: gsl-ref.info, Node: Permutations, Next: Combinations, Prev: Vectors and Matrices, Up: Top
+
+9 Permutations
+**************
+
+This chapter describes functions for creating and manipulating
+permutations. A permutation p is represented by an array of n integers
+in the range 0 to n-1, where each value p_i occurs once and only once.
+The application of a permutation p to a vector v yields a new vector v'
+where v'_i = v_{p_i}. For example, the array (0,1,3,2) represents a
+permutation which exchanges the last two elements of a four element
+vector. The corresponding identity permutation is (0,1,2,3).
+
+ Note that the permutations produced by the linear algebra routines
+correspond to the exchange of matrix columns, and so should be
+considered as applying to row-vectors in the form v' = v P rather than
+column-vectors, when permuting the elements of a vector.
+
+ The functions described in this chapter are defined in the header
+file `gsl_permutation.h'.
+
+* Menu:
+
+* The Permutation struct::
+* Permutation allocation::
+* Accessing permutation elements::
+* Permutation properties::
+* Permutation functions::
+* Applying Permutations::
+* Reading and writing permutations::
+* Permutations in cyclic form::
+* Permutation Examples::
+* Permutation References and Further Reading::
+
+
+File: gsl-ref.info, Node: The Permutation struct, Next: Permutation allocation, Up: Permutations
+
+9.1 The Permutation struct
+==========================
+
+A permutation is defined by a structure containing two components, the
+size of the permutation and a pointer to the permutation array. The
+elements of the permutation array are all of type `size_t'. The
+`gsl_permutation' structure looks like this,
+
+ typedef struct
+ {
+ size_t size;
+ size_t * data;
+ } gsl_permutation;
+
+
+
+File: gsl-ref.info, Node: Permutation allocation, Next: Accessing permutation elements, Prev: The Permutation struct, Up: Permutations
+
+9.2 Permutation allocation
+==========================
+
+ -- Function: gsl_permutation * gsl_permutation_alloc (size_t N)
+ This function allocates memory for a new permutation of size N.
+ The permutation is not initialized and its elements are undefined.
+ Use the function `gsl_permutation_calloc' if you want to create a
+ permutation which is initialized to the identity. A null pointer is
+ returned if insufficient memory is available to create the
+ permutation.
+
+ -- Function: gsl_permutation * gsl_permutation_calloc (size_t N)
+ This function allocates memory for a new permutation of size N and
+ initializes it to the identity. A null pointer is returned if
+ insufficient memory is available to create the permutation.
+
+ -- Function: void gsl_permutation_init (gsl_permutation * P)
+ This function initializes the permutation P to the identity, i.e.
+ (0,1,2,...,n-1).
+
+ -- Function: void gsl_permutation_free (gsl_permutation * P)
+ This function frees all the memory used by the permutation P.
+
+ -- Function: int gsl_permutation_memcpy (gsl_permutation * DEST, const
+ gsl_permutation * SRC)
+ This function copies the elements of the permutation SRC into the
+ permutation DEST. The two permutations must have the same size.
+
+
+File: gsl-ref.info, Node: Accessing permutation elements, Next: Permutation properties, Prev: Permutation allocation, Up: Permutations
+
+9.3 Accessing permutation elements
+==================================
+
+The following functions can be used to access and manipulate
+permutations.
+
+ -- Function: size_t gsl_permutation_get (const gsl_permutation * P,
+ const size_t I)
+ This function returns the value of the I-th element of the
+ permutation P. If I lies outside the allowed range of 0 to N-1
+ then the error handler is invoked and 0 is returned.
+
+ -- Function: int gsl_permutation_swap (gsl_permutation * P, const
+ size_t I, const size_t J)
+ This function exchanges the I-th and J-th elements of the
+ permutation P.
+
+
+File: gsl-ref.info, Node: Permutation properties, Next: Permutation functions, Prev: Accessing permutation elements, Up: Permutations
+
+9.4 Permutation properties
+==========================
+
+ -- Function: size_t gsl_permutation_size (const gsl_permutation * P)
+ This function returns the size of the permutation P.
+
+ -- Function: size_t * gsl_permutation_data (const gsl_permutation * P)
+ This function returns a pointer to the array of elements in the
+ permutation P.
+
+ -- Function: int gsl_permutation_valid (gsl_permutation * P)
+ This function checks that the permutation P is valid. The N
+ elements should contain each of the numbers 0 to N-1 once and only
+ once.
+
+
+File: gsl-ref.info, Node: Permutation functions, Next: Applying Permutations, Prev: Permutation properties, Up: Permutations
+
+9.5 Permutation functions
+=========================
+
+ -- Function: void gsl_permutation_reverse (gsl_permutation * P)
+ This function reverses the elements of the permutation P.
+
+ -- Function: int gsl_permutation_inverse (gsl_permutation * INV, const
+ gsl_permutation * P)
+ This function computes the inverse of the permutation P, storing
+ the result in INV.
+
+ -- Function: int gsl_permutation_next (gsl_permutation * P)
+ This function advances the permutation P to the next permutation
+ in lexicographic order and returns `GSL_SUCCESS'. If no further
+ permutations are available it returns `GSL_FAILURE' and leaves P
+ unmodified. Starting with the identity permutation and repeatedly
+ applying this function will iterate through all possible
+ permutations of a given order.
+
+ -- Function: int gsl_permutation_prev (gsl_permutation * P)
+ This function steps backwards from the permutation P to the
+ previous permutation in lexicographic order, returning
+ `GSL_SUCCESS'. If no previous permutation is available it returns
+ `GSL_FAILURE' and leaves P unmodified.
+
+
+File: gsl-ref.info, Node: Applying Permutations, Next: Reading and writing permutations, Prev: Permutation functions, Up: Permutations
+
+9.6 Applying Permutations
+=========================
+
+ -- Function: int gsl_permute (const size_t * P, double * DATA, size_t
+ STRIDE, size_t N)
+ This function applies the permutation P to the array DATA of size
+ N with stride STRIDE.
+
+ -- Function: int gsl_permute_inverse (const size_t * P, double * DATA,
+ size_t STRIDE, size_t N)
+ This function applies the inverse of the permutation P to the
+ array DATA of size N with stride STRIDE.
+
+ -- Function: int gsl_permute_vector (const gsl_permutation * P,
+ gsl_vector * V)
+ This function applies the permutation P to the elements of the
+ vector V, considered as a row-vector acted on by a permutation
+ matrix from the right, v' = v P. The j-th column of the
+ permutation matrix P is given by the p_j-th column of the identity
+ matrix. The permutation P and the vector V must have the same
+ length.
+
+ -- Function: int gsl_permute_vector_inverse (const gsl_permutation *
+ P, gsl_vector * V)
+ This function applies the inverse of the permutation P to the
+ elements of the vector V, considered as a row-vector acted on by
+ an inverse permutation matrix from the right, v' = v P^T. Note
+ that for permutation matrices the inverse is the same as the
+ transpose. The j-th column of the permutation matrix P is given by
+ the p_j-th column of the identity matrix. The permutation P and
+ the vector V must have the same length.
+
+ -- Function: int gsl_permutation_mul (gsl_permutation * P, const
+ gsl_permutation * PA, const gsl_permutation * PB)
+ This function combines the two permutations PA and PB into a
+ single permutation P, where p = pa . pb. The permutation P is
+ equivalent to applying pb first and then PA.
+
+
+File: gsl-ref.info, Node: Reading and writing permutations, Next: Permutations in cyclic form, Prev: Applying Permutations, Up: Permutations
+
+9.7 Reading and writing permutations
+====================================
+
+The library provides functions for reading and writing permutations to a
+file as binary data or formatted text.
+
+ -- Function: int gsl_permutation_fwrite (FILE * STREAM, const
+ gsl_permutation * P)
+ This function writes the elements of the permutation P to the
+ stream STREAM in binary format. The function returns
+ `GSL_EFAILED' if there was a problem writing to the file. Since
+ the data is written in the native binary format it may not be
+ portable between different architectures.
+
+ -- Function: int gsl_permutation_fread (FILE * STREAM, gsl_permutation
+ * P)
+ This function reads into the permutation P from the open stream
+ STREAM in binary format. The permutation P must be preallocated
+ with the correct length since the function uses the size of P to
+ determine how many bytes to read. The function returns
+ `GSL_EFAILED' if there was a problem reading from the file. The
+ data is assumed to have been written in the native binary format
+ on the same architecture.
+
+ -- Function: int gsl_permutation_fprintf (FILE * STREAM, const
+ gsl_permutation * P, const char * FORMAT)
+ This function writes the elements of the permutation P
+ line-by-line to the stream STREAM using the format specifier
+ FORMAT, which should be suitable for a type of SIZE_T. On a GNU
+ system the type modifier `Z' represents `size_t', so `"%Zu\n"' is
+ a suitable format. The function returns `GSL_EFAILED' if there
+ was a problem writing to the file.
+
+ -- Function: int gsl_permutation_fscanf (FILE * STREAM,
+ gsl_permutation * P)
+ This function reads formatted data from the stream STREAM into the
+ permutation P. The permutation P must be preallocated with the
+ correct length since the function uses the size of P to determine
+ how many numbers to read. The function returns `GSL_EFAILED' if
+ there was a problem reading from the file.
+
+
+File: gsl-ref.info, Node: Permutations in cyclic form, Next: Permutation Examples, Prev: Reading and writing permutations, Up: Permutations
+
+9.8 Permutations in cyclic form
+===============================
+
+A permutation can be represented in both "linear" and "cyclic"
+notations. The functions described in this section convert between the
+two forms. The linear notation is an index mapping, and has already
+been described above. The cyclic notation expresses a permutation as a
+series of circular rearrangements of groups of elements, or "cycles".
+
+ For example, under the cycle (1 2 3), 1 is replaced by 2, 2 is
+replaced by 3 and 3 is replaced by 1 in a circular fashion. Cycles of
+different sets of elements can be combined independently, for example
+(1 2 3) (4 5) combines the cycle (1 2 3) with the cycle (4 5), which is
+an exchange of elements 4 and 5. A cycle of length one represents an
+element which is unchanged by the permutation and is referred to as a
+"singleton".
+
+ It can be shown that every permutation can be decomposed into
+combinations of cycles. The decomposition is not unique, but can always
+be rearranged into a standard "canonical form" by a reordering of
+elements. The library uses the canonical form defined in Knuth's `Art
+of Computer Programming' (Vol 1, 3rd Ed, 1997) Section 1.3.3, p.178.
+
+ The procedure for obtaining the canonical form given by Knuth is,
+
+ 1. Write all singleton cycles explicitly
+
+ 2. Within each cycle, put the smallest number first
+
+ 3. Order the cycles in decreasing order of the first number in the
+ cycle.
+
+For example, the linear representation (2 4 3 0 1) is represented as (1
+4) (0 2 3) in canonical form. The permutation corresponds to an
+exchange of elements 1 and 4, and rotation of elements 0, 2 and 3.
+
+ The important property of the canonical form is that it can be
+reconstructed from the contents of each cycle without the brackets. In
+addition, by removing the brackets it can be considered as a linear
+representation of a different permutation. In the example given above
+the permutation (2 4 3 0 1) would become (1 4 0 2 3). This mapping has
+many applications in the theory of permutations.
+
+ -- Function: int gsl_permutation_linear_to_canonical (gsl_permutation
+ * Q, const gsl_permutation * P)
+ This function computes the canonical form of the permutation P and
+ stores it in the output argument Q.
+
+ -- Function: int gsl_permutation_canonical_to_linear (gsl_permutation
+ * P, const gsl_permutation * Q)
+ This function converts a permutation Q in canonical form back into
+ linear form storing it in the output argument P.
+
+ -- Function: size_t gsl_permutation_inversions (const gsl_permutation
+ * P)
+ This function counts the number of inversions in the permutation
+ P. An inversion is any pair of elements that are not in order.
+ For example, the permutation 2031 has three inversions,
+ corresponding to the pairs (2,0) (2,1) and (3,1). The identity
+ permutation has no inversions.
+
+ -- Function: size_t gsl_permutation_linear_cycles (const
+ gsl_permutation * P)
+ This function counts the number of cycles in the permutation P,
+ given in linear form.
+
+ -- Function: size_t gsl_permutation_canonical_cycles (const
+ gsl_permutation * Q)
+ This function counts the number of cycles in the permutation Q,
+ given in canonical form.
+
+
+File: gsl-ref.info, Node: Permutation Examples, Next: Permutation References and Further Reading, Prev: Permutations in cyclic form, Up: Permutations
+
+9.9 Examples
+============
+
+The example program below creates a random permutation (by shuffling the
+elements of the identity) and finds its inverse.
+
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_randist.h>
+ #include <gsl/gsl_permutation.h>
+
+ int
+ main (void)
+ {
+ const size_t N = 10;
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_permutation * p = gsl_permutation_alloc (N);
+ gsl_permutation * q = gsl_permutation_alloc (N);
+
+ gsl_rng_env_setup();
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ printf ("initial permutation:");
+ gsl_permutation_init (p);
+ gsl_permutation_fprintf (stdout, p, " %u");
+ printf ("\n");
+
+ printf (" random permutation:");
+ gsl_ran_shuffle (r, p->data, N, sizeof(size_t));
+ gsl_permutation_fprintf (stdout, p, " %u");
+ printf ("\n");
+
+ printf ("inverse permutation:");
+ gsl_permutation_inverse (q, p);
+ gsl_permutation_fprintf (stdout, q, " %u");
+ printf ("\n");
+
+ gsl_permutation_free (p);
+ gsl_permutation_free (q);
+ gsl_rng_free (r);
+
+ return 0;
+ }
+
+Here is the output from the program,
+
+ $ ./a.out
+ initial permutation: 0 1 2 3 4 5 6 7 8 9
+ random permutation: 1 3 5 2 7 6 0 4 9 8
+ inverse permutation: 6 0 3 1 7 2 5 4 9 8
+
+The random permutation `p[i]' and its inverse `q[i]' are related
+through the identity `p[q[i]] = i', which can be verified from the
+output.
+
+ The next example program steps forwards through all possible third
+order permutations, starting from the identity,
+
+ #include <stdio.h>
+ #include <gsl/gsl_permutation.h>
+
+ int
+ main (void)
+ {
+ gsl_permutation * p = gsl_permutation_alloc (3);
+
+ gsl_permutation_init (p);
+
+ do
+ {
+ gsl_permutation_fprintf (stdout, p, " %u");
+ printf ("\n");
+ }
+ while (gsl_permutation_next(p) == GSL_SUCCESS);
+
+ gsl_permutation_free (p);
+
+ return 0;
+ }
+
+Here is the output from the program,
+
+ $ ./a.out
+ 0 1 2
+ 0 2 1
+ 1 0 2
+ 1 2 0
+ 2 0 1
+ 2 1 0
+
+The permutations are generated in lexicographic order. To reverse the
+sequence, begin with the final permutation (which is the reverse of the
+identity) and replace `gsl_permutation_next' with
+`gsl_permutation_prev'.
+
+
+File: gsl-ref.info, Node: Permutation References and Further Reading, Prev: Permutation Examples, Up: Permutations
+
+9.10 References and Further Reading
+===================================
+
+The subject of permutations is covered extensively in Knuth's `Sorting
+and Searching',
+
+ Donald E. Knuth, `The Art of Computer Programming: Sorting and
+ Searching' (Vol 3, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850.
+
+For the definition of the "canonical form" see,
+
+ Donald E. Knuth, `The Art of Computer Programming: Fundamental
+ Algorithms' (Vol 1, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850.
+ Section 1.3.3, `An Unusual Correspondence', p.178-179.
+
+
+File: gsl-ref.info, Node: Combinations, Next: Sorting, Prev: Permutations, Up: Top
+
+10 Combinations
+***************
+
+This chapter describes functions for creating and manipulating
+combinations. A combination c is represented by an array of k integers
+in the range 0 to n-1, where each value c_i occurs at most once. The
+combination c corresponds to indices of k elements chosen from an n
+element vector. Combinations are useful for iterating over all
+k-element subsets of a set.
+
+ The functions described in this chapter are defined in the header
+file `gsl_combination.h'.
+
+* Menu:
+
+* The Combination struct::
+* Combination allocation::
+* Accessing combination elements::
+* Combination properties::
+* Combination functions::
+* Reading and writing combinations::
+* Combination Examples::
+* Combination References and Further Reading::
+
+
+File: gsl-ref.info, Node: The Combination struct, Next: Combination allocation, Up: Combinations
+
+10.1 The Combination struct
+===========================
+
+A combination is defined by a structure containing three components, the
+values of n and k, and a pointer to the combination array. The
+elements of the combination array are all of type `size_t', and are
+stored in increasing order. The `gsl_combination' structure looks like
+this,
+
+ typedef struct
+ {
+ size_t n;
+ size_t k;
+ size_t *data;
+ } gsl_combination;
+
+
+
+File: gsl-ref.info, Node: Combination allocation, Next: Accessing combination elements, Prev: The Combination struct, Up: Combinations
+
+10.2 Combination allocation
+===========================
+
+ -- Function: gsl_combination * gsl_combination_alloc (size_t N, size_t
+ K)
+ This function allocates memory for a new combination with
+ parameters N, K. The combination is not initialized and its
+ elements are undefined. Use the function `gsl_combination_calloc'
+ if you want to create a combination which is initialized to the
+ lexicographically first combination. A null pointer is returned if
+ insufficient memory is available to create the combination.
+
+ -- Function: gsl_combination * gsl_combination_calloc (size_t N,
+ size_t K)
+ This function allocates memory for a new combination with
+ parameters N, K and initializes it to the lexicographically first
+ combination. A null pointer is returned if insufficient memory is
+ available to create the combination.
+
+ -- Function: void gsl_combination_init_first (gsl_combination * C)
+ This function initializes the combination C to the
+ lexicographically first combination, i.e. (0,1,2,...,k-1).
+
+ -- Function: void gsl_combination_init_last (gsl_combination * C)
+ This function initializes the combination C to the
+ lexicographically last combination, i.e. (n-k,n-k+1,...,n-1).
+
+ -- Function: void gsl_combination_free (gsl_combination * C)
+ This function frees all the memory used by the combination C.
+
+ -- Function: int gsl_combination_memcpy (gsl_combination * DEST, const
+ gsl_combination * SRC)
+ This function copies the elements of the combination SRC into the
+ combination DEST. The two combinations must have the same size.
+
+
+File: gsl-ref.info, Node: Accessing combination elements, Next: Combination properties, Prev: Combination allocation, Up: Combinations
+
+10.3 Accessing combination elements
+===================================
+
+The following function can be used to access the elements of a
+combination.
+
+ -- Function: size_t gsl_combination_get (const gsl_combination * C,
+ const size_t I)
+ This function returns the value of the I-th element of the
+ combination C. If I lies outside the allowed range of 0 to K-1
+ then the error handler is invoked and 0 is returned.
+
+
+File: gsl-ref.info, Node: Combination properties, Next: Combination functions, Prev: Accessing combination elements, Up: Combinations
+
+10.4 Combination properties
+===========================
+
+ -- Function: size_t gsl_combination_n (const gsl_combination * C)
+ This function returns the range (n) of the combination C.
+
+ -- Function: size_t gsl_combination_k (const gsl_combination * C)
+ This function returns the number of elements (k) in the
+ combination C.
+
+ -- Function: size_t * gsl_combination_data (const gsl_combination * C)
+ This function returns a pointer to the array of elements in the
+ combination C.
+
+ -- Function: int gsl_combination_valid (gsl_combination * C)
+ This function checks that the combination C is valid. The K
+ elements should lie in the range 0 to N-1, with each value
+ occurring once at most and in increasing order.
+
+
+File: gsl-ref.info, Node: Combination functions, Next: Reading and writing combinations, Prev: Combination properties, Up: Combinations
+
+10.5 Combination functions
+==========================
+
+ -- Function: int gsl_combination_next (gsl_combination * C)
+ This function advances the combination C to the next combination
+ in lexicographic order and returns `GSL_SUCCESS'. If no further
+ combinations are available it returns `GSL_FAILURE' and leaves C
+ unmodified. Starting with the first combination and repeatedly
+ applying this function will iterate through all possible
+ combinations of a given order.
+
+ -- Function: int gsl_combination_prev (gsl_combination * C)
+ This function steps backwards from the combination C to the
+ previous combination in lexicographic order, returning
+ `GSL_SUCCESS'. If no previous combination is available it returns
+ `GSL_FAILURE' and leaves C unmodified.
+
+
+File: gsl-ref.info, Node: Reading and writing combinations, Next: Combination Examples, Prev: Combination functions, Up: Combinations
+
+10.6 Reading and writing combinations
+=====================================
+
+The library provides functions for reading and writing combinations to a
+file as binary data or formatted text.
+
+ -- Function: int gsl_combination_fwrite (FILE * STREAM, const
+ gsl_combination * C)
+ This function writes the elements of the combination C to the
+ stream STREAM in binary format. The function returns
+ `GSL_EFAILED' if there was a problem writing to the file. Since
+ the data is written in the native binary format it may not be
+ portable between different architectures.
+
+ -- Function: int gsl_combination_fread (FILE * STREAM, gsl_combination
+ * C)
+ This function reads elements from the open stream STREAM into the
+ combination C in binary format. The combination C must be
+ preallocated with correct values of n and k since the function
+ uses the size of C to determine how many bytes to read. The
+ function returns `GSL_EFAILED' if there was a problem reading from
+ the file. The data is assumed to have been written in the native
+ binary format on the same architecture.
+
+ -- Function: int gsl_combination_fprintf (FILE * STREAM, const
+ gsl_combination * C, const char * FORMAT)
+ This function writes the elements of the combination C
+ line-by-line to the stream STREAM using the format specifier
+ FORMAT, which should be suitable for a type of SIZE_T. On a GNU
+ system the type modifier `Z' represents `size_t', so `"%Zu\n"' is
+ a suitable format. The function returns `GSL_EFAILED' if there
+ was a problem writing to the file.
+
+ -- Function: int gsl_combination_fscanf (FILE * STREAM,
+ gsl_combination * C)
+ This function reads formatted data from the stream STREAM into the
+ combination C. The combination C must be preallocated with
+ correct values of n and k since the function uses the size of C to
+ determine how many numbers to read. The function returns
+ `GSL_EFAILED' if there was a problem reading from the file.
+
+
+File: gsl-ref.info, Node: Combination Examples, Next: Combination References and Further Reading, Prev: Reading and writing combinations, Up: Combinations
+
+10.7 Examples
+=============
+
+The example program below prints all subsets of the set {0,1,2,3}
+ordered by size. Subsets of the same size are ordered
+lexicographically.
+
+ #include <stdio.h>
+ #include <gsl/gsl_combination.h>
+
+ int
+ main (void)
+ {
+ gsl_combination * c;
+ size_t i;
+
+ printf ("All subsets of {0,1,2,3} by size:\n") ;
+ for (i = 0; i <= 4; i++)
+ {
+ c = gsl_combination_calloc (4, i);
+ do
+ {
+ printf ("{");
+ gsl_combination_fprintf (stdout, c, " %u");
+ printf (" }\n");
+ }
+ while (gsl_combination_next (c) == GSL_SUCCESS);
+ gsl_combination_free (c);
+ }
+
+ return 0;
+ }
+
+Here is the output from the program,
+
+ $ ./a.out
+ All subsets of {0,1,2,3} by size:
+ { }
+ { 0 }
+ { 1 }
+ { 2 }
+ { 3 }
+ { 0 1 }
+ { 0 2 }
+ { 0 3 }
+ { 1 2 }
+ { 1 3 }
+ { 2 3 }
+ { 0 1 2 }
+ { 0 1 3 }
+ { 0 2 3 }
+ { 1 2 3 }
+ { 0 1 2 3 }
+
+All 16 subsets are generated, and the subsets of each size are sorted
+lexicographically.
+
+
+File: gsl-ref.info, Node: Combination References and Further Reading, Prev: Combination Examples, Up: Combinations
+
+10.8 References and Further Reading
+===================================
+
+Further information on combinations can be found in,
+
+ Donald L. Kreher, Douglas R. Stinson, `Combinatorial Algorithms:
+ Generation, Enumeration and Search', 1998, CRC Press LLC, ISBN
+ 084933988X
+
+
+
+File: gsl-ref.info, Node: Sorting, Next: BLAS Support, Prev: Combinations, Up: Top
+
+11 Sorting
+**********
+
+This chapter describes functions for sorting data, both directly and
+indirectly (using an index). All the functions use the "heapsort"
+algorithm. Heapsort is an O(N \log N) algorithm which operates
+in-place and does not require any additional storage. It also provides
+consistent performance, the running time for its worst-case (ordered
+data) being not significantly longer than the average and best cases.
+Note that the heapsort algorithm does not preserve the relative ordering
+of equal elements--it is an "unstable" sort. However the resulting
+order of equal elements will be consistent across different platforms
+when using these functions.
+
+* Menu:
+
+* Sorting objects::
+* Sorting vectors::
+* Selecting the k smallest or largest elements::
+* Computing the rank::
+* Sorting Examples::
+* Sorting References and Further Reading::
+
+
+File: gsl-ref.info, Node: Sorting objects, Next: Sorting vectors, Up: Sorting
+
+11.1 Sorting objects
+====================
+
+The following function provides a simple alternative to the standard
+library function `qsort'. It is intended for systems lacking `qsort',
+not as a replacement for it. The function `qsort' should be used
+whenever possible, as it will be faster and can provide stable ordering
+of equal elements. Documentation for `qsort' is available in the `GNU
+C Library Reference Manual'.
+
+ The functions described in this section are defined in the header
+file `gsl_heapsort.h'.
+
+ -- Function: void gsl_heapsort (void * ARRAY, size_t COUNT, size_t
+ SIZE, gsl_comparison_fn_t COMPARE)
+ This function sorts the COUNT elements of the array ARRAY, each of
+ size SIZE, into ascending order using the comparison function
+ COMPARE. The type of the comparison function is defined by,
+
+ int (*gsl_comparison_fn_t) (const void * a,
+ const void * b)
+
+ A comparison function should return a negative integer if the first
+ argument is less than the second argument, `0' if the two arguments
+ are equal and a positive integer if the first argument is greater
+ than the second argument.
+
+ For example, the following function can be used to sort doubles
+ into ascending numerical order.
+
+ int
+ compare_doubles (const double * a,
+ const double * b)
+ {
+ if (*a > *b)
+ return 1;
+ else if (*a < *b)
+ return -1;
+ else
+ return 0;
+ }
+
+ The appropriate function call to perform the sort is,
+
+ gsl_heapsort (array, count, sizeof(double),
+ compare_doubles);
+
+ Note that unlike `qsort' the heapsort algorithm cannot be made into
+ a stable sort by pointer arithmetic. The trick of comparing
+ pointers for equal elements in the comparison function does not
+ work for the heapsort algorithm. The heapsort algorithm performs
+ an internal rearrangement of the data which destroys its initial
+ ordering.
+
+ -- Function: int gsl_heapsort_index (size_t * P, const void * ARRAY,
+ size_t COUNT, size_t SIZE, gsl_comparison_fn_t COMPARE)
+ This function indirectly sorts the COUNT elements of the array
+ ARRAY, each of size SIZE, into ascending order using the
+ comparison function COMPARE. The resulting permutation is stored
+ in P, an array of length N. The elements of P give the index of
+ the array element which would have been stored in that position if
+ the array had been sorted in place. The first element of P gives
+ the index of the least element in ARRAY, and the last element of P
+ gives the index of the greatest element in ARRAY. The array
+ itself is not changed.
+
+
+File: gsl-ref.info, Node: Sorting vectors, Next: Selecting the k smallest or largest elements, Prev: Sorting objects, Up: Sorting
+
+11.2 Sorting vectors
+====================
+
+The following functions will sort the elements of an array or vector,
+either directly or indirectly. They are defined for all real and
+integer types using the normal suffix rules. For example, the `float'
+versions of the array functions are `gsl_sort_float' and
+`gsl_sort_float_index'. The corresponding vector functions are
+`gsl_sort_vector_float' and `gsl_sort_vector_float_index'. The
+prototypes are available in the header files `gsl_sort_float.h'
+`gsl_sort_vector_float.h'. The complete set of prototypes can be
+included using the header files `gsl_sort.h' and `gsl_sort_vector.h'.
+
+ There are no functions for sorting complex arrays or vectors, since
+the ordering of complex numbers is not uniquely defined. To sort a
+complex vector by magnitude compute a real vector containing the
+magnitudes of the complex elements, and sort this vector indirectly.
+The resulting index gives the appropriate ordering of the original
+complex vector.
+
+ -- Function: void gsl_sort (double * DATA, size_t STRIDE, size_t N)
+ This function sorts the N elements of the array DATA with stride
+ STRIDE into ascending numerical order.
+
+ -- Function: void gsl_sort_vector (gsl_vector * V)
+ This function sorts the elements of the vector V into ascending
+ numerical order.
+
+ -- Function: void gsl_sort_index (size_t * P, const double * DATA,
+ size_t STRIDE, size_t N)
+ This function indirectly sorts the N elements of the array DATA
+ with stride STRIDE into ascending order, storing the resulting
+ permutation in P. The array P must be allocated with a sufficient
+ length to store the N elements of the permutation. The elements
+ of P give the index of the array element which would have been
+ stored in that position if the array had been sorted in place.
+ The array DATA is not changed.
+
+ -- Function: int gsl_sort_vector_index (gsl_permutation * P, const
+ gsl_vector * V)
+ This function indirectly sorts the elements of the vector V into
+ ascending order, storing the resulting permutation in P. The
+ elements of P give the index of the vector element which would
+ have been stored in that position if the vector had been sorted in
+ place. The first element of P gives the index of the least element
+ in V, and the last element of P gives the index of the greatest
+ element in V. The vector V is not changed.
+
diff --git a/gsl-1.9/doc/gsl-ref.info-2 b/gsl-1.9/doc/gsl-ref.info-2
new file mode 100644
index 0000000..3fd15e9
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info-2
@@ -0,0 +1,7071 @@
+This is gsl-ref.info, produced by makeinfo version 4.8 from
+gsl-ref.texi.
+
+INFO-DIR-SECTION Scientific software
+START-INFO-DIR-ENTRY
+* gsl-ref: (gsl-ref). GNU Scientific Library - Reference
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+2005, 2006, 2007 The GSL Team.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Free Software
+Needs Free Documentation", the Front-Cover text being "A GNU Manual",
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled "GNU Free Documentation
+License".
+
+ (a) The Back-Cover Text is: "You have freedom to copy and modify this
+GNU Manual, like GNU software."
+
+
+File: gsl-ref.info, Node: Selecting the k smallest or largest elements, Next: Computing the rank, Prev: Sorting vectors, Up: Sorting
+
+11.3 Selecting the k smallest or largest elements
+=================================================
+
+The functions described in this section select the k smallest or
+largest elements of a data set of size N. The routines use an O(kN)
+direct insertion algorithm which is suited to subsets that are small
+compared with the total size of the dataset. For example, the routines
+are useful for selecting the 10 largest values from one million data
+points, but not for selecting the largest 100,000 values. If the
+subset is a significant part of the total dataset it may be faster to
+sort all the elements of the dataset directly with an O(N \log N)
+algorithm and obtain the smallest or largest values that way.
+
+ -- Function: int gsl_sort_smallest (double * DEST, size_t K, const
+ double * SRC, size_t STRIDE, size_t N)
+ This function copies the K smallest elements of the array SRC, of
+ size N and stride STRIDE, in ascending numerical order into the
+ array DEST. The size K of the subset must be less than or equal
+ to N. The data SRC is not modified by this operation.
+
+ -- Function: int gsl_sort_largest (double * DEST, size_t K, const
+ double * SRC, size_t STRIDE, size_t N)
+ This function copies the K largest elements of the array SRC, of
+ size N and stride STRIDE, in descending numerical order into the
+ array DEST. K must be less than or equal to N. The data SRC is not
+ modified by this operation.
+
+ -- Function: int gsl_sort_vector_smallest (double * DEST, size_t K,
+ const gsl_vector * V)
+ -- Function: int gsl_sort_vector_largest (double * DEST, size_t K,
+ const gsl_vector * V)
+ These functions copy the K smallest or largest elements of the
+ vector V into the array DEST. K must be less than or equal to the
+ length of the vector V.
+
+ The following functions find the indices of the k smallest or
+largest elements of a dataset,
+
+ -- Function: int gsl_sort_smallest_index (size_t * P, size_t K, const
+ double * SRC, size_t STRIDE, size_t N)
+ This function stores the indices of the K smallest elements of the
+ array SRC, of size N and stride STRIDE, in the array P. The
+ indices are chosen so that the corresponding data is in ascending
+ numerical order. K must be less than or equal to N. The data SRC
+ is not modified by this operation.
+
+ -- Function: int gsl_sort_largest_index (size_t * P, size_t K, const
+ double * SRC, size_t STRIDE, size_t N)
+ This function stores the indices of the K largest elements of the
+ array SRC, of size N and stride STRIDE, in the array P. The
+ indices are chosen so that the corresponding data is in descending
+ numerical order. K must be less than or equal to N. The data SRC
+ is not modified by this operation.
+
+ -- Function: int gsl_sort_vector_smallest_index (size_t * P, size_t K,
+ const gsl_vector * V)
+ -- Function: int gsl_sort_vector_largest_index (size_t * P, size_t K,
+ const gsl_vector * V)
+ These functions store the indices of the K smallest or largest
+ elements of the vector V in the array P. K must be less than or
+ equal to the length of the vector V.
+
+
+File: gsl-ref.info, Node: Computing the rank, Next: Sorting Examples, Prev: Selecting the k smallest or largest elements, Up: Sorting
+
+11.4 Computing the rank
+=======================
+
+The "rank" of an element is its order in the sorted data. The rank is
+the inverse of the index permutation, P. It can be computed using the
+following algorithm,
+
+ for (i = 0; i < p->size; i++)
+ {
+ size_t pi = p->data[i];
+ rank->data[pi] = i;
+ }
+
+This can be computed directly from the function
+`gsl_permutation_inverse(rank,p)'.
+
+ The following function will print the rank of each element of the
+vector V,
+
+ void
+ print_rank (gsl_vector * v)
+ {
+ size_t i;
+ size_t n = v->size;
+ gsl_permutation * perm = gsl_permutation_alloc(n);
+ gsl_permutation * rank = gsl_permutation_alloc(n);
+
+ gsl_sort_vector_index (perm, v);
+ gsl_permutation_inverse (rank, perm);
+
+ for (i = 0; i < n; i++)
+ {
+ double vi = gsl_vector_get(v, i);
+ printf ("element = %d, value = %g, rank = %d\n",
+ i, vi, rank->data[i]);
+ }
+
+ gsl_permutation_free (perm);
+ gsl_permutation_free (rank);
+ }
+
+
+File: gsl-ref.info, Node: Sorting Examples, Next: Sorting References and Further Reading, Prev: Computing the rank, Up: Sorting
+
+11.5 Examples
+=============
+
+The following example shows how to use the permutation P to print the
+elements of the vector V in ascending order,
+
+ gsl_sort_vector_index (p, v);
+
+ for (i = 0; i < v->size; i++)
+ {
+ double vpi = gsl_vector_get (v, p->data[i]);
+ printf ("order = %d, value = %g\n", i, vpi);
+ }
+
+The next example uses the function `gsl_sort_smallest' to select the 5
+smallest numbers from 100000 uniform random variates stored in an array,
+
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_sort_double.h>
+
+ int
+ main (void)
+ {
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ size_t i, k = 5, N = 100000;
+
+ double * x = malloc (N * sizeof(double));
+ double * small = malloc (k * sizeof(double));
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (i = 0; i < N; i++)
+ {
+ x[i] = gsl_rng_uniform(r);
+ }
+
+ gsl_sort_smallest (small, k, x, 1, N);
+
+ printf ("%d smallest values from %d\n", k, N);
+
+ for (i = 0; i < k; i++)
+ {
+ printf ("%d: %.18f\n", i, small[i]);
+ }
+
+ free (x);
+ free (small);
+ gsl_rng_free (r);
+ return 0;
+ }
+ The output lists the 5 smallest values, in ascending order,
+
+ $ ./a.out
+ 5 smallest values from 100000
+ 0: 0.000003489200025797
+ 1: 0.000008199829608202
+ 2: 0.000008953968062997
+ 3: 0.000010712770745158
+ 4: 0.000033531803637743
+
+
+File: gsl-ref.info, Node: Sorting References and Further Reading, Prev: Sorting Examples, Up: Sorting
+
+11.6 References and Further Reading
+===================================
+
+The subject of sorting is covered extensively in Knuth's `Sorting and
+Searching',
+
+ Donald E. Knuth, `The Art of Computer Programming: Sorting and
+ Searching' (Vol 3, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850.
+
+The Heapsort algorithm is described in the following book,
+
+ Robert Sedgewick, `Algorithms in C', Addison-Wesley, ISBN
+ 0201514257.
+
+
+File: gsl-ref.info, Node: BLAS Support, Next: Linear Algebra, Prev: Sorting, Up: Top
+
+12 BLAS Support
+***************
+
+The Basic Linear Algebra Subprograms (BLAS) define a set of fundamental
+operations on vectors and matrices which can be used to create optimized
+higher-level linear algebra functionality.
+
+ The library provides a low-level layer which corresponds directly to
+the C-language BLAS standard, referred to here as "CBLAS", and a
+higher-level interface for operations on GSL vectors and matrices.
+Users who are interested in simple operations on GSL vector and matrix
+objects should use the high-level layer, which is declared in the file
+`gsl_blas.h'. This should satisfy the needs of most users. Note that
+GSL matrices are implemented using dense-storage so the interface only
+includes the corresponding dense-storage BLAS functions. The full BLAS
+functionality for band-format and packed-format matrices is available
+through the low-level CBLAS interface.
+
+ The interface for the `gsl_cblas' layer is specified in the file
+`gsl_cblas.h'. This interface corresponds to the BLAS Technical
+Forum's draft standard for the C interface to legacy BLAS
+implementations. Users who have access to other conforming CBLAS
+implementations can use these in place of the version provided by the
+library. Note that users who have only a Fortran BLAS library can use
+a CBLAS conformant wrapper to convert it into a CBLAS library. A
+reference CBLAS wrapper for legacy Fortran implementations exists as
+part of the draft CBLAS standard and can be obtained from Netlib. The
+complete set of CBLAS functions is listed in an appendix (*note GSL
+CBLAS Library::).
+
+ There are three levels of BLAS operations,
+
+Level 1
+ Vector operations, e.g. y = \alpha x + y
+
+Level 2
+ Matrix-vector operations, e.g. y = \alpha A x + \beta y
+
+Level 3
+ Matrix-matrix operations, e.g. C = \alpha A B + C
+
+Each routine has a name which specifies the operation, the type of
+matrices involved and their precisions. Some of the most common
+operations and their names are given below,
+
+DOT
+ scalar product, x^T y
+
+AXPY
+ vector sum, \alpha x + y
+
+MV
+ matrix-vector product, A x
+
+SV
+ matrix-vector solve, inv(A) x
+
+MM
+ matrix-matrix product, A B
+
+SM
+ matrix-matrix solve, inv(A) B
+
+The types of matrices are,
+
+GE
+ general
+
+GB
+ general band
+
+SY
+ symmetric
+
+SB
+ symmetric band
+
+SP
+ symmetric packed
+
+HE
+ hermitian
+
+HB
+ hermitian band
+
+HP
+ hermitian packed
+
+TR
+ triangular
+
+TB
+ triangular band
+
+TP
+ triangular packed
+
+Each operation is defined for four precisions,
+
+S
+ single real
+
+D
+ double real
+
+C
+ single complex
+
+Z
+ double complex
+
+Thus, for example, the name SGEMM stands for "single-precision general
+matrix-matrix multiply" and ZGEMM stands for "double-precision complex
+matrix-matrix multiply".
+
+* Menu:
+
+* GSL BLAS Interface::
+* BLAS Examples::
+* BLAS References and Further Reading::
+
+
+File: gsl-ref.info, Node: GSL BLAS Interface, Next: BLAS Examples, Up: BLAS Support
+
+12.1 GSL BLAS Interface
+=======================
+
+GSL provides dense vector and matrix objects, based on the relevant
+built-in types. The library provides an interface to the BLAS
+operations which apply to these objects. The interface to this
+functionality is given in the file `gsl_blas.h'.
+
+* Menu:
+
+* Level 1 GSL BLAS Interface::
+* Level 2 GSL BLAS Interface::
+* Level 3 GSL BLAS Interface::
+
+
+File: gsl-ref.info, Node: Level 1 GSL BLAS Interface, Next: Level 2 GSL BLAS Interface, Up: GSL BLAS Interface
+
+12.1.1 Level 1
+--------------
+
+ -- Function: int gsl_blas_sdsdot (float ALPHA, const gsl_vector_float
+ * X, const gsl_vector_float * Y, float * RESULT)
+ This function computes the sum \alpha + x^T y for the vectors X
+ and Y, returning the result in RESULT.
+
+ -- Function: int gsl_blas_sdot (const gsl_vector_float * X, const
+ gsl_vector_float * Y, float * RESULT)
+ -- Function: int gsl_blas_dsdot (const gsl_vector_float * X, const
+ gsl_vector_float * Y, double * RESULT)
+ -- Function: int gsl_blas_ddot (const gsl_vector * X, const gsl_vector
+ * Y, double * RESULT)
+ These functions compute the scalar product x^T y for the vectors X
+ and Y, returning the result in RESULT.
+
+ -- Function: int gsl_blas_cdotu (const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y, gsl_complex_float * DOTU)
+ -- Function: int gsl_blas_zdotu (const gsl_vector_complex * X, const
+ gsl_vector_complex * Y, gsl_complex * DOTU)
+ These functions compute the complex scalar product x^T y for the
+ vectors X and Y, returning the result in RESULT
+
+ -- Function: int gsl_blas_cdotc (const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y, gsl_complex_float * DOTC)
+ -- Function: int gsl_blas_zdotc (const gsl_vector_complex * X, const
+ gsl_vector_complex * Y, gsl_complex * DOTC)
+ These functions compute the complex conjugate scalar product x^H y
+ for the vectors X and Y, returning the result in RESULT
+
+ -- Function: float gsl_blas_snrm2 (const gsl_vector_float * X)
+ -- Function: double gsl_blas_dnrm2 (const gsl_vector * X)
+ These functions compute the Euclidean norm ||x||_2 = \sqrt {\sum
+ x_i^2} of the vector X.
+
+ -- Function: float gsl_blas_scnrm2 (const gsl_vector_complex_float * X)
+ -- Function: double gsl_blas_dznrm2 (const gsl_vector_complex * X)
+ These functions compute the Euclidean norm of the complex vector X,
+
+ ||x||_2 = \sqrt {\sum (\Re(x_i)^2 + \Im(x_i)^2)}.
+
+ -- Function: float gsl_blas_sasum (const gsl_vector_float * X)
+ -- Function: double gsl_blas_dasum (const gsl_vector * X)
+ These functions compute the absolute sum \sum |x_i| of the
+ elements of the vector X.
+
+ -- Function: float gsl_blas_scasum (const gsl_vector_complex_float * X)
+ -- Function: double gsl_blas_dzasum (const gsl_vector_complex * X)
+ These functions compute the sum of the magnitudes of the real and
+ imaginary parts of the complex vector X, \sum |\Re(x_i)| +
+ |\Im(x_i)|.
+
+ -- Function: CBLAS_INDEX_t gsl_blas_isamax (const gsl_vector_float * X)
+ -- Function: CBLAS_INDEX_t gsl_blas_idamax (const gsl_vector * X)
+ -- Function: CBLAS_INDEX_t gsl_blas_icamax (const
+ gsl_vector_complex_float * X)
+ -- Function: CBLAS_INDEX_t gsl_blas_izamax (const gsl_vector_complex *
+ X)
+ These functions return the index of the largest element of the
+ vector X. The largest element is determined by its absolute
+ magnitude for real vectors and by the sum of the magnitudes of the
+ real and imaginary parts |\Re(x_i)| + |\Im(x_i)| for complex
+ vectors. If the largest value occurs several times then the index
+ of the first occurrence is returned.
+
+ -- Function: int gsl_blas_sswap (gsl_vector_float * X,
+ gsl_vector_float * Y)
+ -- Function: int gsl_blas_dswap (gsl_vector * X, gsl_vector * Y)
+ -- Function: int gsl_blas_cswap (gsl_vector_complex_float * X,
+ gsl_vector_complex_float * Y)
+ -- Function: int gsl_blas_zswap (gsl_vector_complex * X,
+ gsl_vector_complex * Y)
+ These functions exchange the elements of the vectors X and Y.
+
+ -- Function: int gsl_blas_scopy (const gsl_vector_float * X,
+ gsl_vector_float * Y)
+ -- Function: int gsl_blas_dcopy (const gsl_vector * X, gsl_vector * Y)
+ -- Function: int gsl_blas_ccopy (const gsl_vector_complex_float * X,
+ gsl_vector_complex_float * Y)
+ -- Function: int gsl_blas_zcopy (const gsl_vector_complex * X,
+ gsl_vector_complex * Y)
+ These functions copy the elements of the vector X into the vector
+ Y.
+
+ -- Function: int gsl_blas_saxpy (float ALPHA, const gsl_vector_float *
+ X, gsl_vector_float * Y)
+ -- Function: int gsl_blas_daxpy (double ALPHA, const gsl_vector * X,
+ gsl_vector * Y)
+ -- Function: int gsl_blas_caxpy (const gsl_complex_float ALPHA, const
+ gsl_vector_complex_float * X, gsl_vector_complex_float * Y)
+ -- Function: int gsl_blas_zaxpy (const gsl_complex ALPHA, const
+ gsl_vector_complex * X, gsl_vector_complex * Y)
+ These functions compute the sum y = \alpha x + y for the vectors X
+ and Y.
+
+ -- Function: void gsl_blas_sscal (float ALPHA, gsl_vector_float * X)
+ -- Function: void gsl_blas_dscal (double ALPHA, gsl_vector * X)
+ -- Function: void gsl_blas_cscal (const gsl_complex_float ALPHA,
+ gsl_vector_complex_float * X)
+ -- Function: void gsl_blas_zscal (const gsl_complex ALPHA,
+ gsl_vector_complex * X)
+ -- Function: void gsl_blas_csscal (float ALPHA,
+ gsl_vector_complex_float * X)
+ -- Function: void gsl_blas_zdscal (double ALPHA, gsl_vector_complex *
+ X)
+ These functions rescale the vector X by the multiplicative factor
+ ALPHA.
+
+ -- Function: int gsl_blas_srotg (float A[], float B[], float C[],
+ float S[])
+ -- Function: int gsl_blas_drotg (double A[], double B[], double C[],
+ double S[])
+ These functions compute a Givens rotation (c,s) which zeroes the
+ vector (a,b),
+
+ [ c s ] [ a ] = [ r ]
+ [ -s c ] [ b ] [ 0 ]
+
+ The variables A and B are overwritten by the routine.
+
+ -- Function: int gsl_blas_srot (gsl_vector_float * X, gsl_vector_float
+ * Y, float C, float S)
+ -- Function: int gsl_blas_drot (gsl_vector * X, gsl_vector * Y, const
+ double C, const double S)
+ These functions apply a Givens rotation (x', y') = (c x + s y, -s
+ x + c y) to the vectors X, Y.
+
+ -- Function: int gsl_blas_srotmg (float D1[], float D2[], float B1[],
+ float B2, float P[])
+ -- Function: int gsl_blas_drotmg (double D1[], double D2[], double
+ B1[], double B2, double P[])
+ These functions compute a modified Givens transformation. The
+ modified Givens transformation is defined in the original Level-1
+ BLAS specification, given in the references.
+
+ -- Function: int gsl_blas_srotm (gsl_vector_float * X,
+ gsl_vector_float * Y, const float P[])
+ -- Function: int gsl_blas_drotm (gsl_vector * X, gsl_vector * Y, const
+ double P[])
+ These functions apply a modified Givens transformation.
+
+
+File: gsl-ref.info, Node: Level 2 GSL BLAS Interface, Next: Level 3 GSL BLAS Interface, Prev: Level 1 GSL BLAS Interface, Up: GSL BLAS Interface
+
+12.1.2 Level 2
+--------------
+
+ -- Function: int gsl_blas_sgemv (CBLAS_TRANSPOSE_t TRANSA, float
+ ALPHA, const gsl_matrix_float * A, const gsl_vector_float *
+ X, float BETA, gsl_vector_float * Y)
+ -- Function: int gsl_blas_dgemv (CBLAS_TRANSPOSE_t TRANSA, double
+ ALPHA, const gsl_matrix * A, const gsl_vector * X, double
+ BETA, gsl_vector * Y)
+ -- Function: int gsl_blas_cgemv (CBLAS_TRANSPOSE_t TRANSA, const
+ gsl_complex_float ALPHA, const gsl_matrix_complex_float * A,
+ const gsl_vector_complex_float * X, const gsl_complex_float
+ BETA, gsl_vector_complex_float * Y)
+ -- Function: int gsl_blas_zgemv (CBLAS_TRANSPOSE_t TRANSA, const
+ gsl_complex ALPHA, const gsl_matrix_complex * A, const
+ gsl_vector_complex * X, const gsl_complex BETA,
+ gsl_vector_complex * Y)
+ These functions compute the matrix-vector product and sum y =
+ \alpha op(A) x + \beta y, where op(A) = A, A^T, A^H for TRANSA =
+ `CblasNoTrans', `CblasTrans', `CblasConjTrans'.
+
+ -- Function: int gsl_blas_strmv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix_float * A,
+ gsl_vector_float * X)
+ -- Function: int gsl_blas_dtrmv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix * A, gsl_vector *
+ X)
+ -- Function: int gsl_blas_ctrmv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix_complex_float *
+ A, gsl_vector_complex_float * X)
+ -- Function: int gsl_blas_ztrmv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix_complex * A,
+ gsl_vector_complex * X)
+ These functions compute the matrix-vector product x = op(A) x for
+ the triangular matrix A, where op(A) = A, A^T, A^H for TRANSA =
+ `CblasNoTrans', `CblasTrans', `CblasConjTrans'. When UPLO is
+ `CblasUpper' then the upper triangle of A is used, and when UPLO
+ is `CblasLower' then the lower triangle of A is used. If DIAG is
+ `CblasNonUnit' then the diagonal of the matrix is used, but if
+ DIAG is `CblasUnit' then the diagonal elements of the matrix A are
+ taken as unity and are not referenced.
+
+ -- Function: int gsl_blas_strsv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix_float * A,
+ gsl_vector_float * X)
+ -- Function: int gsl_blas_dtrsv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix * A, gsl_vector *
+ X)
+ -- Function: int gsl_blas_ctrsv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix_complex_float *
+ A, gsl_vector_complex_float * X)
+ -- Function: int gsl_blas_ztrsv (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANSA, CBLAS_DIAG_t DIAG, const gsl_matrix_complex * A,
+ gsl_vector_complex * X)
+ These functions compute inv(op(A)) x for X, where op(A) = A, A^T,
+ A^H for TRANSA = `CblasNoTrans', `CblasTrans', `CblasConjTrans'.
+ When UPLO is `CblasUpper' then the upper triangle of A is used,
+ and when UPLO is `CblasLower' then the lower triangle of A is
+ used. If DIAG is `CblasNonUnit' then the diagonal of the matrix
+ is used, but if DIAG is `CblasUnit' then the diagonal elements of
+ the matrix A are taken as unity and are not referenced.
+
+ -- Function: int gsl_blas_ssymv (CBLAS_UPLO_t UPLO, float ALPHA, const
+ gsl_matrix_float * A, const gsl_vector_float * X, float BETA,
+ gsl_vector_float * Y)
+ -- Function: int gsl_blas_dsymv (CBLAS_UPLO_t UPLO, double ALPHA,
+ const gsl_matrix * A, const gsl_vector * X, double BETA,
+ gsl_vector * Y)
+ These functions compute the matrix-vector product and sum y =
+ \alpha A x + \beta y for the symmetric matrix A. Since the matrix
+ A is symmetric only its upper half or lower half need to be
+ stored. When UPLO is `CblasUpper' then the upper triangle and
+ diagonal of A are used, and when UPLO is `CblasLower' then the
+ lower triangle and diagonal of A are used.
+
+ -- Function: int gsl_blas_chemv (CBLAS_UPLO_t UPLO, const
+ gsl_complex_float ALPHA, const gsl_matrix_complex_float * A,
+ const gsl_vector_complex_float * X, const gsl_complex_float
+ BETA, gsl_vector_complex_float * Y)
+ -- Function: int gsl_blas_zhemv (CBLAS_UPLO_t UPLO, const gsl_complex
+ ALPHA, const gsl_matrix_complex * A, const gsl_vector_complex
+ * X, const gsl_complex BETA, gsl_vector_complex * Y)
+ These functions compute the matrix-vector product and sum y =
+ \alpha A x + \beta y for the hermitian matrix A. Since the matrix
+ A is hermitian only its upper half or lower half need to be
+ stored. When UPLO is `CblasUpper' then the upper triangle and
+ diagonal of A are used, and when UPLO is `CblasLower' then the
+ lower triangle and diagonal of A are used. The imaginary elements
+ of the diagonal are automatically assumed to be zero and are not
+ referenced.
+
+ -- Function: int gsl_blas_sger (float ALPHA, const gsl_vector_float *
+ X, const gsl_vector_float * Y, gsl_matrix_float * A)
+ -- Function: int gsl_blas_dger (double ALPHA, const gsl_vector * X,
+ const gsl_vector * Y, gsl_matrix * A)
+ -- Function: int gsl_blas_cgeru (const gsl_complex_float ALPHA, const
+ gsl_vector_complex_float * X, const gsl_vector_complex_float
+ * Y, gsl_matrix_complex_float * A)
+ -- Function: int gsl_blas_zgeru (const gsl_complex ALPHA, const
+ gsl_vector_complex * X, const gsl_vector_complex * Y,
+ gsl_matrix_complex * A)
+ These functions compute the rank-1 update A = \alpha x y^T + A of
+ the matrix A.
+
+ -- Function: int gsl_blas_cgerc (const gsl_complex_float ALPHA, const
+ gsl_vector_complex_float * X, const gsl_vector_complex_float
+ * Y, gsl_matrix_complex_float * A)
+ -- Function: int gsl_blas_zgerc (const gsl_complex ALPHA, const
+ gsl_vector_complex * X, const gsl_vector_complex * Y,
+ gsl_matrix_complex * A)
+ These functions compute the conjugate rank-1 update A = \alpha x
+ y^H + A of the matrix A.
+
+ -- Function: int gsl_blas_ssyr (CBLAS_UPLO_t UPLO, float ALPHA, const
+ gsl_vector_float * X, gsl_matrix_float * A)
+ -- Function: int gsl_blas_dsyr (CBLAS_UPLO_t UPLO, double ALPHA, const
+ gsl_vector * X, gsl_matrix * A)
+ These functions compute the symmetric rank-1 update A = \alpha x
+ x^T + A of the symmetric matrix A. Since the matrix A is
+ symmetric only its upper half or lower half need to be stored.
+ When UPLO is `CblasUpper' then the upper triangle and diagonal of
+ A are used, and when UPLO is `CblasLower' then the lower triangle
+ and diagonal of A are used.
+
+ -- Function: int gsl_blas_cher (CBLAS_UPLO_t UPLO, float ALPHA, const
+ gsl_vector_complex_float * X, gsl_matrix_complex_float * A)
+ -- Function: int gsl_blas_zher (CBLAS_UPLO_t UPLO, double ALPHA, const
+ gsl_vector_complex * X, gsl_matrix_complex * A)
+ These functions compute the hermitian rank-1 update A = \alpha x
+ x^H + A of the hermitian matrix A. Since the matrix A is
+ hermitian only its upper half or lower half need to be stored.
+ When UPLO is `CblasUpper' then the upper triangle and diagonal of
+ A are used, and when UPLO is `CblasLower' then the lower triangle
+ and diagonal of A are used. The imaginary elements of the
+ diagonal are automatically set to zero.
+
+ -- Function: int gsl_blas_ssyr2 (CBLAS_UPLO_t UPLO, float ALPHA, const
+ gsl_vector_float * X, const gsl_vector_float * Y,
+ gsl_matrix_float * A)
+ -- Function: int gsl_blas_dsyr2 (CBLAS_UPLO_t UPLO, double ALPHA,
+ const gsl_vector * X, const gsl_vector * Y, gsl_matrix * A)
+ These functions compute the symmetric rank-2 update A = \alpha x
+ y^T + \alpha y x^T + A of the symmetric matrix A. Since the
+ matrix A is symmetric only its upper half or lower half need to be
+ stored. When UPLO is `CblasUpper' then the upper triangle and
+ diagonal of A are used, and when UPLO is `CblasLower' then the
+ lower triangle and diagonal of A are used.
+
+ -- Function: int gsl_blas_cher2 (CBLAS_UPLO_t UPLO, const
+ gsl_complex_float ALPHA, const gsl_vector_complex_float * X,
+ const gsl_vector_complex_float * Y, gsl_matrix_complex_float
+ * A)
+ -- Function: int gsl_blas_zher2 (CBLAS_UPLO_t UPLO, const gsl_complex
+ ALPHA, const gsl_vector_complex * X, const gsl_vector_complex
+ * Y, gsl_matrix_complex * A)
+ These functions compute the hermitian rank-2 update A = \alpha x
+ y^H + \alpha^* y x^H A of the hermitian matrix A. Since the
+ matrix A is hermitian only its upper half or lower half need to be
+ stored. When UPLO is `CblasUpper' then the upper triangle and
+ diagonal of A are used, and when UPLO is `CblasLower' then the
+ lower triangle and diagonal of A are used. The imaginary elements
+ of the diagonal are automatically set to zero.
+
+
+File: gsl-ref.info, Node: Level 3 GSL BLAS Interface, Prev: Level 2 GSL BLAS Interface, Up: GSL BLAS Interface
+
+12.1.3 Level 3
+--------------
+
+ -- Function: int gsl_blas_sgemm (CBLAS_TRANSPOSE_t TRANSA,
+ CBLAS_TRANSPOSE_t TRANSB, float ALPHA, const gsl_matrix_float
+ * A, const gsl_matrix_float * B, float BETA, gsl_matrix_float
+ * C)
+ -- Function: int gsl_blas_dgemm (CBLAS_TRANSPOSE_t TRANSA,
+ CBLAS_TRANSPOSE_t TRANSB, double ALPHA, const gsl_matrix * A,
+ const gsl_matrix * B, double BETA, gsl_matrix * C)
+ -- Function: int gsl_blas_cgemm (CBLAS_TRANSPOSE_t TRANSA,
+ CBLAS_TRANSPOSE_t TRANSB, const gsl_complex_float ALPHA,
+ const gsl_matrix_complex_float * A, const
+ gsl_matrix_complex_float * B, const gsl_complex_float BETA,
+ gsl_matrix_complex_float * C)
+ -- Function: int gsl_blas_zgemm (CBLAS_TRANSPOSE_t TRANSA,
+ CBLAS_TRANSPOSE_t TRANSB, const gsl_complex ALPHA, const
+ gsl_matrix_complex * A, const gsl_matrix_complex * B, const
+ gsl_complex BETA, gsl_matrix_complex * C)
+ These functions compute the matrix-matrix product and sum C =
+ \alpha op(A) op(B) + \beta C where op(A) = A, A^T, A^H for TRANSA
+ = `CblasNoTrans', `CblasTrans', `CblasConjTrans' and similarly for
+ the parameter TRANSB.
+
+ -- Function: int gsl_blas_ssymm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ float ALPHA, const gsl_matrix_float * A, const
+ gsl_matrix_float * B, float BETA, gsl_matrix_float * C)
+ -- Function: int gsl_blas_dsymm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ double ALPHA, const gsl_matrix * A, const gsl_matrix * B,
+ double BETA, gsl_matrix * C)
+ -- Function: int gsl_blas_csymm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ const gsl_complex_float ALPHA, const gsl_matrix_complex_float
+ * A, const gsl_matrix_complex_float * B, const
+ gsl_complex_float BETA, gsl_matrix_complex_float * C)
+ -- Function: int gsl_blas_zsymm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ const gsl_complex ALPHA, const gsl_matrix_complex * A, const
+ gsl_matrix_complex * B, const gsl_complex BETA,
+ gsl_matrix_complex * C)
+ These functions compute the matrix-matrix product and sum C =
+ \alpha A B + \beta C for SIDE is `CblasLeft' and C = \alpha B A +
+ \beta C for SIDE is `CblasRight', where the matrix A is symmetric.
+ When UPLO is `CblasUpper' then the upper triangle and diagonal of
+ A are used, and when UPLO is `CblasLower' then the lower triangle
+ and diagonal of A are used.
+
+ -- Function: int gsl_blas_chemm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ const gsl_complex_float ALPHA, const gsl_matrix_complex_float
+ * A, const gsl_matrix_complex_float * B, const
+ gsl_complex_float BETA, gsl_matrix_complex_float * C)
+ -- Function: int gsl_blas_zhemm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ const gsl_complex ALPHA, const gsl_matrix_complex * A, const
+ gsl_matrix_complex * B, const gsl_complex BETA,
+ gsl_matrix_complex * C)
+ These functions compute the matrix-matrix product and sum C =
+ \alpha A B + \beta C for SIDE is `CblasLeft' and C = \alpha B A +
+ \beta C for SIDE is `CblasRight', where the matrix A is hermitian.
+ When UPLO is `CblasUpper' then the upper triangle and diagonal of
+ A are used, and when UPLO is `CblasLower' then the lower triangle
+ and diagonal of A are used. The imaginary elements of the
+ diagonal are automatically set to zero.
+
+ -- Function: int gsl_blas_strmm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, float ALPHA,
+ const gsl_matrix_float * A, gsl_matrix_float * B)
+ -- Function: int gsl_blas_dtrmm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, double ALPHA,
+ const gsl_matrix * A, gsl_matrix * B)
+ -- Function: int gsl_blas_ctrmm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, const
+ gsl_complex_float ALPHA, const gsl_matrix_complex_float * A,
+ gsl_matrix_complex_float * B)
+ -- Function: int gsl_blas_ztrmm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, const
+ gsl_complex ALPHA, const gsl_matrix_complex * A,
+ gsl_matrix_complex * B)
+ These functions compute the matrix-matrix product B = \alpha op(A)
+ B for SIDE is `CblasLeft' and B = \alpha B op(A) for SIDE is
+ `CblasRight'. The matrix A is triangular and op(A) = A, A^T, A^H
+ for TRANSA = `CblasNoTrans', `CblasTrans', `CblasConjTrans'. When
+ UPLO is `CblasUpper' then the upper triangle of A is used, and
+ when UPLO is `CblasLower' then the lower triangle of A is used.
+ If DIAG is `CblasNonUnit' then the diagonal of A is used, but if
+ DIAG is `CblasUnit' then the diagonal elements of the matrix A are
+ taken as unity and are not referenced.
+
+ -- Function: int gsl_blas_strsm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, float ALPHA,
+ const gsl_matrix_float * A, gsl_matrix_float * B)
+ -- Function: int gsl_blas_dtrsm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, double ALPHA,
+ const gsl_matrix * A, gsl_matrix * B)
+ -- Function: int gsl_blas_ctrsm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, const
+ gsl_complex_float ALPHA, const gsl_matrix_complex_float * A,
+ gsl_matrix_complex_float * B)
+ -- Function: int gsl_blas_ztrsm (CBLAS_SIDE_t SIDE, CBLAS_UPLO_t UPLO,
+ CBLAS_TRANSPOSE_t TRANSA, CBLAS_DIAG_t DIAG, const
+ gsl_complex ALPHA, const gsl_matrix_complex * A,
+ gsl_matrix_complex * B)
+ These functions compute the inverse-matrix matrix product B =
+ \alpha op(inv(A))B for SIDE is `CblasLeft' and B = \alpha B
+ op(inv(A)) for SIDE is `CblasRight'. The matrix A is triangular
+ and op(A) = A, A^T, A^H for TRANSA = `CblasNoTrans', `CblasTrans',
+ `CblasConjTrans'. When UPLO is `CblasUpper' then the upper
+ triangle of A is used, and when UPLO is `CblasLower' then the
+ lower triangle of A is used. If DIAG is `CblasNonUnit' then the
+ diagonal of A is used, but if DIAG is `CblasUnit' then the
+ diagonal elements of the matrix A are taken as unity and are not
+ referenced.
+
+ -- Function: int gsl_blas_ssyrk (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, float ALPHA, const gsl_matrix_float * A, float BETA,
+ gsl_matrix_float * C)
+ -- Function: int gsl_blas_dsyrk (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, double ALPHA, const gsl_matrix * A, double BETA,
+ gsl_matrix * C)
+ -- Function: int gsl_blas_csyrk (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, const gsl_complex_float ALPHA, const
+ gsl_matrix_complex_float * A, const gsl_complex_float BETA,
+ gsl_matrix_complex_float * C)
+ -- Function: int gsl_blas_zsyrk (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, const gsl_complex ALPHA, const gsl_matrix_complex * A,
+ const gsl_complex BETA, gsl_matrix_complex * C)
+ These functions compute a rank-k update of the symmetric matrix C,
+ C = \alpha A A^T + \beta C when TRANS is `CblasNoTrans' and C =
+ \alpha A^T A + \beta C when TRANS is `CblasTrans'. Since the
+ matrix C is symmetric only its upper half or lower half need to be
+ stored. When UPLO is `CblasUpper' then the upper triangle and
+ diagonal of C are used, and when UPLO is `CblasLower' then the
+ lower triangle and diagonal of C are used.
+
+ -- Function: int gsl_blas_cherk (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, float ALPHA, const gsl_matrix_complex_float * A, float
+ BETA, gsl_matrix_complex_float * C)
+ -- Function: int gsl_blas_zherk (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, double ALPHA, const gsl_matrix_complex * A, double
+ BETA, gsl_matrix_complex * C)
+ These functions compute a rank-k update of the hermitian matrix C,
+ C = \alpha A A^H + \beta C when TRANS is `CblasNoTrans' and C =
+ \alpha A^H A + \beta C when TRANS is `CblasTrans'. Since the
+ matrix C is hermitian only its upper half or lower half need to be
+ stored. When UPLO is `CblasUpper' then the upper triangle and
+ diagonal of C are used, and when UPLO is `CblasLower' then the
+ lower triangle and diagonal of C are used. The imaginary elements
+ of the diagonal are automatically set to zero.
+
+ -- Function: int gsl_blas_ssyr2k (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, float ALPHA, const gsl_matrix_float * A, const
+ gsl_matrix_float * B, float BETA, gsl_matrix_float * C)
+ -- Function: int gsl_blas_dsyr2k (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, double ALPHA, const gsl_matrix * A, const gsl_matrix *
+ B, double BETA, gsl_matrix * C)
+ -- Function: int gsl_blas_csyr2k (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, const gsl_complex_float ALPHA, const
+ gsl_matrix_complex_float * A, const gsl_matrix_complex_float
+ * B, const gsl_complex_float BETA, gsl_matrix_complex_float *
+ C)
+ -- Function: int gsl_blas_zsyr2k (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, const gsl_complex ALPHA, const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B, const gsl_complex BETA,
+ gsl_matrix_complex * C)
+ These functions compute a rank-2k update of the symmetric matrix C,
+ C = \alpha A B^T + \alpha B A^T + \beta C when TRANS is
+ `CblasNoTrans' and C = \alpha A^T B + \alpha B^T A + \beta C when
+ TRANS is `CblasTrans'. Since the matrix C is symmetric only its
+ upper half or lower half need to be stored. When UPLO is
+ `CblasUpper' then the upper triangle and diagonal of C are used,
+ and when UPLO is `CblasLower' then the lower triangle and diagonal
+ of C are used.
+
+ -- Function: int gsl_blas_cher2k (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, const gsl_complex_float ALPHA, const
+ gsl_matrix_complex_float * A, const gsl_matrix_complex_float
+ * B, float BETA, gsl_matrix_complex_float * C)
+ -- Function: int gsl_blas_zher2k (CBLAS_UPLO_t UPLO, CBLAS_TRANSPOSE_t
+ TRANS, const gsl_complex ALPHA, const gsl_matrix_complex * A,
+ const gsl_matrix_complex * B, double BETA, gsl_matrix_complex
+ * C)
+ These functions compute a rank-2k update of the hermitian matrix C,
+ C = \alpha A B^H + \alpha^* B A^H + \beta C when TRANS is
+ `CblasNoTrans' and C = \alpha A^H B + \alpha^* B^H A + \beta C when
+ TRANS is `CblasConjTrans'. Since the matrix C is hermitian only
+ its upper half or lower half need to be stored. When UPLO is
+ `CblasUpper' then the upper triangle and diagonal of C are used,
+ and when UPLO is `CblasLower' then the lower triangle and diagonal
+ of C are used. The imaginary elements of the diagonal are
+ automatically set to zero.
+
+
+File: gsl-ref.info, Node: BLAS Examples, Next: BLAS References and Further Reading, Prev: GSL BLAS Interface, Up: BLAS Support
+
+12.2 Examples
+=============
+
+The following program computes the product of two matrices using the
+Level-3 BLAS function DGEMM,
+
+ [ 0.11 0.12 0.13 ] [ 1011 1012 ] [ 367.76 368.12 ]
+ [ 0.21 0.22 0.23 ] [ 1021 1022 ] = [ 674.06 674.72 ]
+ [ 1031 1032 ]
+
+The matrices are stored in row major order, according to the C
+convention for arrays.
+
+ #include <stdio.h>
+ #include <gsl/gsl_blas.h>
+
+ int
+ main (void)
+ {
+ double a[] = { 0.11, 0.12, 0.13,
+ 0.21, 0.22, 0.23 };
+
+ double b[] = { 1011, 1012,
+ 1021, 1022,
+ 1031, 1032 };
+
+ double c[] = { 0.00, 0.00,
+ 0.00, 0.00 };
+
+ gsl_matrix_view A = gsl_matrix_view_array(a, 2, 3);
+ gsl_matrix_view B = gsl_matrix_view_array(b, 3, 2);
+ gsl_matrix_view C = gsl_matrix_view_array(c, 2, 2);
+
+ /* Compute C = A B */
+
+ gsl_blas_dgemm (CblasNoTrans, CblasNoTrans,
+ 1.0, &A.matrix, &B.matrix,
+ 0.0, &C.matrix);
+
+ printf ("[ %g, %g\n", c[0], c[1]);
+ printf (" %g, %g ]\n", c[2], c[3]);
+
+ return 0;
+ }
+
+Here is the output from the program,
+
+ $ ./a.out
+ [ 367.76, 368.12
+ 674.06, 674.72 ]
+
+
+File: gsl-ref.info, Node: BLAS References and Further Reading, Prev: BLAS Examples, Up: BLAS Support
+
+12.3 References and Further Reading
+===================================
+
+Information on the BLAS standards, including both the legacy and draft
+interface standards, is available online from the BLAS Homepage and
+BLAS Technical Forum web-site.
+
+ `BLAS Homepage'
+ `http://www.netlib.org/blas/'
+
+ `BLAS Technical Forum'
+ `http://www.netlib.org/cgi-bin/checkout/blast/blast.pl'
+
+The following papers contain the specifications for Level 1, Level 2 and
+Level 3 BLAS.
+
+ C. Lawson, R. Hanson, D. Kincaid, F. Krogh, "Basic Linear Algebra
+ Subprograms for Fortran Usage", `ACM Transactions on Mathematical
+ Software', Vol. 5 (1979), Pages 308-325.
+
+ J.J. Dongarra, J. DuCroz, S. Hammarling, R. Hanson, "An Extended
+ Set of Fortran Basic Linear Algebra Subprograms", `ACM
+ Transactions on Mathematical Software', Vol. 14, No. 1 (1988),
+ Pages 1-32.
+
+ J.J. Dongarra, I. Duff, J. DuCroz, S. Hammarling, "A Set of Level
+ 3 Basic Linear Algebra Subprograms", `ACM Transactions on
+ Mathematical Software', Vol. 16 (1990), Pages 1-28.
+
+Postscript versions of the latter two papers are available from
+`http://www.netlib.org/blas/'. A CBLAS wrapper for Fortran BLAS
+libraries is available from the same location.
+
+
+File: gsl-ref.info, Node: Linear Algebra, Next: Eigensystems, Prev: BLAS Support, Up: Top
+
+13 Linear Algebra
+*****************
+
+This chapter describes functions for solving linear systems. The
+library provides linear algebra operations which operate directly on
+the `gsl_vector' and `gsl_matrix' objects. These routines use the
+standard algorithms from Golub & Van Loan's `Matrix Computations'.
+
+ When dealing with very large systems the routines found in LAPACK
+should be considered. These support specialized data representations
+and other optimizations.
+
+ The functions described in this chapter are declared in the header
+file `gsl_linalg.h'.
+
+* Menu:
+
+* LU Decomposition::
+* QR Decomposition::
+* QR Decomposition with Column Pivoting::
+* Singular Value Decomposition::
+* Cholesky Decomposition::
+* Tridiagonal Decomposition of Real Symmetric Matrices::
+* Tridiagonal Decomposition of Hermitian Matrices::
+* Hessenberg Decomposition of Real Matrices::
+* Bidiagonalization::
+* Householder Transformations::
+* Householder solver for linear systems::
+* Tridiagonal Systems::
+* Balancing::
+* Linear Algebra Examples::
+* Linear Algebra References and Further Reading::
+
+
+File: gsl-ref.info, Node: LU Decomposition, Next: QR Decomposition, Up: Linear Algebra
+
+13.1 LU Decomposition
+=====================
+
+A general square matrix A has an LU decomposition into upper and lower
+triangular matrices,
+
+ P A = L U
+
+where P is a permutation matrix, L is unit lower triangular matrix and
+U is upper triangular matrix. For square matrices this decomposition
+can be used to convert the linear system A x = b into a pair of
+triangular systems (L y = P b, U x = y), which can be solved by forward
+and back-substitution. Note that the LU decomposition is valid for
+singular matrices.
+
+ -- Function: int gsl_linalg_LU_decomp (gsl_matrix * A, gsl_permutation
+ * P, int * SIGNUM)
+ -- Function: int gsl_linalg_complex_LU_decomp (gsl_matrix_complex * A,
+ gsl_permutation * P, int * SIGNUM)
+ These functions factorize the square matrix A into the LU
+ decomposition PA = LU. On output the diagonal and upper
+ triangular part of the input matrix A contain the matrix U. The
+ lower triangular part of the input matrix (excluding the diagonal)
+ contains L. The diagonal elements of L are unity, and are not
+ stored.
+
+ The permutation matrix P is encoded in the permutation P. The j-th
+ column of the matrix P is given by the k-th column of the identity
+ matrix, where k = p_j the j-th element of the permutation vector.
+ The sign of the permutation is given by SIGNUM. It has the value
+ (-1)^n, where n is the number of interchanges in the permutation.
+
+ The algorithm used in the decomposition is Gaussian Elimination
+ with partial pivoting (Golub & Van Loan, `Matrix Computations',
+ Algorithm 3.4.1).
+
+ -- Function: int gsl_linalg_LU_solve (const gsl_matrix * LU, const
+ gsl_permutation * P, const gsl_vector * B, gsl_vector * X)
+ -- Function: int gsl_linalg_complex_LU_solve (const gsl_matrix_complex
+ * LU, const gsl_permutation * P, const gsl_vector_complex *
+ B, gsl_vector_complex * X)
+ These functions solve the square system A x = b using the LU
+ decomposition of A into (LU, P) given by `gsl_linalg_LU_decomp' or
+ `gsl_linalg_complex_LU_decomp'.
+
+ -- Function: int gsl_linalg_LU_svx (const gsl_matrix * LU, const
+ gsl_permutation * P, gsl_vector * X)
+ -- Function: int gsl_linalg_complex_LU_svx (const gsl_matrix_complex *
+ LU, const gsl_permutation * P, gsl_vector_complex * X)
+ These functions solve the square system A x = b in-place using the
+ LU decomposition of A into (LU,P). On input X should contain the
+ right-hand side b, which is replaced by the solution on output.
+
+ -- Function: int gsl_linalg_LU_refine (const gsl_matrix * A, const
+ gsl_matrix * LU, const gsl_permutation * P, const gsl_vector
+ * B, gsl_vector * X, gsl_vector * RESIDUAL)
+ -- Function: int gsl_linalg_complex_LU_refine (const
+ gsl_matrix_complex * A, const gsl_matrix_complex * LU, const
+ gsl_permutation * P, const gsl_vector_complex * B,
+ gsl_vector_complex * X, gsl_vector_complex * RESIDUAL)
+ These functions apply an iterative improvement to X, the solution
+ of A x = b, using the LU decomposition of A into (LU,P). The
+ initial residual r = A x - b is also computed and stored in
+ RESIDUAL.
+
+ -- Function: int gsl_linalg_LU_invert (const gsl_matrix * LU, const
+ gsl_permutation * P, gsl_matrix * INVERSE)
+ -- Function: int gsl_linalg_complex_LU_invert (const
+ gsl_matrix_complex * LU, const gsl_permutation * P,
+ gsl_matrix_complex * INVERSE)
+ These functions compute the inverse of a matrix A from its LU
+ decomposition (LU,P), storing the result in the matrix INVERSE.
+ The inverse is computed by solving the system A x = b for each
+ column of the identity matrix. It is preferable to avoid direct
+ use of the inverse whenever possible, as the linear solver
+ functions can obtain the same result more efficiently and reliably
+ (consult any introductory textbook on numerical linear algebra for
+ details).
+
+ -- Function: double gsl_linalg_LU_det (gsl_matrix * LU, int SIGNUM)
+ -- Function: gsl_complex gsl_linalg_complex_LU_det (gsl_matrix_complex
+ * LU, int SIGNUM)
+ These functions compute the determinant of a matrix A from its LU
+ decomposition, LU. The determinant is computed as the product of
+ the diagonal elements of U and the sign of the row permutation
+ SIGNUM.
+
+ -- Function: double gsl_linalg_LU_lndet (gsl_matrix * LU)
+ -- Function: double gsl_linalg_complex_LU_lndet (gsl_matrix_complex *
+ LU)
+ These functions compute the logarithm of the absolute value of the
+ determinant of a matrix A, \ln|\det(A)|, from its LU
+ decomposition, LU. This function may be useful if the direct
+ computation of the determinant would overflow or underflow.
+
+ -- Function: int gsl_linalg_LU_sgndet (gsl_matrix * LU, int SIGNUM)
+ -- Function: gsl_complex gsl_linalg_complex_LU_sgndet
+ (gsl_matrix_complex * LU, int SIGNUM)
+ These functions compute the sign or phase factor of the
+ determinant of a matrix A, \det(A)/|\det(A)|, from its LU
+ decomposition, LU.
+
+
+File: gsl-ref.info, Node: QR Decomposition, Next: QR Decomposition with Column Pivoting, Prev: LU Decomposition, Up: Linear Algebra
+
+13.2 QR Decomposition
+=====================
+
+A general rectangular M-by-N matrix A has a QR decomposition into the
+product of an orthogonal M-by-M square matrix Q (where Q^T Q = I) and
+an M-by-N right-triangular matrix R,
+
+ A = Q R
+
+This decomposition can be used to convert the linear system A x = b
+into the triangular system R x = Q^T b, which can be solved by
+back-substitution. Another use of the QR decomposition is to compute an
+orthonormal basis for a set of vectors. The first N columns of Q form
+an orthonormal basis for the range of A, ran(A), when A has full column
+rank.
+
+ -- Function: int gsl_linalg_QR_decomp (gsl_matrix * A, gsl_vector *
+ TAU)
+ This function factorizes the M-by-N matrix A into the QR
+ decomposition A = Q R. On output the diagonal and upper
+ triangular part of the input matrix contain the matrix R. The
+ vector TAU and the columns of the lower triangular part of the
+ matrix A contain the Householder coefficients and Householder
+ vectors which encode the orthogonal matrix Q. The vector TAU must
+ be of length k=\min(M,N). The matrix Q is related to these
+ components by, Q = Q_k ... Q_2 Q_1 where Q_i = I - \tau_i v_i
+ v_i^T and v_i is the Householder vector v_i =
+ (0,...,1,A(i+1,i),A(i+2,i),...,A(m,i)). This is the same storage
+ scheme as used by LAPACK.
+
+ The algorithm used to perform the decomposition is Householder QR
+ (Golub & Van Loan, `Matrix Computations', Algorithm 5.2.1).
+
+ -- Function: int gsl_linalg_QR_solve (const gsl_matrix * QR, const
+ gsl_vector * TAU, const gsl_vector * B, gsl_vector * X)
+ This function solves the square system A x = b using the QR
+ decomposition of A into (QR, TAU) given by `gsl_linalg_QR_decomp'.
+ The least-squares solution for rectangular systems can be found
+ using `gsl_linalg_QR_lssolve'.
+
+ -- Function: int gsl_linalg_QR_svx (const gsl_matrix * QR, const
+ gsl_vector * TAU, gsl_vector * X)
+ This function solves the square system A x = b in-place using the
+ QR decomposition of A into (QR,TAU) given by
+ `gsl_linalg_QR_decomp'. On input X should contain the right-hand
+ side b, which is replaced by the solution on output.
+
+ -- Function: int gsl_linalg_QR_lssolve (const gsl_matrix * QR, const
+ gsl_vector * TAU, const gsl_vector * B, gsl_vector * X,
+ gsl_vector * RESIDUAL)
+ This function finds the least squares solution to the
+ overdetermined system A x = b where the matrix A has more rows than
+ columns. The least squares solution minimizes the Euclidean norm
+ of the residual, ||Ax - b||.The routine uses the QR decomposition
+ of A into (QR, TAU) given by `gsl_linalg_QR_decomp'. The solution
+ is returned in X. The residual is computed as a by-product and
+ stored in RESIDUAL.
+
+ -- Function: int gsl_linalg_QR_QTvec (const gsl_matrix * QR, const
+ gsl_vector * TAU, gsl_vector * V)
+ This function applies the matrix Q^T encoded in the decomposition
+ (QR,TAU) to the vector V, storing the result Q^T v in V. The
+ matrix multiplication is carried out directly using the encoding
+ of the Householder vectors without needing to form the full matrix
+ Q^T.
+
+ -- Function: int gsl_linalg_QR_Qvec (const gsl_matrix * QR, const
+ gsl_vector * TAU, gsl_vector * V)
+ This function applies the matrix Q encoded in the decomposition
+ (QR,TAU) to the vector V, storing the result Q v in V. The matrix
+ multiplication is carried out directly using the encoding of the
+ Householder vectors without needing to form the full matrix Q.
+
+ -- Function: int gsl_linalg_QR_Rsolve (const gsl_matrix * QR, const
+ gsl_vector * B, gsl_vector * X)
+ This function solves the triangular system R x = b for X. It may
+ be useful if the product b' = Q^T b has already been computed
+ using `gsl_linalg_QR_QTvec'.
+
+ -- Function: int gsl_linalg_QR_Rsvx (const gsl_matrix * QR, gsl_vector
+ * X)
+ This function solves the triangular system R x = b for X in-place.
+ On input X should contain the right-hand side b and is replaced by
+ the solution on output. This function may be useful if the product
+ b' = Q^T b has already been computed using `gsl_linalg_QR_QTvec'.
+
+ -- Function: int gsl_linalg_QR_unpack (const gsl_matrix * QR, const
+ gsl_vector * TAU, gsl_matrix * Q, gsl_matrix * R)
+ This function unpacks the encoded QR decomposition (QR,TAU) into
+ the matrices Q and R, where Q is M-by-M and R is M-by-N.
+
+ -- Function: int gsl_linalg_QR_QRsolve (gsl_matrix * Q, gsl_matrix *
+ R, const gsl_vector * B, gsl_vector * X)
+ This function solves the system R x = Q^T b for X. It can be used
+ when the QR decomposition of a matrix is available in unpacked
+ form as (Q, R).
+
+ -- Function: int gsl_linalg_QR_update (gsl_matrix * Q, gsl_matrix * R,
+ gsl_vector * W, const gsl_vector * V)
+ This function performs a rank-1 update w v^T of the QR
+ decomposition (Q, R). The update is given by Q'R' = Q R + w v^T
+ where the output matrices Q' and R' are also orthogonal and right
+ triangular. Note that W is destroyed by the update.
+
+ -- Function: int gsl_linalg_R_solve (const gsl_matrix * R, const
+ gsl_vector * B, gsl_vector * X)
+ This function solves the triangular system R x = b for the N-by-N
+ matrix R.
+
+ -- Function: int gsl_linalg_R_svx (const gsl_matrix * R, gsl_vector *
+ X)
+ This function solves the triangular system R x = b in-place. On
+ input X should contain the right-hand side b, which is replaced by
+ the solution on output.
+
+
+File: gsl-ref.info, Node: QR Decomposition with Column Pivoting, Next: Singular Value Decomposition, Prev: QR Decomposition, Up: Linear Algebra
+
+13.3 QR Decomposition with Column Pivoting
+==========================================
+
+The QR decomposition can be extended to the rank deficient case by
+introducing a column permutation P,
+
+ A P = Q R
+
+The first r columns of Q form an orthonormal basis for the range of A
+for a matrix with column rank r. This decomposition can also be used
+to convert the linear system A x = b into the triangular system R y =
+Q^T b, x = P y, which can be solved by back-substitution and
+permutation. We denote the QR decomposition with column pivoting by
+QRP^T since A = Q R P^T.
+
+ -- Function: int gsl_linalg_QRPT_decomp (gsl_matrix * A, gsl_vector *
+ TAU, gsl_permutation * P, int * SIGNUM, gsl_vector * NORM)
+ This function factorizes the M-by-N matrix A into the QRP^T
+ decomposition A = Q R P^T. On output the diagonal and upper
+ triangular part of the input matrix contain the matrix R. The
+ permutation matrix P is stored in the permutation P. The sign of
+ the permutation is given by SIGNUM. It has the value (-1)^n, where
+ n is the number of interchanges in the permutation. The vector TAU
+ and the columns of the lower triangular part of the matrix A
+ contain the Householder coefficients and vectors which encode the
+ orthogonal matrix Q. The vector TAU must be of length
+ k=\min(M,N). The matrix Q is related to these components by, Q =
+ Q_k ... Q_2 Q_1 where Q_i = I - \tau_i v_i v_i^T and v_i is the
+ Householder vector v_i = (0,...,1,A(i+1,i),A(i+2,i),...,A(m,i)).
+ This is the same storage scheme as used by LAPACK. The vector
+ NORM is a workspace of length N used for column pivoting.
+
+ The algorithm used to perform the decomposition is Householder QR
+ with column pivoting (Golub & Van Loan, `Matrix Computations',
+ Algorithm 5.4.1).
+
+ -- Function: int gsl_linalg_QRPT_decomp2 (const gsl_matrix * A,
+ gsl_matrix * Q, gsl_matrix * R, gsl_vector * TAU,
+ gsl_permutation * P, int * SIGNUM, gsl_vector * NORM)
+ This function factorizes the matrix A into the decomposition A = Q
+ R P^T without modifying A itself and storing the output in the
+ separate matrices Q and R.
+
+ -- Function: int gsl_linalg_QRPT_solve (const gsl_matrix * QR, const
+ gsl_vector * TAU, const gsl_permutation * P, const gsl_vector
+ * B, gsl_vector * X)
+ This function solves the square system A x = b using the QRP^T
+ decomposition of A into (QR, TAU, P) given by
+ `gsl_linalg_QRPT_decomp'.
+
+ -- Function: int gsl_linalg_QRPT_svx (const gsl_matrix * QR, const
+ gsl_vector * TAU, const gsl_permutation * P, gsl_vector * X)
+ This function solves the square system A x = b in-place using the
+ QRP^T decomposition of A into (QR,TAU,P). On input X should
+ contain the right-hand side b, which is replaced by the solution
+ on output.
+
+ -- Function: int gsl_linalg_QRPT_QRsolve (const gsl_matrix * Q, const
+ gsl_matrix * R, const gsl_permutation * P, const gsl_vector *
+ B, gsl_vector * X)
+ This function solves the square system R P^T x = Q^T b for X. It
+ can be used when the QR decomposition of a matrix is available in
+ unpacked form as (Q, R).
+
+ -- Function: int gsl_linalg_QRPT_update (gsl_matrix * Q, gsl_matrix *
+ R, const gsl_permutation * P, gsl_vector * U, const
+ gsl_vector * V)
+ This function performs a rank-1 update w v^T of the QRP^T
+ decomposition (Q, R, P). The update is given by Q'R' = Q R + w v^T
+ where the output matrices Q' and R' are also orthogonal and right
+ triangular. Note that W is destroyed by the update. The
+ permutation P is not changed.
+
+ -- Function: int gsl_linalg_QRPT_Rsolve (const gsl_matrix * QR, const
+ gsl_permutation * P, const gsl_vector * B, gsl_vector * X)
+ This function solves the triangular system R P^T x = b for the
+ N-by-N matrix R contained in QR.
+
+ -- Function: int gsl_linalg_QRPT_Rsvx (const gsl_matrix * QR, const
+ gsl_permutation * P, gsl_vector * X)
+ This function solves the triangular system R P^T x = b in-place
+ for the N-by-N matrix R contained in QR. On input X should contain
+ the right-hand side b, which is replaced by the solution on output.
+
+
+File: gsl-ref.info, Node: Singular Value Decomposition, Next: Cholesky Decomposition, Prev: QR Decomposition with Column Pivoting, Up: Linear Algebra
+
+13.4 Singular Value Decomposition
+=================================
+
+A general rectangular M-by-N matrix A has a singular value
+decomposition (SVD) into the product of an M-by-N orthogonal matrix U,
+an N-by-N diagonal matrix of singular values S and the transpose of an
+N-by-N orthogonal square matrix V,
+
+ A = U S V^T
+
+The singular values \sigma_i = S_{ii} are all non-negative and are
+generally chosen to form a non-increasing sequence \sigma_1 >= \sigma_2
+>= ... >= \sigma_N >= 0.
+
+ The singular value decomposition of a matrix has many practical uses.
+The condition number of the matrix is given by the ratio of the largest
+singular value to the smallest singular value. The presence of a zero
+singular value indicates that the matrix is singular. The number of
+non-zero singular values indicates the rank of the matrix. In practice
+singular value decomposition of a rank-deficient matrix will not produce
+exact zeroes for singular values, due to finite numerical precision.
+Small singular values should be edited by choosing a suitable tolerance.
+
+ For a rank-deficient matrix, the null space of A is given by the
+columns of V corresponding to the zero singular values. Similarly, the
+range of A is given by columns of U corresponding to the non-zero
+singular values.
+
+ -- Function: int gsl_linalg_SV_decomp (gsl_matrix * A, gsl_matrix * V,
+ gsl_vector * S, gsl_vector * WORK)
+ This function factorizes the M-by-N matrix A into the singular
+ value decomposition A = U S V^T for M >= N. On output the matrix
+ A is replaced by U. The diagonal elements of the singular value
+ matrix S are stored in the vector S. The singular values are
+ non-negative and form a non-increasing sequence from S_1 to S_N.
+ The matrix V contains the elements of V in untransposed form. To
+ form the product U S V^T it is necessary to take the transpose of
+ V. A workspace of length N is required in WORK.
+
+ This routine uses the Golub-Reinsch SVD algorithm.
+
+ -- Function: int gsl_linalg_SV_decomp_mod (gsl_matrix * A, gsl_matrix
+ * X, gsl_matrix * V, gsl_vector * S, gsl_vector * WORK)
+ This function computes the SVD using the modified Golub-Reinsch
+ algorithm, which is faster for M>>N. It requires the vector WORK
+ of length N and the N-by-N matrix X as additional working space.
+
+ -- Function: int gsl_linalg_SV_decomp_jacobi (gsl_matrix * A,
+ gsl_matrix * V, gsl_vector * S)
+ This function computes the SVD of the M-by-N matrix A using
+ one-sided Jacobi orthogonalization for M >= N. The Jacobi method
+ can compute singular values to higher relative accuracy than
+ Golub-Reinsch algorithms (see references for details).
+
+ -- Function: int gsl_linalg_SV_solve (gsl_matrix * U, gsl_matrix * V,
+ gsl_vector * S, const gsl_vector * B, gsl_vector * X)
+ This function solves the system A x = b using the singular value
+ decomposition (U, S, V) of A given by `gsl_linalg_SV_decomp'.
+
+ Only non-zero singular values are used in computing the solution.
+ The parts of the solution corresponding to singular values of zero
+ are ignored. Other singular values can be edited out by setting
+ them to zero before calling this function.
+
+ In the over-determined case where A has more rows than columns the
+ system is solved in the least squares sense, returning the solution
+ X which minimizes ||A x - b||_2.
+
+
+File: gsl-ref.info, Node: Cholesky Decomposition, Next: Tridiagonal Decomposition of Real Symmetric Matrices, Prev: Singular Value Decomposition, Up: Linear Algebra
+
+13.5 Cholesky Decomposition
+===========================
+
+A symmetric, positive definite square matrix A has a Cholesky
+decomposition into a product of a lower triangular matrix L and its
+transpose L^T,
+
+ A = L L^T
+
+This is sometimes referred to as taking the square-root of a matrix. The
+Cholesky decomposition can only be carried out when all the eigenvalues
+of the matrix are positive. This decomposition can be used to convert
+the linear system A x = b into a pair of triangular systems (L y = b,
+L^T x = y), which can be solved by forward and back-substitution.
+
+ -- Function: int gsl_linalg_cholesky_decomp (gsl_matrix * A)
+ This function factorizes the positive-definite symmetric square
+ matrix A into the Cholesky decomposition A = L L^T. On input only
+ the diagonal and lower-triangular part of the matrix A are needed.
+ On output the diagonal and lower triangular part of the input
+ matrix A contain the matrix L. The upper triangular part of the
+ input matrix contains L^T, the diagonal terms being identical for
+ both L and L^T. If the matrix is not positive-definite then the
+ decomposition will fail, returning the error code `GSL_EDOM'.
+
+ -- Function: int gsl_linalg_cholesky_solve (const gsl_matrix *
+ CHOLESKY, const gsl_vector * B, gsl_vector * X)
+ This function solves the system A x = b using the Cholesky
+ decomposition of A into the matrix CHOLESKY given by
+ `gsl_linalg_cholesky_decomp'.
+
+ -- Function: int gsl_linalg_cholesky_svx (const gsl_matrix * CHOLESKY,
+ gsl_vector * X)
+ This function solves the system A x = b in-place using the
+ Cholesky decomposition of A into the matrix CHOLESKY given by
+ `gsl_linalg_cholesky_decomp'. On input X should contain the
+ right-hand side b, which is replaced by the solution on output.
+
+
+File: gsl-ref.info, Node: Tridiagonal Decomposition of Real Symmetric Matrices, Next: Tridiagonal Decomposition of Hermitian Matrices, Prev: Cholesky Decomposition, Up: Linear Algebra
+
+13.6 Tridiagonal Decomposition of Real Symmetric Matrices
+=========================================================
+
+A symmetric matrix A can be factorized by similarity transformations
+into the form,
+
+ A = Q T Q^T
+
+where Q is an orthogonal matrix and T is a symmetric tridiagonal matrix.
+
+ -- Function: int gsl_linalg_symmtd_decomp (gsl_matrix * A, gsl_vector
+ * TAU)
+ This function factorizes the symmetric square matrix A into the
+ symmetric tridiagonal decomposition Q T Q^T. On output the
+ diagonal and subdiagonal part of the input matrix A contain the
+ tridiagonal matrix T. The remaining lower triangular part of the
+ input matrix contains the Householder vectors which, together with
+ the Householder coefficients TAU, encode the orthogonal matrix Q.
+ This storage scheme is the same as used by LAPACK. The upper
+ triangular part of A is not referenced.
+
+ -- Function: int gsl_linalg_symmtd_unpack (const gsl_matrix * A, const
+ gsl_vector * TAU, gsl_matrix * Q, gsl_vector * DIAG,
+ gsl_vector * SUBDIAG)
+ This function unpacks the encoded symmetric tridiagonal
+ decomposition (A, TAU) obtained from `gsl_linalg_symmtd_decomp'
+ into the orthogonal matrix Q, the vector of diagonal elements DIAG
+ and the vector of subdiagonal elements SUBDIAG.
+
+ -- Function: int gsl_linalg_symmtd_unpack_T (const gsl_matrix * A,
+ gsl_vector * DIAG, gsl_vector * SUBDIAG)
+ This function unpacks the diagonal and subdiagonal of the encoded
+ symmetric tridiagonal decomposition (A, TAU) obtained from
+ `gsl_linalg_symmtd_decomp' into the vectors DIAG and SUBDIAG.
+
+
+File: gsl-ref.info, Node: Tridiagonal Decomposition of Hermitian Matrices, Next: Hessenberg Decomposition of Real Matrices, Prev: Tridiagonal Decomposition of Real Symmetric Matrices, Up: Linear Algebra
+
+13.7 Tridiagonal Decomposition of Hermitian Matrices
+====================================================
+
+A hermitian matrix A can be factorized by similarity transformations
+into the form,
+
+ A = U T U^T
+
+where U is a unitary matrix and T is a real symmetric tridiagonal
+matrix.
+
+ -- Function: int gsl_linalg_hermtd_decomp (gsl_matrix_complex * A,
+ gsl_vector_complex * TAU)
+ This function factorizes the hermitian matrix A into the symmetric
+ tridiagonal decomposition U T U^T. On output the real parts of
+ the diagonal and subdiagonal part of the input matrix A contain
+ the tridiagonal matrix T. The remaining lower triangular part of
+ the input matrix contains the Householder vectors which, together
+ with the Householder coefficients TAU, encode the orthogonal matrix
+ Q. This storage scheme is the same as used by LAPACK. The upper
+ triangular part of A and imaginary parts of the diagonal are not
+ referenced.
+
+ -- Function: int gsl_linalg_hermtd_unpack (const gsl_matrix_complex *
+ A, const gsl_vector_complex * TAU, gsl_matrix_complex * Q,
+ gsl_vector * DIAG, gsl_vector * SUBDIAG)
+ This function unpacks the encoded tridiagonal decomposition (A,
+ TAU) obtained from `gsl_linalg_hermtd_decomp' into the unitary
+ matrix U, the real vector of diagonal elements DIAG and the real
+ vector of subdiagonal elements SUBDIAG.
+
+ -- Function: int gsl_linalg_hermtd_unpack_T (const gsl_matrix_complex
+ * A, gsl_vector * DIAG, gsl_vector * SUBDIAG)
+ This function unpacks the diagonal and subdiagonal of the encoded
+ tridiagonal decomposition (A, TAU) obtained from the
+ `gsl_linalg_hermtd_decomp' into the real vectors DIAG and SUBDIAG.
+
+
+File: gsl-ref.info, Node: Hessenberg Decomposition of Real Matrices, Next: Bidiagonalization, Prev: Tridiagonal Decomposition of Hermitian Matrices, Up: Linear Algebra
+
+13.8 Hessenberg Decomposition of Real Matrices
+==============================================
+
+A general matrix A can be decomposed by orthogonal similarity
+transformations into the form
+
+ A = U H U^T
+
+ where U is orthogonal and H is an upper Hessenberg matrix, meaning
+that it has zeros below the first subdiagonal. The Hessenberg reduction
+is the first step in the Schur decomposition for the nonsymmetric
+eigenvalue problem, but has applications in other areas as well.
+
+ -- Function: int gsl_linalg_hessenberg (gsl_matrix * A, gsl_vector *
+ TAU)
+ This function computes the Hessenberg decomposition of the matrix
+ A by applying the similarity transformation H = U^T A U. On
+ output, H is stored in the upper portion of A. The information
+ required to construct the matrix U is stored in the lower
+ triangular portion of A. U is a product of N - 2 Householder
+ matrices. The Householder vectors are stored in the lower portion
+ of A (below the subdiagonal) and the Householder coefficients are
+ stored in the vector TAU. TAU must be of length N.
+
+ -- Function: int gsl_linalg_hessenberg_unpack (gsl_matrix * H,
+ gsl_vector * TAU, gsl_matrix * U)
+ This function constructs the orthogonal matrix U from the
+ information stored in the Hessenberg matrix H along with the
+ vector TAU. H and TAU are outputs from `gsl_linalg_hessenberg'.
+
+ -- Function: int gsl_linalg_hessenberg_unpack_accum (gsl_matrix * H,
+ gsl_vector * TAU, gsl_matrix * V)
+ This function is similar to `gsl_linalg_hessenberg_unpack', except
+ it accumulates the matrix U into V, so that V' = VU. The matrix V
+ must be initialized prior to calling this function. Setting V to
+ the identity matrix provides the same result as
+ `gsl_linalg_hessenberg_unpack'. If H is order N, then V must have
+ N columns but may have any number of rows.
+
+ -- Function: void gsl_linalg_hessenberg_set_zero (gsl_matrix * H)
+ This function sets the lower triangular portion of H, below the
+ subdiagonal, to zero. It is useful for clearing out the
+ Householder vectors after calling `gsl_linalg_hessenberg'.
+
+
+File: gsl-ref.info, Node: Bidiagonalization, Next: Householder Transformations, Prev: Hessenberg Decomposition of Real Matrices, Up: Linear Algebra
+
+13.9 Bidiagonalization
+======================
+
+A general matrix A can be factorized by similarity transformations into
+the form,
+
+ A = U B V^T
+
+where U and V are orthogonal matrices and B is a N-by-N bidiagonal
+matrix with non-zero entries only on the diagonal and superdiagonal.
+The size of U is M-by-N and the size of V is N-by-N.
+
+ -- Function: int gsl_linalg_bidiag_decomp (gsl_matrix * A, gsl_vector
+ * TAU_U, gsl_vector * TAU_V)
+ This function factorizes the M-by-N matrix A into bidiagonal form
+ U B V^T. The diagonal and superdiagonal of the matrix B are
+ stored in the diagonal and superdiagonal of A. The orthogonal
+ matrices U and V are stored as compressed Householder vectors in
+ the remaining elements of A. The Householder coefficients are
+ stored in the vectors TAU_U and TAU_V. The length of TAU_U must
+ equal the number of elements in the diagonal of A and the length
+ of TAU_V should be one element shorter.
+
+ -- Function: int gsl_linalg_bidiag_unpack (const gsl_matrix * A, const
+ gsl_vector * TAU_U, gsl_matrix * U, const gsl_vector * TAU_V,
+ gsl_matrix * V, gsl_vector * DIAG, gsl_vector * SUPERDIAG)
+ This function unpacks the bidiagonal decomposition of A given by
+ `gsl_linalg_bidiag_decomp', (A, TAU_U, TAU_V) into the separate
+ orthogonal matrices U, V and the diagonal vector DIAG and
+ superdiagonal SUPERDIAG. Note that U is stored as a compact
+ M-by-N orthogonal matrix satisfying U^T U = I for efficiency.
+
+ -- Function: int gsl_linalg_bidiag_unpack2 (gsl_matrix * A, gsl_vector
+ * TAU_U, gsl_vector * TAU_V, gsl_matrix * V)
+ This function unpacks the bidiagonal decomposition of A given by
+ `gsl_linalg_bidiag_decomp', (A, TAU_U, TAU_V) into the separate
+ orthogonal matrices U, V and the diagonal vector DIAG and
+ superdiagonal SUPERDIAG. The matrix U is stored in-place in A.
+
+ -- Function: int gsl_linalg_bidiag_unpack_B (const gsl_matrix * A,
+ gsl_vector * DIAG, gsl_vector * SUPERDIAG)
+ This function unpacks the diagonal and superdiagonal of the
+ bidiagonal decomposition of A given by `gsl_linalg_bidiag_decomp',
+ into the diagonal vector DIAG and superdiagonal vector SUPERDIAG.
+
+
+File: gsl-ref.info, Node: Householder Transformations, Next: Householder solver for linear systems, Prev: Bidiagonalization, Up: Linear Algebra
+
+13.10 Householder Transformations
+=================================
+
+A Householder transformation is a rank-1 modification of the identity
+matrix which can be used to zero out selected elements of a vector. A
+Householder matrix P takes the form,
+
+ P = I - \tau v v^T
+
+where v is a vector (called the "Householder vector") and \tau = 2/(v^T
+v). The functions described in this section use the rank-1 structure
+of the Householder matrix to create and apply Householder
+transformations efficiently.
+
+ -- Function: double gsl_linalg_householder_transform (gsl_vector * V)
+ This function prepares a Householder transformation P = I - \tau v
+ v^T which can be used to zero all the elements of the input vector
+ except the first. On output the transformation is stored in the
+ vector V and the scalar \tau is returned.
+
+ -- Function: int gsl_linalg_householder_hm (double tau, const
+ gsl_vector * v, gsl_matrix * A)
+ This function applies the Householder matrix P defined by the
+ scalar TAU and the vector V to the left-hand side of the matrix A.
+ On output the result P A is stored in A.
+
+ -- Function: int gsl_linalg_householder_mh (double tau, const
+ gsl_vector * v, gsl_matrix * A)
+ This function applies the Householder matrix P defined by the
+ scalar TAU and the vector V to the right-hand side of the matrix
+ A. On output the result A P is stored in A.
+
+ -- Function: int gsl_linalg_householder_hv (double tau, const
+ gsl_vector * v, gsl_vector * w)
+ This function applies the Householder transformation P defined by
+ the scalar TAU and the vector V to the vector W. On output the
+ result P w is stored in W.
+
+
+File: gsl-ref.info, Node: Householder solver for linear systems, Next: Tridiagonal Systems, Prev: Householder Transformations, Up: Linear Algebra
+
+13.11 Householder solver for linear systems
+===========================================
+
+ -- Function: int gsl_linalg_HH_solve (gsl_matrix * A, const gsl_vector
+ * B, gsl_vector * X)
+ This function solves the system A x = b directly using Householder
+ transformations. On output the solution is stored in X and B is
+ not modified. The matrix A is destroyed by the Householder
+ transformations.
+
+ -- Function: int gsl_linalg_HH_svx (gsl_matrix * A, gsl_vector * X)
+ This function solves the system A x = b in-place using Householder
+ transformations. On input X should contain the right-hand side b,
+ which is replaced by the solution on output. The matrix A is
+ destroyed by the Householder transformations.
+
+
+File: gsl-ref.info, Node: Tridiagonal Systems, Next: Balancing, Prev: Householder solver for linear systems, Up: Linear Algebra
+
+13.12 Tridiagonal Systems
+=========================
+
+ -- Function: int gsl_linalg_solve_tridiag (const gsl_vector * DIAG,
+ const gsl_vector * E, const gsl_vector * F, const gsl_vector
+ * B, gsl_vector * X)
+ This function solves the general N-by-N system A x = b where A is
+ tridiagonal (N >= 2). The super-diagonal and sub-diagonal vectors
+ E and F must be one element shorter than the diagonal vector DIAG.
+ The form of A for the 4-by-4 case is shown below,
+
+ A = ( d_0 e_0 0 0 )
+ ( f_0 d_1 e_1 0 )
+ ( 0 f_1 d_2 e_2 )
+ ( 0 0 f_2 d_3 )
+
+ -- Function: int gsl_linalg_solve_symm_tridiag (const gsl_vector *
+ DIAG, const gsl_vector * E, const gsl_vector * B, gsl_vector
+ * X)
+ This function solves the general N-by-N system A x = b where A is
+ symmetric tridiagonal (N >= 2). The off-diagonal vector E must be
+ one element shorter than the diagonal vector DIAG. The form of A
+ for the 4-by-4 case is shown below,
+
+ A = ( d_0 e_0 0 0 )
+ ( e_0 d_1 e_1 0 )
+ ( 0 e_1 d_2 e_2 )
+ ( 0 0 e_2 d_3 )
+ The current implementation uses a variant of Cholesky decomposition
+ which can cause division by zero if the matrix is not positive
+ definite.
+
+ -- Function: int gsl_linalg_solve_cyc_tridiag (const gsl_vector *
+ DIAG, const gsl_vector * E, const gsl_vector * F, const
+ gsl_vector * B, gsl_vector * X)
+ This function solves the general N-by-N system A x = b where A is
+ cyclic tridiagonal (N >= 3). The cyclic super-diagonal and
+ sub-diagonal vectors E and F must have the same number of elements
+ as the diagonal vector DIAG. The form of A for the 4-by-4 case is
+ shown below,
+
+ A = ( d_0 e_0 0 f_3 )
+ ( f_0 d_1 e_1 0 )
+ ( 0 f_1 d_2 e_2 )
+ ( e_3 0 f_2 d_3 )
+
+ -- Function: int gsl_linalg_solve_symm_cyc_tridiag (const gsl_vector *
+ DIAG, const gsl_vector * E, const gsl_vector * B, gsl_vector
+ * X)
+ This function solves the general N-by-N system A x = b where A is
+ symmetric cyclic tridiagonal (N >= 3). The cyclic off-diagonal
+ vector E must have the same number of elements as the diagonal
+ vector DIAG. The form of A for the 4-by-4 case is shown below,
+
+ A = ( d_0 e_0 0 e_3 )
+ ( e_0 d_1 e_1 0 )
+ ( 0 e_1 d_2 e_2 )
+ ( e_3 0 e_2 d_3 )
+
+
+File: gsl-ref.info, Node: Balancing, Next: Linear Algebra Examples, Prev: Tridiagonal Systems, Up: Linear Algebra
+
+13.13 Balancing
+===============
+
+The process of balancing a matrix applies similarity transformations to
+make the rows and columns have comparable norms. This is useful, for
+example, to reduce roundoff errors in the solution of eigenvalue
+problems. Balancing a matrix A consists of replacing A with a similar
+matrix
+
+ A' = D^(-1) A D
+
+ where D is a diagonal matrix whose entries are powers of the
+floating point radix.
+
+ -- Function: int gsl_linalg_balance_matrix (gsl_matrix * A, gsl_vector
+ * D)
+ This function replaces the matrix A with its balanced counterpart
+ and stores the diagonal elements of the similarity transformation
+ into the vector D.
+
+
+File: gsl-ref.info, Node: Linear Algebra Examples, Next: Linear Algebra References and Further Reading, Prev: Balancing, Up: Linear Algebra
+
+13.14 Examples
+==============
+
+The following program solves the linear system A x = b. The system to
+be solved is,
+
+ [ 0.18 0.60 0.57 0.96 ] [x0] [1.0]
+ [ 0.41 0.24 0.99 0.58 ] [x1] = [2.0]
+ [ 0.14 0.30 0.97 0.66 ] [x2] [3.0]
+ [ 0.51 0.13 0.19 0.85 ] [x3] [4.0]
+
+and the solution is found using LU decomposition of the matrix A.
+
+ #include <stdio.h>
+ #include <gsl/gsl_linalg.h>
+
+ int
+ main (void)
+ {
+ double a_data[] = { 0.18, 0.60, 0.57, 0.96,
+ 0.41, 0.24, 0.99, 0.58,
+ 0.14, 0.30, 0.97, 0.66,
+ 0.51, 0.13, 0.19, 0.85 };
+
+ double b_data[] = { 1.0, 2.0, 3.0, 4.0 };
+
+ gsl_matrix_view m
+ = gsl_matrix_view_array (a_data, 4, 4);
+
+ gsl_vector_view b
+ = gsl_vector_view_array (b_data, 4);
+
+ gsl_vector *x = gsl_vector_alloc (4);
+
+ int s;
+
+ gsl_permutation * p = gsl_permutation_alloc (4);
+
+ gsl_linalg_LU_decomp (&m.matrix, p, &s);
+
+ gsl_linalg_LU_solve (&m.matrix, p, &b.vector, x);
+
+ printf ("x = \n");
+ gsl_vector_fprintf (stdout, x, "%g");
+
+ gsl_permutation_free (p);
+ gsl_vector_free (x);
+ return 0;
+ }
+
+Here is the output from the program,
+
+ x = -4.05205
+ -12.6056
+ 1.66091
+ 8.69377
+
+This can be verified by multiplying the solution x by the original
+matrix A using GNU OCTAVE,
+
+ octave> A = [ 0.18, 0.60, 0.57, 0.96;
+ 0.41, 0.24, 0.99, 0.58;
+ 0.14, 0.30, 0.97, 0.66;
+ 0.51, 0.13, 0.19, 0.85 ];
+
+ octave> x = [ -4.05205; -12.6056; 1.66091; 8.69377];
+
+ octave> A * x
+ ans =
+ 1.0000
+ 2.0000
+ 3.0000
+ 4.0000
+
+This reproduces the original right-hand side vector, b, in accordance
+with the equation A x = b.
+
+
+File: gsl-ref.info, Node: Linear Algebra References and Further Reading, Prev: Linear Algebra Examples, Up: Linear Algebra
+
+13.15 References and Further Reading
+====================================
+
+Further information on the algorithms described in this section can be
+found in the following book,
+
+ G. H. Golub, C. F. Van Loan, `Matrix Computations' (3rd Ed, 1996),
+ Johns Hopkins University Press, ISBN 0-8018-5414-8.
+
+The LAPACK library is described in the following manual,
+
+ `LAPACK Users' Guide' (Third Edition, 1999), Published by SIAM,
+ ISBN 0-89871-447-8.
+
+ `http://www.netlib.org/lapack'
+
+The LAPACK source code can be found at the website above, along with an
+online copy of the users guide.
+
+The Modified Golub-Reinsch algorithm is described in the following
+paper,
+
+ T.F. Chan, "An Improved Algorithm for Computing the Singular Value
+ Decomposition", `ACM Transactions on Mathematical Software', 8
+ (1982), pp 72-83.
+
+The Jacobi algorithm for singular value decomposition is described in
+the following papers,
+
+ J.C. Nash, "A one-sided transformation method for the singular
+ value decomposition and algebraic eigenproblem", `Computer
+ Journal', Volume 18, Number 1 (1973), p 74-76
+
+ James Demmel, Kresimir Veselic, "Jacobi's Method is more accurate
+ than QR", `Lapack Working Note 15' (LAWN-15), October 1989.
+ Available from netlib, `http://www.netlib.org/lapack/' in the
+ `lawns' or `lawnspdf' directories.
+
+
+File: gsl-ref.info, Node: Eigensystems, Next: Fast Fourier Transforms, Prev: Linear Algebra, Up: Top
+
+14 Eigensystems
+***************
+
+This chapter describes functions for computing eigenvalues and
+eigenvectors of matrices. There are routines for real symmetric, real
+nonsymmetric, and complex hermitian matrices. Eigenvalues can be
+computed with or without eigenvectors. The hermitian matrix algorithms
+used are symmetric bidiagonalization followed by QR reduction. The
+nonsymmetric algorithm is the Francis QR double-shift.
+
+ These routines are intended for "small" systems where simple
+algorithms are acceptable. Anyone interested in finding eigenvalues
+and eigenvectors of large matrices will want to use the sophisticated
+routines found in LAPACK. The Fortran version of LAPACK is recommended
+as the standard package for large-scale linear algebra.
+
+ The functions described in this chapter are declared in the header
+file `gsl_eigen.h'.
+
+* Menu:
+
+* Real Symmetric Matrices::
+* Complex Hermitian Matrices::
+* Real Nonsymmetric Matrices::
+* Sorting Eigenvalues and Eigenvectors::
+* Eigenvalue and Eigenvector Examples::
+* Eigenvalue and Eigenvector References::
+
+
+File: gsl-ref.info, Node: Real Symmetric Matrices, Next: Complex Hermitian Matrices, Up: Eigensystems
+
+14.1 Real Symmetric Matrices
+============================
+
+ -- Function: gsl_eigen_symm_workspace * gsl_eigen_symm_alloc (const
+ size_t N)
+ This function allocates a workspace for computing eigenvalues of
+ N-by-N real symmetric matrices. The size of the workspace is
+ O(2n).
+
+ -- Function: void gsl_eigen_symm_free (gsl_eigen_symm_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_eigen_symm (gsl_matrix * A, gsl_vector * EVAL,
+ gsl_eigen_symm_workspace * W)
+ This function computes the eigenvalues of the real symmetric matrix
+ A. Additional workspace of the appropriate size must be provided
+ in W. The diagonal and lower triangular part of A are destroyed
+ during the computation, but the strict upper triangular part is
+ not referenced. The eigenvalues are stored in the vector EVAL and
+ are unordered.
+
+ -- Function: gsl_eigen_symmv_workspace * gsl_eigen_symmv_alloc (const
+ size_t N)
+ This function allocates a workspace for computing eigenvalues and
+ eigenvectors of N-by-N real symmetric matrices. The size of the
+ workspace is O(4n).
+
+ -- Function: void gsl_eigen_symmv_free (gsl_eigen_symmv_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_eigen_symmv (gsl_matrix * A, gsl_vector * EVAL,
+ gsl_matrix * EVEC, gsl_eigen_symmv_workspace * W)
+ This function computes the eigenvalues and eigenvectors of the real
+ symmetric matrix A. Additional workspace of the appropriate size
+ must be provided in W. The diagonal and lower triangular part of
+ A are destroyed during the computation, but the strict upper
+ triangular part is not referenced. The eigenvalues are stored in
+ the vector EVAL and are unordered. The corresponding eigenvectors
+ are stored in the columns of the matrix EVEC. For example, the
+ eigenvector in the first column corresponds to the first
+ eigenvalue. The eigenvectors are guaranteed to be mutually
+ orthogonal and normalised to unit magnitude.
+
+
+File: gsl-ref.info, Node: Complex Hermitian Matrices, Next: Real Nonsymmetric Matrices, Prev: Real Symmetric Matrices, Up: Eigensystems
+
+14.2 Complex Hermitian Matrices
+===============================
+
+ -- Function: gsl_eigen_herm_workspace * gsl_eigen_herm_alloc (const
+ size_t N)
+ This function allocates a workspace for computing eigenvalues of
+ N-by-N complex hermitian matrices. The size of the workspace is
+ O(3n).
+
+ -- Function: void gsl_eigen_herm_free (gsl_eigen_herm_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_eigen_herm (gsl_matrix_complex * A, gsl_vector *
+ EVAL, gsl_eigen_herm_workspace * W)
+ This function computes the eigenvalues of the complex hermitian
+ matrix A. Additional workspace of the appropriate size must be
+ provided in W. The diagonal and lower triangular part of A are
+ destroyed during the computation, but the strict upper triangular
+ part is not referenced. The imaginary parts of the diagonal are
+ assumed to be zero and are not referenced. The eigenvalues are
+ stored in the vector EVAL and are unordered.
+
+ -- Function: gsl_eigen_hermv_workspace * gsl_eigen_hermv_alloc (const
+ size_t N)
+ This function allocates a workspace for computing eigenvalues and
+ eigenvectors of N-by-N complex hermitian matrices. The size of
+ the workspace is O(5n).
+
+ -- Function: void gsl_eigen_hermv_free (gsl_eigen_hermv_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_eigen_hermv (gsl_matrix_complex * A, gsl_vector *
+ EVAL, gsl_matrix_complex * EVEC, gsl_eigen_hermv_workspace *
+ W)
+ This function computes the eigenvalues and eigenvectors of the
+ complex hermitian matrix A. Additional workspace of the
+ appropriate size must be provided in W. The diagonal and lower
+ triangular part of A are destroyed during the computation, but the
+ strict upper triangular part is not referenced. The imaginary
+ parts of the diagonal are assumed to be zero and are not
+ referenced. The eigenvalues are stored in the vector EVAL and are
+ unordered. The corresponding complex eigenvectors are stored in
+ the columns of the matrix EVEC. For example, the eigenvector in
+ the first column corresponds to the first eigenvalue. The
+ eigenvectors are guaranteed to be mutually orthogonal and
+ normalised to unit magnitude.
+
+
+File: gsl-ref.info, Node: Real Nonsymmetric Matrices, Next: Sorting Eigenvalues and Eigenvectors, Prev: Complex Hermitian Matrices, Up: Eigensystems
+
+14.3 Real Nonsymmetric Matrices
+===============================
+
+The solution of the real nonsymmetric eigensystem problem for a matrix
+A involves computing the Schur decomposition
+
+ A = Z T Z^T
+
+ where Z is an orthogonal matrix of Schur vectors and T, the Schur
+form, is quasi upper triangular with diagonal 1-by-1 blocks which are
+real eigenvalues of A, and diagonal 2-by-2 blocks whose eigenvalues are
+complex conjugate eigenvalues of A. The algorithm used is the double
+shift Francis method.
+
+ -- Function: gsl_eigen_nonsymm_workspace * gsl_eigen_nonsymm_alloc
+ (const size_t N)
+ This function allocates a workspace for computing eigenvalues of
+ N-by-N real nonsymmetric matrices. The size of the workspace is
+ O(2n).
+
+ -- Function: void gsl_eigen_nonsymm_free (gsl_eigen_nonsymm_workspace
+ * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: void gsl_eigen_nonsymm_params (const int COMPUTE_T, const
+ int BALANCE, gsl_eigen_nonsymm_workspace * W)
+ This function sets some parameters which determine how the
+ eigenvalue problem is solved in subsequent calls to
+ `gsl_eigen_nonsymm'.
+
+ If COMPUTE_T is set to 1, the full Schur form T will be computed
+ by `gsl_eigen_nonsymm'. If it is set to 0, T will not be computed
+ (this is the default setting). Computing the full Schur form T
+ requires approximately 1.5-2 times the number of flops.
+
+ If BALANCE is set to 1, a balancing transformation is applied to
+ the matrix prior to computing eigenvalues. This transformation is
+ designed to make the rows and columns of the matrix have comparable
+ norms, and can result in more accurate eigenvalues for matrices
+ whose entries vary widely in magnitude. See *Note Balancing:: for
+ more information. Note that the balancing transformation does not
+ preserve the orthogonality of the Schur vectors, so if you wish to
+ compute the Schur vectors with `gsl_eigen_nonsymm_Z' you will
+ obtain the Schur vectors of the balanced matrix instead of the
+ original matrix. The relationship will be
+
+ T = Q^t D^(-1) A D Q
+
+ where Q is the matrix of Schur vectors for the balanced matrix, and
+ D is the balancing transformation. Then `gsl_eigen_nonsymm_Z' will
+ compute a matrix Z which satisfies
+
+ T = Z^(-1) A Z
+
+ with Z = D Q. Note that Z will not be orthogonal. For this reason,
+ balancing is not performed by default.
+
+ -- Function: int gsl_eigen_nonsymm (gsl_matrix * A, gsl_vector_complex
+ * EVAL, gsl_eigen_nonsymm_workspace * W)
+ This function computes the eigenvalues of the real nonsymmetric
+ matrix A and stores them in the vector EVAL. If T is desired, it
+ is stored in the upper portion of A on output. Otherwise, on
+ output, the diagonal of A will contain the 1-by-1 real eigenvalues
+ and 2-by-2 complex conjugate eigenvalue systems, and the rest of A
+ is destroyed. In rare cases, this function will fail to find all
+ eigenvalues. If this happens, an error code is returned and the
+ number of converged eigenvalues is stored in `w->n_evals'. The
+ converged eigenvalues are stored in the beginning of EVAL.
+
+ -- Function: int gsl_eigen_nonsymm_Z (gsl_matrix * A,
+ gsl_vector_complex * EVAL, gsl_matrix * Z,
+ gsl_eigen_nonsymm_workspace * W)
+ This function is identical to `gsl_eigen_nonsymm' except it also
+ computes the Schur vectors and stores them into Z.
+
+ -- Function: gsl_eigen_nonsymmv_workspace * gsl_eigen_nonsymmv_alloc
+ (const size_t N)
+ This function allocates a workspace for computing eigenvalues and
+ eigenvectors of N-by-N real nonsymmetric matrices. The size of the
+ workspace is O(5n).
+
+ -- Function: void gsl_eigen_nonsymmv_free
+ (gsl_eigen_nonsymmv_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_eigen_nonsymmv (gsl_matrix * A,
+ gsl_vector_complex * EVAL, gsl_matrix_complex * EVEC,
+ gsl_eigen_nonsymmv_workspace * W)
+ This function computes eigenvalues and right eigenvectors of the
+ N-by-N real nonsymmetric matrix A. It first calls
+ `gsl_eigen_nonsymm' to compute the eigenvalues, Schur form T, and
+ Schur vectors. Then it finds eigenvectors of T and backtransforms
+ them using the Schur vectors. The Schur vectors are destroyed in
+ the process, but can be saved by using `gsl_eigen_nonsymmv_Z'. The
+ computed eigenvectors are normalized to have Euclidean norm 1. On
+ output, the upper portion of A contains the Schur form T. If
+ `gsl_eigen_nonsymm' fails, no eigenvectors are computed, and an
+ error code is returned.
+
+ -- Function: int gsl_eigen_nonsymmv_Z (gsl_matrix * A,
+ gsl_vector_complex * EVAL, gsl_matrix_complex * EVEC,
+ gsl_matrix * Z, gsl_eigen_nonsymmv_workspace * W)
+ This function is identical to `gsl_eigen_nonsymmv' except it also
+ saves the Schur vectors into Z.
+
+
+File: gsl-ref.info, Node: Sorting Eigenvalues and Eigenvectors, Next: Eigenvalue and Eigenvector Examples, Prev: Real Nonsymmetric Matrices, Up: Eigensystems
+
+14.4 Sorting Eigenvalues and Eigenvectors
+=========================================
+
+ -- Function: int gsl_eigen_symmv_sort (gsl_vector * EVAL, gsl_matrix *
+ EVEC, gsl_eigen_sort_t SORT_TYPE)
+ This function simultaneously sorts the eigenvalues stored in the
+ vector EVAL and the corresponding real eigenvectors stored in the
+ columns of the matrix EVEC into ascending or descending order
+ according to the value of the parameter SORT_TYPE,
+
+ `GSL_EIGEN_SORT_VAL_ASC'
+ ascending order in numerical value
+
+ `GSL_EIGEN_SORT_VAL_DESC'
+ descending order in numerical value
+
+ `GSL_EIGEN_SORT_ABS_ASC'
+ ascending order in magnitude
+
+ `GSL_EIGEN_SORT_ABS_DESC'
+ descending order in magnitude
+
+
+ -- Function: int gsl_eigen_hermv_sort (gsl_vector * EVAL,
+ gsl_matrix_complex * EVEC, gsl_eigen_sort_t SORT_TYPE)
+ This function simultaneously sorts the eigenvalues stored in the
+ vector EVAL and the corresponding complex eigenvectors stored in
+ the columns of the matrix EVEC into ascending or descending order
+ according to the value of the parameter SORT_TYPE as shown above.
+
+ -- Function: int gsl_eigen_nonsymmv_sort (gsl_vector_complex * EVAL,
+ gsl_matrix_complex * EVEC, gsl_eigen_sort_t SORT_TYPE)
+ This function simultaneously sorts the eigenvalues stored in the
+ vector EVAL and the corresponding complex eigenvectors stored in
+ the columns of the matrix EVEC into ascending or descending order
+ according to the value of the parameter SORT_TYPE as shown above.
+ Only GSL_EIGEN_SORT_ABS_ASC and GSL_EIGEN_SORT_ABS_DESC are
+ supported due to the eigenvalues being complex.
+
+
+File: gsl-ref.info, Node: Eigenvalue and Eigenvector Examples, Next: Eigenvalue and Eigenvector References, Prev: Sorting Eigenvalues and Eigenvectors, Up: Eigensystems
+
+14.5 Examples
+=============
+
+The following program computes the eigenvalues and eigenvectors of the
+4-th order Hilbert matrix, H(i,j) = 1/(i + j + 1).
+
+ #include <stdio.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_eigen.h>
+
+ int
+ main (void)
+ {
+ double data[] = { 1.0 , 1/2.0, 1/3.0, 1/4.0,
+ 1/2.0, 1/3.0, 1/4.0, 1/5.0,
+ 1/3.0, 1/4.0, 1/5.0, 1/6.0,
+ 1/4.0, 1/5.0, 1/6.0, 1/7.0 };
+
+ gsl_matrix_view m
+ = gsl_matrix_view_array (data, 4, 4);
+
+ gsl_vector *eval = gsl_vector_alloc (4);
+ gsl_matrix *evec = gsl_matrix_alloc (4, 4);
+
+ gsl_eigen_symmv_workspace * w =
+ gsl_eigen_symmv_alloc (4);
+
+ gsl_eigen_symmv (&m.matrix, eval, evec, w);
+
+ gsl_eigen_symmv_free (w);
+
+ gsl_eigen_symmv_sort (eval, evec,
+ GSL_EIGEN_SORT_ABS_ASC);
+
+ {
+ int i;
+
+ for (i = 0; i < 4; i++)
+ {
+ double eval_i
+ = gsl_vector_get (eval, i);
+ gsl_vector_view evec_i
+ = gsl_matrix_column (evec, i);
+
+ printf ("eigenvalue = %g\n", eval_i);
+ printf ("eigenvector = \n");
+ gsl_vector_fprintf (stdout,
+ &evec_i.vector, "%g");
+ }
+ }
+
+ gsl_vector_free (eval);
+ gsl_matrix_free (evec);
+
+ return 0;
+ }
+
+Here is the beginning of the output from the program,
+
+ $ ./a.out
+ eigenvalue = 9.67023e-05
+ eigenvector =
+ -0.0291933
+ 0.328712
+ -0.791411
+ 0.514553
+ ...
+
+This can be compared with the corresponding output from GNU OCTAVE,
+
+ octave> [v,d] = eig(hilb(4));
+ octave> diag(d)
+ ans =
+
+ 9.6702e-05
+ 6.7383e-03
+ 1.6914e-01
+ 1.5002e+00
+
+ octave> v
+ v =
+
+ 0.029193 0.179186 -0.582076 0.792608
+ -0.328712 -0.741918 0.370502 0.451923
+ 0.791411 0.100228 0.509579 0.322416
+ -0.514553 0.638283 0.514048 0.252161
+
+Note that the eigenvectors can differ by a change of sign, since the
+sign of an eigenvector is arbitrary.
+
+ The following program illustrates the use of the nonsymmetric
+eigensolver, by computing the eigenvalues and eigenvectors of the
+Vandermonde matrix V(x;i,j) = x_i^n - j with x = (-1,-2,3,4).
+
+ #include <stdio.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_eigen.h>
+
+ int
+ main (void)
+ {
+ double data[] = { -1.0, 1.0, -1.0, 1.0,
+ -8.0, 4.0, -2.0, 1.0,
+ 27.0, 9.0, 3.0, 1.0,
+ 64.0, 16.0, 4.0, 1.0 };
+
+ gsl_matrix_view m
+ = gsl_matrix_view_array (data, 4, 4);
+
+ gsl_vector_complex *eval = gsl_vector_complex_alloc (4);
+ gsl_matrix_complex *evec = gsl_matrix_complex_alloc (4, 4);
+
+ gsl_eigen_nonsymmv_workspace * w =
+ gsl_eigen_nonsymmv_alloc (4);
+
+ gsl_eigen_nonsymmv (&m.matrix, eval, evec, w);
+
+ gsl_eigen_nonsymmv_free (w);
+
+ gsl_eigen_nonsymmv_sort (eval, evec,
+ GSL_EIGEN_SORT_ABS_DESC);
+
+ {
+ int i, j;
+
+ for (i = 0; i < 4; i++)
+ {
+ gsl_complex eval_i
+ = gsl_vector_complex_get (eval, i);
+ gsl_vector_complex_view evec_i
+ = gsl_matrix_complex_column (evec, i);
+
+ printf ("eigenvalue = %g + %gi\n",
+ GSL_REAL(eval_i), GSL_IMAG(eval_i));
+ printf ("eigenvector = \n");
+ for (j = 0; j < 4; ++j)
+ {
+ gsl_complex z = gsl_vector_complex_get(&evec_i.vector, j);
+ printf("%g + %gi\n", GSL_REAL(z), GSL_IMAG(z));
+ }
+ }
+ }
+
+ gsl_vector_complex_free(eval);
+ gsl_matrix_complex_free(evec);
+
+ return 0;
+ }
+
+Here is the beginning of the output from the program,
+
+ $ ./a.out
+ eigenvalue = -6.41391 + 0i
+ eigenvector =
+ -0.0998822 + 0i
+ -0.111251 + 0i
+ 0.292501 + 0i
+ 0.944505 + 0i
+ eigenvalue = 5.54555 + 3.08545i
+ eigenvector =
+ -0.043487 + -0.0076308i
+ 0.0642377 + -0.142127i
+ -0.515253 + 0.0405118i
+ -0.840592 + -0.00148565i
+ ...
+
+This can be compared with the corresponding output from GNU OCTAVE,
+
+ octave> [v,d] = eig(vander([-1 -2 3 4]));
+ octave> diag(d)
+ ans =
+
+ -6.4139 + 0.0000i
+ 5.5456 + 3.0854i
+ 5.5456 - 3.0854i
+ 2.3228 + 0.0000i
+
+ octave> v
+ v =
+
+ Columns 1 through 3:
+
+ -0.09988 + 0.00000i -0.04350 - 0.00755i -0.04350 + 0.00755i
+ -0.11125 + 0.00000i 0.06399 - 0.14224i 0.06399 + 0.14224i
+ 0.29250 + 0.00000i -0.51518 + 0.04142i -0.51518 - 0.04142i
+ 0.94451 + 0.00000i -0.84059 + 0.00000i -0.84059 - 0.00000i
+
+ Column 4:
+
+ -0.14493 + 0.00000i
+ 0.35660 + 0.00000i
+ 0.91937 + 0.00000i
+ 0.08118 + 0.00000i
+ Note that the eigenvectors corresponding to the eigenvalue 5.54555 +
+3.08545i are slightly different. This is because they differ by the
+multiplicative constant 0.9999984 + 0.0017674i which has magnitude 1.
+
+
+File: gsl-ref.info, Node: Eigenvalue and Eigenvector References, Prev: Eigenvalue and Eigenvector Examples, Up: Eigensystems
+
+14.6 References and Further Reading
+===================================
+
+Further information on the algorithms described in this section can be
+found in the following book,
+
+ G. H. Golub, C. F. Van Loan, `Matrix Computations' (3rd Ed, 1996),
+ Johns Hopkins University Press, ISBN 0-8018-5414-8.
+
+The LAPACK library is described in,
+
+ `LAPACK Users' Guide' (Third Edition, 1999), Published by SIAM,
+ ISBN 0-89871-447-8.
+
+ `http://www.netlib.org/lapack'
+
+The LAPACK source code can be found at the website above along with an
+online copy of the users guide.
+
+
+File: gsl-ref.info, Node: Fast Fourier Transforms, Next: Numerical Integration, Prev: Eigensystems, Up: Top
+
+15 Fast Fourier Transforms (FFTs)
+*********************************
+
+This chapter describes functions for performing Fast Fourier Transforms
+(FFTs). The library includes radix-2 routines (for lengths which are a
+power of two) and mixed-radix routines (which work for any length). For
+efficiency there are separate versions of the routines for real data and
+for complex data. The mixed-radix routines are a reimplementation of
+the FFTPACK library of Paul Swarztrauber. Fortran code for FFTPACK is
+available on Netlib (FFTPACK also includes some routines for sine and
+cosine transforms but these are currently not available in GSL). For
+details and derivations of the underlying algorithms consult the
+document `GSL FFT Algorithms' (*note FFT References and Further
+Reading::)
+
+* Menu:
+
+* Mathematical Definitions::
+* Overview of complex data FFTs::
+* Radix-2 FFT routines for complex data::
+* Mixed-radix FFT routines for complex data::
+* Overview of real data FFTs::
+* Radix-2 FFT routines for real data::
+* Mixed-radix FFT routines for real data::
+* FFT References and Further Reading::
+
+
+File: gsl-ref.info, Node: Mathematical Definitions, Next: Overview of complex data FFTs, Up: Fast Fourier Transforms
+
+15.1 Mathematical Definitions
+=============================
+
+Fast Fourier Transforms are efficient algorithms for calculating the
+discrete fourier transform (DFT),
+
+ x_j = \sum_{k=0}^{N-1} z_k \exp(-2\pi i j k / N)
+
+ The DFT usually arises as an approximation to the continuous fourier
+transform when functions are sampled at discrete intervals in space or
+time. The naive evaluation of the discrete fourier transform is a
+matrix-vector multiplication W\vec{z}. A general matrix-vector
+multiplication takes O(N^2) operations for N data-points. Fast fourier
+transform algorithms use a divide-and-conquer strategy to factorize the
+matrix W into smaller sub-matrices, corresponding to the integer
+factors of the length N. If N can be factorized into a product of
+integers f_1 f_2 ... f_n then the DFT can be computed in O(N \sum f_i)
+operations. For a radix-2 FFT this gives an operation count of O(N
+\log_2 N).
+
+ All the FFT functions offer three types of transform: forwards,
+inverse and backwards, based on the same mathematical definitions. The
+definition of the "forward fourier transform", x = FFT(z), is,
+
+ x_j = \sum_{k=0}^{N-1} z_k \exp(-2\pi i j k / N)
+
+and the definition of the "inverse fourier transform", x = IFFT(z), is,
+
+ z_j = {1 \over N} \sum_{k=0}^{N-1} x_k \exp(2\pi i j k / N).
+
+The factor of 1/N makes this a true inverse. For example, a call to
+`gsl_fft_complex_forward' followed by a call to
+`gsl_fft_complex_inverse' should return the original data (within
+numerical errors).
+
+ In general there are two possible choices for the sign of the
+exponential in the transform/ inverse-transform pair. GSL follows the
+same convention as FFTPACK, using a negative exponential for the forward
+transform. The advantage of this convention is that the inverse
+transform recreates the original function with simple fourier
+synthesis. Numerical Recipes uses the opposite convention, a positive
+exponential in the forward transform.
+
+ The "backwards FFT" is simply our terminology for an unscaled
+version of the inverse FFT,
+
+ z^{backwards}_j = \sum_{k=0}^{N-1} x_k \exp(2\pi i j k / N).
+
+When the overall scale of the result is unimportant it is often
+convenient to use the backwards FFT instead of the inverse to save
+unnecessary divisions.
+
+
+File: gsl-ref.info, Node: Overview of complex data FFTs, Next: Radix-2 FFT routines for complex data, Prev: Mathematical Definitions, Up: Fast Fourier Transforms
+
+15.2 Overview of complex data FFTs
+==================================
+
+The inputs and outputs for the complex FFT routines are "packed arrays"
+of floating point numbers. In a packed array the real and imaginary
+parts of each complex number are placed in alternate neighboring
+elements. For example, the following definition of a packed array of
+length 6,
+
+ double x[3*2];
+ gsl_complex_packed_array data = x;
+
+can be used to hold an array of three complex numbers, `z[3]', in the
+following way,
+
+ data[0] = Re(z[0])
+ data[1] = Im(z[0])
+ data[2] = Re(z[1])
+ data[3] = Im(z[1])
+ data[4] = Re(z[2])
+ data[5] = Im(z[2])
+
+The array indices for the data have the same ordering as those in the
+definition of the DFT--i.e. there are no index transformations or
+permutations of the data.
+
+ A "stride" parameter allows the user to perform transforms on the
+elements `z[stride*i]' instead of `z[i]'. A stride greater than 1 can
+be used to take an in-place FFT of the column of a matrix. A stride of
+1 accesses the array without any additional spacing between elements.
+
+ To perform an FFT on a vector argument, such as `gsl_vector_complex
+* v', use the following definitions (or their equivalents) when calling
+the functions described in this chapter:
+
+ gsl_complex_packed_array data = v->data;
+ size_t stride = v->stride;
+ size_t n = v->size;
+
+ For physical applications it is important to remember that the index
+appearing in the DFT does not correspond directly to a physical
+frequency. If the time-step of the DFT is \Delta then the
+frequency-domain includes both positive and negative frequencies,
+ranging from -1/(2\Delta) through 0 to +1/(2\Delta). The positive
+frequencies are stored from the beginning of the array up to the
+middle, and the negative frequencies are stored backwards from the end
+of the array.
+
+ Here is a table which shows the layout of the array DATA, and the
+correspondence between the time-domain data z, and the frequency-domain
+data x.
+
+ index z x = FFT(z)
+
+ 0 z(t = 0) x(f = 0)
+ 1 z(t = 1) x(f = 1/(N Delta))
+ 2 z(t = 2) x(f = 2/(N Delta))
+ . ........ ..................
+ N/2 z(t = N/2) x(f = +1/(2 Delta),
+ -1/(2 Delta))
+ . ........ ..................
+ N-3 z(t = N-3) x(f = -3/(N Delta))
+ N-2 z(t = N-2) x(f = -2/(N Delta))
+ N-1 z(t = N-1) x(f = -1/(N Delta))
+
+When N is even the location N/2 contains the most positive and negative
+frequencies (+1/(2 \Delta), -1/(2 \Delta)) which are equivalent. If N
+is odd then general structure of the table above still applies, but N/2
+does not appear.
+
+
+File: gsl-ref.info, Node: Radix-2 FFT routines for complex data, Next: Mixed-radix FFT routines for complex data, Prev: Overview of complex data FFTs, Up: Fast Fourier Transforms
+
+15.3 Radix-2 FFT routines for complex data
+==========================================
+
+The radix-2 algorithms described in this section are simple and compact,
+although not necessarily the most efficient. They use the Cooley-Tukey
+algorithm to compute in-place complex FFTs for lengths which are a power
+of 2--no additional storage is required. The corresponding
+self-sorting mixed-radix routines offer better performance at the
+expense of requiring additional working space.
+
+ All the functions described in this section are declared in the
+header file `gsl_fft_complex.h'.
+
+ -- Function: int gsl_fft_complex_radix2_forward
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N)
+ -- Function: int gsl_fft_complex_radix2_transform
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N,
+ gsl_fft_direction SIGN)
+ -- Function: int gsl_fft_complex_radix2_backward
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N)
+ -- Function: int gsl_fft_complex_radix2_inverse
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N)
+ These functions compute forward, backward and inverse FFTs of
+ length N with stride STRIDE, on the packed complex array DATA
+ using an in-place radix-2 decimation-in-time algorithm. The
+ length of the transform N is restricted to powers of two. For the
+ `transform' version of the function the SIGN argument can be
+ either `forward' (-1) or `backward' (+1).
+
+ The functions return a value of `GSL_SUCCESS' if no errors were
+ detected, or `GSL_EDOM' if the length of the data N is not a power
+ of two.
+
+ -- Function: int gsl_fft_complex_radix2_dif_forward
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N)
+ -- Function: int gsl_fft_complex_radix2_dif_transform
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N,
+ gsl_fft_direction SIGN)
+ -- Function: int gsl_fft_complex_radix2_dif_backward
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N)
+ -- Function: int gsl_fft_complex_radix2_dif_inverse
+ (gsl_complex_packed_array DATA, size_t STRIDE, size_t N)
+ These are decimation-in-frequency versions of the radix-2 FFT
+ functions.
+
+
+ Here is an example program which computes the FFT of a short pulse
+in a sample of length 128. To make the resulting fourier transform
+real the pulse is defined for equal positive and negative times (-10
+... 10), where the negative times wrap around the end of the array.
+
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_fft_complex.h>
+
+ #define REAL(z,i) ((z)[2*(i)])
+ #define IMAG(z,i) ((z)[2*(i)+1])
+
+ int
+ main (void)
+ {
+ int i; double data[2*128];
+
+ for (i = 0; i < 128; i++)
+ {
+ REAL(data,i) = 0.0; IMAG(data,i) = 0.0;
+ }
+
+ REAL(data,0) = 1.0;
+
+ for (i = 1; i <= 10; i++)
+ {
+ REAL(data,i) = REAL(data,128-i) = 1.0;
+ }
+
+ for (i = 0; i < 128; i++)
+ {
+ printf ("%d %e %e\n", i,
+ REAL(data,i), IMAG(data,i));
+ }
+ printf ("\n");
+
+ gsl_fft_complex_radix2_forward (data, 1, 128);
+
+ for (i = 0; i < 128; i++)
+ {
+ printf ("%d %e %e\n", i,
+ REAL(data,i)/sqrt(128),
+ IMAG(data,i)/sqrt(128));
+ }
+
+ return 0;
+ }
+
+Note that we have assumed that the program is using the default error
+handler (which calls `abort' for any errors). If you are not using a
+safe error handler you would need to check the return status of
+`gsl_fft_complex_radix2_forward'.
+
+ The transformed data is rescaled by 1/\sqrt N so that it fits on the
+same plot as the input. Only the real part is shown, by the choice of
+the input data the imaginary part is zero. Allowing for the
+wrap-around of negative times at t=128, and working in units of k/N,
+the DFT approximates the continuum fourier transform, giving a
+modulated sine function.
+
+
+File: gsl-ref.info, Node: Mixed-radix FFT routines for complex data, Next: Overview of real data FFTs, Prev: Radix-2 FFT routines for complex data, Up: Fast Fourier Transforms
+
+15.4 Mixed-radix FFT routines for complex data
+==============================================
+
+This section describes mixed-radix FFT algorithms for complex data. The
+mixed-radix functions work for FFTs of any length. They are a
+reimplementation of Paul Swarztrauber's Fortran FFTPACK library. The
+theory is explained in the review article `Self-sorting Mixed-radix
+FFTs' by Clive Temperton. The routines here use the same indexing
+scheme and basic algorithms as FFTPACK.
+
+ The mixed-radix algorithm is based on sub-transform modules--highly
+optimized small length FFTs which are combined to create larger FFTs.
+There are efficient modules for factors of 2, 3, 4, 5, 6 and 7. The
+modules for the composite factors of 4 and 6 are faster than combining
+the modules for 2*2 and 2*3.
+
+ For factors which are not implemented as modules there is a
+fall-back to a general length-n module which uses Singleton's method for
+efficiently computing a DFT. This module is O(n^2), and slower than a
+dedicated module would be but works for any length n. Of course,
+lengths which use the general length-n module will still be factorized
+as much as possible. For example, a length of 143 will be factorized
+into 11*13. Large prime factors are the worst case scenario, e.g. as
+found in n=2*3*99991, and should be avoided because their O(n^2)
+scaling will dominate the run-time (consult the document `GSL FFT
+Algorithms' included in the GSL distribution if you encounter this
+problem).
+
+ The mixed-radix initialization function
+`gsl_fft_complex_wavetable_alloc' returns the list of factors chosen by
+the library for a given length N. It can be used to check how well the
+length has been factorized, and estimate the run-time. To a first
+approximation the run-time scales as N \sum f_i, where the f_i are the
+factors of N. For programs under user control you may wish to issue a
+warning that the transform will be slow when the length is poorly
+factorized. If you frequently encounter data lengths which cannot be
+factorized using the existing small-prime modules consult `GSL FFT
+Algorithms' for details on adding support for other factors.
+
+ All the functions described in this section are declared in the
+header file `gsl_fft_complex.h'.
+
+ -- Function: gsl_fft_complex_wavetable *
+gsl_fft_complex_wavetable_alloc (size_t N)
+ This function prepares a trigonometric lookup table for a complex
+ FFT of length N. The function returns a pointer to the newly
+ allocated `gsl_fft_complex_wavetable' if no errors were detected,
+ and a null pointer in the case of error. The length N is
+ factorized into a product of subtransforms, and the factors and
+ their trigonometric coefficients are stored in the wavetable. The
+ trigonometric coefficients are computed using direct calls to
+ `sin' and `cos', for accuracy. Recursion relations could be used
+ to compute the lookup table faster, but if an application performs
+ many FFTs of the same length then this computation is a one-off
+ overhead which does not affect the final throughput.
+
+ The wavetable structure can be used repeatedly for any transform
+ of the same length. The table is not modified by calls to any of
+ the other FFT functions. The same wavetable can be used for both
+ forward and backward (or inverse) transforms of a given length.
+
+ -- Function: void gsl_fft_complex_wavetable_free
+ (gsl_fft_complex_wavetable * WAVETABLE)
+ This function frees the memory associated with the wavetable
+ WAVETABLE. The wavetable can be freed if no further FFTs of the
+ same length will be needed.
+
+These functions operate on a `gsl_fft_complex_wavetable' structure
+which contains internal parameters for the FFT. It is not necessary to
+set any of the components directly but it can sometimes be useful to
+examine them. For example, the chosen factorization of the FFT length
+is given and can be used to provide an estimate of the run-time or
+numerical error. The wavetable structure is declared in the header file
+`gsl_fft_complex.h'.
+
+ -- Data Type: gsl_fft_complex_wavetable
+ This is a structure that holds the factorization and trigonometric
+ lookup tables for the mixed radix fft algorithm. It has the
+ following components:
+
+ `size_t n'
+ This is the number of complex data points
+
+ `size_t nf'
+ This is the number of factors that the length `n' was
+ decomposed into.
+
+ `size_t factor[64]'
+ This is the array of factors. Only the first `nf' elements
+ are used.
+
+ `gsl_complex * trig'
+ This is a pointer to a preallocated trigonometric lookup
+ table of `n' complex elements.
+
+ `gsl_complex * twiddle[64]'
+ This is an array of pointers into `trig', giving the twiddle
+ factors for each pass.
+
+The mixed radix algorithms require additional working space to hold the
+intermediate steps of the transform.
+
+ -- Function: gsl_fft_complex_workspace *
+gsl_fft_complex_workspace_alloc (size_t N)
+ This function allocates a workspace for a complex transform of
+ length N.
+
+ -- Function: void gsl_fft_complex_workspace_free
+ (gsl_fft_complex_workspace * WORKSPACE)
+ This function frees the memory associated with the workspace
+ WORKSPACE. The workspace can be freed if no further FFTs of the
+ same length will be needed.
+
+The following functions compute the transform,
+
+ -- Function: int gsl_fft_complex_forward (gsl_complex_packed_array
+ DATA, size_t STRIDE, size_t N, const
+ gsl_fft_complex_wavetable * WAVETABLE,
+ gsl_fft_complex_workspace * WORK)
+ -- Function: int gsl_fft_complex_transform (gsl_complex_packed_array
+ DATA, size_t STRIDE, size_t N, const
+ gsl_fft_complex_wavetable * WAVETABLE,
+ gsl_fft_complex_workspace * WORK, gsl_fft_direction SIGN)
+ -- Function: int gsl_fft_complex_backward (gsl_complex_packed_array
+ DATA, size_t STRIDE, size_t N, const
+ gsl_fft_complex_wavetable * WAVETABLE,
+ gsl_fft_complex_workspace * WORK)
+ -- Function: int gsl_fft_complex_inverse (gsl_complex_packed_array
+ DATA, size_t STRIDE, size_t N, const
+ gsl_fft_complex_wavetable * WAVETABLE,
+ gsl_fft_complex_workspace * WORK)
+ These functions compute forward, backward and inverse FFTs of
+ length N with stride STRIDE, on the packed complex array DATA,
+ using a mixed radix decimation-in-frequency algorithm. There is
+ no restriction on the length N. Efficient modules are provided
+ for subtransforms of length 2, 3, 4, 5, 6 and 7. Any remaining
+ factors are computed with a slow, O(n^2), general-n module. The
+ caller must supply a WAVETABLE containing the trigonometric lookup
+ tables and a workspace WORK. For the `transform' version of the
+ function the SIGN argument can be either `forward' (-1) or
+ `backward' (+1).
+
+ The functions return a value of `0' if no errors were detected. The
+ following `gsl_errno' conditions are defined for these functions:
+
+ `GSL_EDOM'
+ The length of the data N is not a positive integer (i.e. N is
+ zero).
+
+ `GSL_EINVAL'
+ The length of the data N and the length used to compute the
+ given WAVETABLE do not match.
+
+ Here is an example program which computes the FFT of a short pulse
+in a sample of length 630 (=2*3*3*5*7) using the mixed-radix algorithm.
+
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_fft_complex.h>
+
+ #define REAL(z,i) ((z)[2*(i)])
+ #define IMAG(z,i) ((z)[2*(i)+1])
+
+ int
+ main (void)
+ {
+ int i;
+ const int n = 630;
+ double data[2*n];
+
+ gsl_fft_complex_wavetable * wavetable;
+ gsl_fft_complex_workspace * workspace;
+
+ for (i = 0; i < n; i++)
+ {
+ REAL(data,i) = 0.0;
+ IMAG(data,i) = 0.0;
+ }
+
+ data[0] = 1.0;
+
+ for (i = 1; i <= 10; i++)
+ {
+ REAL(data,i) = REAL(data,n-i) = 1.0;
+ }
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e %e\n", i, REAL(data,i),
+ IMAG(data,i));
+ }
+ printf ("\n");
+
+ wavetable = gsl_fft_complex_wavetable_alloc (n);
+ workspace = gsl_fft_complex_workspace_alloc (n);
+
+ for (i = 0; i < wavetable->nf; i++)
+ {
+ printf ("# factor %d: %d\n", i,
+ wavetable->factor[i]);
+ }
+
+ gsl_fft_complex_forward (data, 1, n,
+ wavetable, workspace);
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e %e\n", i, REAL(data,i),
+ IMAG(data,i));
+ }
+
+ gsl_fft_complex_wavetable_free (wavetable);
+ gsl_fft_complex_workspace_free (workspace);
+ return 0;
+ }
+
+Note that we have assumed that the program is using the default `gsl'
+error handler (which calls `abort' for any errors). If you are not
+using a safe error handler you would need to check the return status of
+all the `gsl' routines.
+
+
+File: gsl-ref.info, Node: Overview of real data FFTs, Next: Radix-2 FFT routines for real data, Prev: Mixed-radix FFT routines for complex data, Up: Fast Fourier Transforms
+
+15.5 Overview of real data FFTs
+===============================
+
+The functions for real data are similar to those for complex data.
+However, there is an important difference between forward and inverse
+transforms. The fourier transform of a real sequence is not real. It
+is a complex sequence with a special symmetry:
+
+ z_k = z_{N-k}^*
+
+A sequence with this symmetry is called "conjugate-complex" or
+"half-complex". This different structure requires different storage
+layouts for the forward transform (from real to half-complex) and
+inverse transform (from half-complex back to real). As a consequence
+the routines are divided into two sets: functions in `gsl_fft_real'
+which operate on real sequences and functions in `gsl_fft_halfcomplex'
+which operate on half-complex sequences.
+
+ Functions in `gsl_fft_real' compute the frequency coefficients of a
+real sequence. The half-complex coefficients c of a real sequence x
+are given by fourier analysis,
+
+ c_k = \sum_{j=0}^{N-1} x_j \exp(-2 \pi i j k /N)
+
+Functions in `gsl_fft_halfcomplex' compute inverse or backwards
+transforms. They reconstruct real sequences by fourier synthesis from
+their half-complex frequency coefficients, c,
+
+ x_j = {1 \over N} \sum_{k=0}^{N-1} c_k \exp(2 \pi i j k /N)
+
+The symmetry of the half-complex sequence implies that only half of the
+complex numbers in the output need to be stored. The remaining half can
+be reconstructed using the half-complex symmetry condition. This works
+for all lengths, even and odd--when the length is even the middle value
+where k=N/2 is also real. Thus only N real numbers are required to
+store the half-complex sequence, and the transform of a real sequence
+can be stored in the same size array as the original data.
+
+ The precise storage arrangements depend on the algorithm, and are
+different for radix-2 and mixed-radix routines. The radix-2 function
+operates in-place, which constrains the locations where each element can
+be stored. The restriction forces real and imaginary parts to be stored
+far apart. The mixed-radix algorithm does not have this restriction,
+and it stores the real and imaginary parts of a given term in
+neighboring locations (which is desirable for better locality of memory
+accesses).
+
+
+File: gsl-ref.info, Node: Radix-2 FFT routines for real data, Next: Mixed-radix FFT routines for real data, Prev: Overview of real data FFTs, Up: Fast Fourier Transforms
+
+15.6 Radix-2 FFT routines for real data
+=======================================
+
+This section describes radix-2 FFT algorithms for real data. They use
+the Cooley-Tukey algorithm to compute in-place FFTs for lengths which
+are a power of 2.
+
+ The radix-2 FFT functions for real data are declared in the header
+files `gsl_fft_real.h'
+
+ -- Function: int gsl_fft_real_radix2_transform (double DATA[], size_t
+ STRIDE, size_t N)
+ This function computes an in-place radix-2 FFT of length N and
+ stride STRIDE on the real array DATA. The output is a
+ half-complex sequence, which is stored in-place. The arrangement
+ of the half-complex terms uses the following scheme: for k < N/2
+ the real part of the k-th term is stored in location k, and the
+ corresponding imaginary part is stored in location N-k. Terms
+ with k > N/2 can be reconstructed using the symmetry z_k =
+ z^*_{N-k}. The terms for k=0 and k=N/2 are both purely real, and
+ count as a special case. Their real parts are stored in locations
+ 0 and N/2 respectively, while their imaginary parts which are zero
+ are not stored.
+
+ The following table shows the correspondence between the output
+ DATA and the equivalent results obtained by considering the input
+ data as a complex sequence with zero imaginary part,
+
+ complex[0].real = data[0]
+ complex[0].imag = 0
+ complex[1].real = data[1]
+ complex[1].imag = data[N-1]
+ ............... ................
+ complex[k].real = data[k]
+ complex[k].imag = data[N-k]
+ ............... ................
+ complex[N/2].real = data[N/2]
+ complex[N/2].imag = 0
+ ............... ................
+ complex[k'].real = data[k] k' = N - k
+ complex[k'].imag = -data[N-k]
+ ............... ................
+ complex[N-1].real = data[1]
+ complex[N-1].imag = -data[N-1]
+ Note that the output data can be converted into the full complex
+ sequence using the function `gsl_fft_halfcomplex_unpack' described
+ in the next section.
+
+ The radix-2 FFT functions for halfcomplex data are declared in the
+header file `gsl_fft_halfcomplex.h'.
+
+ -- Function: int gsl_fft_halfcomplex_radix2_inverse (double DATA[],
+ size_t STRIDE, size_t N)
+ -- Function: int gsl_fft_halfcomplex_radix2_backward (double DATA[],
+ size_t STRIDE, size_t N)
+ These functions compute the inverse or backwards in-place radix-2
+ FFT of length N and stride STRIDE on the half-complex sequence
+ DATA stored according the output scheme used by
+ `gsl_fft_real_radix2'. The result is a real array stored in
+ natural order.
+
+
+
+File: gsl-ref.info, Node: Mixed-radix FFT routines for real data, Next: FFT References and Further Reading, Prev: Radix-2 FFT routines for real data, Up: Fast Fourier Transforms
+
+15.7 Mixed-radix FFT routines for real data
+===========================================
+
+This section describes mixed-radix FFT algorithms for real data. The
+mixed-radix functions work for FFTs of any length. They are a
+reimplementation of the real-FFT routines in the Fortran FFTPACK library
+by Paul Swarztrauber. The theory behind the algorithm is explained in
+the article `Fast Mixed-Radix Real Fourier Transforms' by Clive
+Temperton. The routines here use the same indexing scheme and basic
+algorithms as FFTPACK.
+
+ The functions use the FFTPACK storage convention for half-complex
+sequences. In this convention the half-complex transform of a real
+sequence is stored with frequencies in increasing order, starting at
+zero, with the real and imaginary parts of each frequency in neighboring
+locations. When a value is known to be real the imaginary part is not
+stored. The imaginary part of the zero-frequency component is never
+stored. It is known to be zero (since the zero frequency component is
+simply the sum of the input data (all real)). For a sequence of even
+length the imaginary part of the frequency n/2 is not stored either,
+since the symmetry z_k = z_{N-k}^* implies that this is purely real too.
+
+ The storage scheme is best shown by some examples. The table below
+shows the output for an odd-length sequence, n=5. The two columns give
+the correspondence between the 5 values in the half-complex sequence
+returned by `gsl_fft_real_transform', HALFCOMPLEX[] and the values
+COMPLEX[] that would be returned if the same real input sequence were
+passed to `gsl_fft_complex_backward' as a complex sequence (with
+imaginary parts set to `0'),
+
+ complex[0].real = halfcomplex[0]
+ complex[0].imag = 0
+ complex[1].real = halfcomplex[1]
+ complex[1].imag = halfcomplex[2]
+ complex[2].real = halfcomplex[3]
+ complex[2].imag = halfcomplex[4]
+ complex[3].real = halfcomplex[3]
+ complex[3].imag = -halfcomplex[4]
+ complex[4].real = halfcomplex[1]
+ complex[4].imag = -halfcomplex[2]
+
+The upper elements of the COMPLEX array, `complex[3]' and `complex[4]'
+are filled in using the symmetry condition. The imaginary part of the
+zero-frequency term `complex[0].imag' is known to be zero by the
+symmetry.
+
+ The next table shows the output for an even-length sequence, n=6 In
+the even case there are two values which are purely real,
+
+ complex[0].real = halfcomplex[0]
+ complex[0].imag = 0
+ complex[1].real = halfcomplex[1]
+ complex[1].imag = halfcomplex[2]
+ complex[2].real = halfcomplex[3]
+ complex[2].imag = halfcomplex[4]
+ complex[3].real = halfcomplex[5]
+ complex[3].imag = 0
+ complex[4].real = halfcomplex[3]
+ complex[4].imag = -halfcomplex[4]
+ complex[5].real = halfcomplex[1]
+ complex[5].imag = -halfcomplex[2]
+
+The upper elements of the COMPLEX array, `complex[4]' and `complex[5]'
+are filled in using the symmetry condition. Both `complex[0].imag' and
+`complex[3].imag' are known to be zero.
+
+ All these functions are declared in the header files
+`gsl_fft_real.h' and `gsl_fft_halfcomplex.h'.
+
+ -- Function: gsl_fft_real_wavetable * gsl_fft_real_wavetable_alloc
+ (size_t N)
+ -- Function: gsl_fft_halfcomplex_wavetable *
+gsl_fft_halfcomplex_wavetable_alloc (size_t N)
+ These functions prepare trigonometric lookup tables for an FFT of
+ size n real elements. The functions return a pointer to the newly
+ allocated struct if no errors were detected, and a null pointer in
+ the case of error. The length N is factorized into a product of
+ subtransforms, and the factors and their trigonometric
+ coefficients are stored in the wavetable. The trigonometric
+ coefficients are computed using direct calls to `sin' and `cos',
+ for accuracy. Recursion relations could be used to compute the
+ lookup table faster, but if an application performs many FFTs of
+ the same length then computing the wavetable is a one-off overhead
+ which does not affect the final throughput.
+
+ The wavetable structure can be used repeatedly for any transform
+ of the same length. The table is not modified by calls to any of
+ the other FFT functions. The appropriate type of wavetable must
+ be used for forward real or inverse half-complex transforms.
+
+ -- Function: void gsl_fft_real_wavetable_free (gsl_fft_real_wavetable
+ * WAVETABLE)
+ -- Function: void gsl_fft_halfcomplex_wavetable_free
+ (gsl_fft_halfcomplex_wavetable * WAVETABLE)
+ These functions free the memory associated with the wavetable
+ WAVETABLE. The wavetable can be freed if no further FFTs of the
+ same length will be needed.
+
+The mixed radix algorithms require additional working space to hold the
+intermediate steps of the transform,
+
+ -- Function: gsl_fft_real_workspace * gsl_fft_real_workspace_alloc
+ (size_t N)
+ This function allocates a workspace for a real transform of length
+ N. The same workspace can be used for both forward real and
+ inverse halfcomplex transforms.
+
+ -- Function: void gsl_fft_real_workspace_free (gsl_fft_real_workspace
+ * WORKSPACE)
+ This function frees the memory associated with the workspace
+ WORKSPACE. The workspace can be freed if no further FFTs of the
+ same length will be needed.
+
+The following functions compute the transforms of real and half-complex
+data,
+
+ -- Function: int gsl_fft_real_transform (double DATA[], size_t STRIDE,
+ size_t N, const gsl_fft_real_wavetable * WAVETABLE,
+ gsl_fft_real_workspace * WORK)
+ -- Function: int gsl_fft_halfcomplex_transform (double DATA[], size_t
+ STRIDE, size_t N, const gsl_fft_halfcomplex_wavetable *
+ WAVETABLE, gsl_fft_real_workspace * WORK)
+ These functions compute the FFT of DATA, a real or half-complex
+ array of length N, using a mixed radix decimation-in-frequency
+ algorithm. For `gsl_fft_real_transform' DATA is an array of
+ time-ordered real data. For `gsl_fft_halfcomplex_transform' DATA
+ contains fourier coefficients in the half-complex ordering
+ described above. There is no restriction on the length N.
+ Efficient modules are provided for subtransforms of length 2, 3, 4
+ and 5. Any remaining factors are computed with a slow, O(n^2),
+ general-n module. The caller must supply a WAVETABLE containing
+ trigonometric lookup tables and a workspace WORK.
+
+ -- Function: int gsl_fft_real_unpack (const double REAL_COEFFICIENT[],
+ gsl_complex_packed_array COMPLEX_COEFFICIENT, size_t STRIDE,
+ size_t N)
+ This function converts a single real array, REAL_COEFFICIENT into
+ an equivalent complex array, COMPLEX_COEFFICIENT, (with imaginary
+ part set to zero), suitable for `gsl_fft_complex' routines. The
+ algorithm for the conversion is simply,
+
+ for (i = 0; i < n; i++)
+ {
+ complex_coefficient[i].real
+ = real_coefficient[i];
+ complex_coefficient[i].imag
+ = 0.0;
+ }
+
+ -- Function: int gsl_fft_halfcomplex_unpack (const double
+ HALFCOMPLEX_COEFFICIENT[], gsl_complex_packed_array
+ COMPLEX_COEFFICIENT, size_t STRIDE, size_t N)
+ This function converts HALFCOMPLEX_COEFFICIENT, an array of
+ half-complex coefficients as returned by `gsl_fft_real_transform',
+ into an ordinary complex array, COMPLEX_COEFFICIENT. It fills in
+ the complex array using the symmetry z_k = z_{N-k}^* to
+ reconstruct the redundant elements. The algorithm for the
+ conversion is,
+
+ complex_coefficient[0].real
+ = halfcomplex_coefficient[0];
+ complex_coefficient[0].imag
+ = 0.0;
+
+ for (i = 1; i < n - i; i++)
+ {
+ double hc_real
+ = halfcomplex_coefficient[2 * i - 1];
+ double hc_imag
+ = halfcomplex_coefficient[2 * i];
+ complex_coefficient[i].real = hc_real;
+ complex_coefficient[i].imag = hc_imag;
+ complex_coefficient[n - i].real = hc_real;
+ complex_coefficient[n - i].imag = -hc_imag;
+ }
+
+ if (i == n - i)
+ {
+ complex_coefficient[i].real
+ = halfcomplex_coefficient[n - 1];
+ complex_coefficient[i].imag
+ = 0.0;
+ }
+
+ Here is an example program using `gsl_fft_real_transform' and
+`gsl_fft_halfcomplex_inverse'. It generates a real signal in the shape
+of a square pulse. The pulse is fourier transformed to frequency
+space, and all but the lowest ten frequency components are removed from
+the array of fourier coefficients returned by `gsl_fft_real_transform'.
+
+ The remaining fourier coefficients are transformed back to the
+time-domain, to give a filtered version of the square pulse. Since
+fourier coefficients are stored using the half-complex symmetry both
+positive and negative frequencies are removed and the final filtered
+signal is also real.
+
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_fft_real.h>
+ #include <gsl/gsl_fft_halfcomplex.h>
+
+ int
+ main (void)
+ {
+ int i, n = 100;
+ double data[n];
+
+ gsl_fft_real_wavetable * real;
+ gsl_fft_halfcomplex_wavetable * hc;
+ gsl_fft_real_workspace * work;
+
+ for (i = 0; i < n; i++)
+ {
+ data[i] = 0.0;
+ }
+
+ for (i = n / 3; i < 2 * n / 3; i++)
+ {
+ data[i] = 1.0;
+ }
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e\n", i, data[i]);
+ }
+ printf ("\n");
+
+ work = gsl_fft_real_workspace_alloc (n);
+ real = gsl_fft_real_wavetable_alloc (n);
+
+ gsl_fft_real_transform (data, 1, n,
+ real, work);
+
+ gsl_fft_real_wavetable_free (real);
+
+ for (i = 11; i < n; i++)
+ {
+ data[i] = 0;
+ }
+
+ hc = gsl_fft_halfcomplex_wavetable_alloc (n);
+
+ gsl_fft_halfcomplex_inverse (data, 1, n,
+ hc, work);
+ gsl_fft_halfcomplex_wavetable_free (hc);
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%d: %e\n", i, data[i]);
+ }
+
+ gsl_fft_real_workspace_free (work);
+ return 0;
+ }
+
+
+File: gsl-ref.info, Node: FFT References and Further Reading, Prev: Mixed-radix FFT routines for real data, Up: Fast Fourier Transforms
+
+15.8 References and Further Reading
+===================================
+
+A good starting point for learning more about the FFT is the review
+article `Fast Fourier Transforms: A Tutorial Review and A State of the
+Art' by Duhamel and Vetterli,
+
+ P. Duhamel and M. Vetterli. Fast fourier transforms: A tutorial
+ review and a state of the art. `Signal Processing', 19:259-299,
+ 1990.
+
+To find out about the algorithms used in the GSL routines you may want
+to consult the document `GSL FFT Algorithms' (it is included in GSL, as
+`doc/fftalgorithms.tex'). This has general information on FFTs and
+explicit derivations of the implementation for each routine. There are
+also references to the relevant literature. For convenience some of
+the more important references are reproduced below.
+
+There are several introductory books on the FFT with example programs,
+such as `The Fast Fourier Transform' by Brigham and `DFT/FFT and
+Convolution Algorithms' by Burrus and Parks,
+
+ E. Oran Brigham. `The Fast Fourier Transform'. Prentice Hall,
+ 1974.
+
+ C. S. Burrus and T. W. Parks. `DFT/FFT and Convolution
+ Algorithms'. Wiley, 1984.
+
+Both these introductory books cover the radix-2 FFT in some detail.
+The mixed-radix algorithm at the heart of the FFTPACK routines is
+reviewed in Clive Temperton's paper,
+
+ Clive Temperton. Self-sorting mixed-radix fast fourier transforms.
+ `Journal of Computational Physics', 52(1):1-23, 1983.
+
+The derivation of FFTs for real-valued data is explained in the
+following two articles,
+
+ Henrik V. Sorenson, Douglas L. Jones, Michael T. Heideman, and C.
+ Sidney Burrus. Real-valued fast fourier transform algorithms.
+ `IEEE Transactions on Acoustics, Speech, and Signal Processing',
+ ASSP-35(6):849-863, 1987.
+
+ Clive Temperton. Fast mixed-radix real fourier transforms.
+ `Journal of Computational Physics', 52:340-350, 1983.
+
+In 1979 the IEEE published a compendium of carefully-reviewed Fortran
+FFT programs in `Programs for Digital Signal Processing'. It is a
+useful reference for implementations of many different FFT algorithms,
+
+ Digital Signal Processing Committee and IEEE Acoustics, Speech,
+ and Signal Processing Committee, editors. `Programs for Digital
+ Signal Processing'. IEEE Press, 1979.
+
+For large-scale FFT work we recommend the use of the dedicated FFTW
+library by Frigo and Johnson. The FFTW library is self-optimizing--it
+automatically tunes itself for each hardware platform in order to
+achieve maximum performance. It is available under the GNU GPL.
+
+ FFTW Website, `http://www.fftw.org/'
+
+The source code for FFTPACK is available from Netlib,
+
+ FFTPACK, `http://www.netlib.org/fftpack/'
+
+
+File: gsl-ref.info, Node: Numerical Integration, Next: Random Number Generation, Prev: Fast Fourier Transforms, Up: Top
+
+16 Numerical Integration
+************************
+
+This chapter describes routines for performing numerical integration
+(quadrature) of a function in one dimension. There are routines for
+adaptive and non-adaptive integration of general functions, with
+specialised routines for specific cases. These include integration over
+infinite and semi-infinite ranges, singular integrals, including
+logarithmic singularities, computation of Cauchy principal values and
+oscillatory integrals. The library reimplements the algorithms used in
+QUADPACK, a numerical integration package written by Piessens,
+Doncker-Kapenga, Uberhuber and Kahaner. Fortran code for QUADPACK is
+available on Netlib.
+
+ The functions described in this chapter are declared in the header
+file `gsl_integration.h'.
+
+* Menu:
+
+* Numerical Integration Introduction::
+* QNG non-adaptive Gauss-Kronrod integration::
+* QAG adaptive integration::
+* QAGS adaptive integration with singularities::
+* QAGP adaptive integration with known singular points::
+* QAGI adaptive integration on infinite intervals::
+* QAWC adaptive integration for Cauchy principal values::
+* QAWS adaptive integration for singular functions::
+* QAWO adaptive integration for oscillatory functions::
+* QAWF adaptive integration for Fourier integrals::
+* Numerical integration error codes::
+* Numerical integration examples::
+* Numerical integration References and Further Reading::
+
+
+File: gsl-ref.info, Node: Numerical Integration Introduction, Next: QNG non-adaptive Gauss-Kronrod integration, Up: Numerical Integration
+
+16.1 Introduction
+=================
+
+Each algorithm computes an approximation to a definite integral of the
+form,
+
+ I = \int_a^b f(x) w(x) dx
+
+where w(x) is a weight function (for general integrands w(x)=1). The
+user provides absolute and relative error bounds (epsabs, epsrel) which
+specify the following accuracy requirement,
+
+ |RESULT - I| <= max(epsabs, epsrel |I|)
+
+where RESULT is the numerical approximation obtained by the algorithm.
+The algorithms attempt to estimate the absolute error ABSERR = |RESULT
+- I| in such a way that the following inequality holds,
+
+ |RESULT - I| <= ABSERR <= max(epsabs, epsrel |I|)
+
+The routines will fail to converge if the error bounds are too
+stringent, but always return the best approximation obtained up to that
+stage.
+
+ The algorithms in QUADPACK use a naming convention based on the
+following letters,
+
+ `Q' - quadrature routine
+
+ `N' - non-adaptive integrator
+ `A' - adaptive integrator
+
+ `G' - general integrand (user-defined)
+ `W' - weight function with integrand
+
+ `S' - singularities can be more readily integrated
+ `P' - points of special difficulty can be supplied
+ `I' - infinite range of integration
+ `O' - oscillatory weight function, cos or sin
+ `F' - Fourier integral
+ `C' - Cauchy principal value
+
+The algorithms are built on pairs of quadrature rules, a higher order
+rule and a lower order rule. The higher order rule is used to compute
+the best approximation to an integral over a small range. The
+difference between the results of the higher order rule and the lower
+order rule gives an estimate of the error in the approximation.
+
+* Menu:
+
+* Integrands without weight functions::
+* Integrands with weight functions::
+* Integrands with singular weight functions::
+
+
+File: gsl-ref.info, Node: Integrands without weight functions, Next: Integrands with weight functions, Up: Numerical Integration Introduction
+
+16.1.1 Integrands without weight functions
+------------------------------------------
+
+The algorithms for general functions (without a weight function) are
+based on Gauss-Kronrod rules.
+
+ A Gauss-Kronrod rule begins with a classical Gaussian quadrature
+rule of order m. This is extended with additional points between each
+of the abscissae to give a higher order Kronrod rule of order 2m+1.
+The Kronrod rule is efficient because it reuses existing function
+evaluations from the Gaussian rule.
+
+ The higher order Kronrod rule is used as the best approximation to
+the integral, and the difference between the two rules is used as an
+estimate of the error in the approximation.
+
+
+File: gsl-ref.info, Node: Integrands with weight functions, Next: Integrands with singular weight functions, Prev: Integrands without weight functions, Up: Numerical Integration Introduction
+
+16.1.2 Integrands with weight functions
+---------------------------------------
+
+For integrands with weight functions the algorithms use Clenshaw-Curtis
+quadrature rules.
+
+ A Clenshaw-Curtis rule begins with an n-th order Chebyshev
+polynomial approximation to the integrand. This polynomial can be
+integrated exactly to give an approximation to the integral of the
+original function. The Chebyshev expansion can be extended to higher
+orders to improve the approximation and provide an estimate of the
+error.
+
+
+File: gsl-ref.info, Node: Integrands with singular weight functions, Prev: Integrands with weight functions, Up: Numerical Integration Introduction
+
+16.1.3 Integrands with singular weight functions
+------------------------------------------------
+
+The presence of singularities (or other behavior) in the integrand can
+cause slow convergence in the Chebyshev approximation. The modified
+Clenshaw-Curtis rules used in QUADPACK separate out several common
+weight functions which cause slow convergence.
+
+ These weight functions are integrated analytically against the
+Chebyshev polynomials to precompute "modified Chebyshev moments".
+Combining the moments with the Chebyshev approximation to the function
+gives the desired integral. The use of analytic integration for the
+singular part of the function allows exact cancellations and
+substantially improves the overall convergence behavior of the
+integration.
+
+
+File: gsl-ref.info, Node: QNG non-adaptive Gauss-Kronrod integration, Next: QAG adaptive integration, Prev: Numerical Integration Introduction, Up: Numerical Integration
+
+16.2 QNG non-adaptive Gauss-Kronrod integration
+===============================================
+
+The QNG algorithm is a non-adaptive procedure which uses fixed
+Gauss-Kronrod abscissae to sample the integrand at a maximum of 87
+points. It is provided for fast integration of smooth functions.
+
+ -- Function: int gsl_integration_qng (const gsl_function * F, double
+ A, double B, double EPSABS, double EPSREL, double * RESULT,
+ double * ABSERR, size_t * NEVAL)
+ This function applies the Gauss-Kronrod 10-point, 21-point,
+ 43-point and 87-point integration rules in succession until an
+ estimate of the integral of f over (a,b) is achieved within the
+ desired absolute and relative error limits, EPSABS and EPSREL. The
+ function returns the final approximation, RESULT, an estimate of
+ the absolute error, ABSERR and the number of function evaluations
+ used, NEVAL. The Gauss-Kronrod rules are designed in such a way
+ that each rule uses all the results of its predecessors, in order
+ to minimize the total number of function evaluations.
+
+
+File: gsl-ref.info, Node: QAG adaptive integration, Next: QAGS adaptive integration with singularities, Prev: QNG non-adaptive Gauss-Kronrod integration, Up: Numerical Integration
+
+16.3 QAG adaptive integration
+=============================
+
+The QAG algorithm is a simple adaptive integration procedure. The
+integration region is divided into subintervals, and on each iteration
+the subinterval with the largest estimated error is bisected. This
+reduces the overall error rapidly, as the subintervals become
+concentrated around local difficulties in the integrand. These
+subintervals are managed by a `gsl_integration_workspace' struct, which
+handles the memory for the subinterval ranges, results and error
+estimates.
+
+ -- Function: gsl_integration_workspace *
+gsl_integration_workspace_alloc (size_t N)
+ This function allocates a workspace sufficient to hold N double
+ precision intervals, their integration results and error estimates.
+
+ -- Function: void gsl_integration_workspace_free
+ (gsl_integration_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_integration_qag (const gsl_function * F, double
+ A, double B, double EPSABS, double EPSREL, size_t LIMIT, int
+ KEY, gsl_integration_workspace * WORKSPACE, double * RESULT,
+ double * ABSERR)
+ This function applies an integration rule adaptively until an
+ estimate of the integral of f over (a,b) is achieved within the
+ desired absolute and relative error limits, EPSABS and EPSREL.
+ The function returns the final approximation, RESULT, and an
+ estimate of the absolute error, ABSERR. The integration rule is
+ determined by the value of KEY, which should be chosen from the
+ following symbolic names,
+
+ GSL_INTEG_GAUSS15 (key = 1)
+ GSL_INTEG_GAUSS21 (key = 2)
+ GSL_INTEG_GAUSS31 (key = 3)
+ GSL_INTEG_GAUSS41 (key = 4)
+ GSL_INTEG_GAUSS51 (key = 5)
+ GSL_INTEG_GAUSS61 (key = 6)
+
+ corresponding to the 15, 21, 31, 41, 51 and 61 point Gauss-Kronrod
+ rules. The higher-order rules give better accuracy for smooth
+ functions, while lower-order rules save time when the function
+ contains local difficulties, such as discontinuities.
+
+ On each iteration the adaptive integration strategy bisects the
+ interval with the largest error estimate. The subintervals and
+ their results are stored in the memory provided by WORKSPACE. The
+ maximum number of subintervals is given by LIMIT, which may not
+ exceed the allocated size of the workspace.
+
+
+File: gsl-ref.info, Node: QAGS adaptive integration with singularities, Next: QAGP adaptive integration with known singular points, Prev: QAG adaptive integration, Up: Numerical Integration
+
+16.4 QAGS adaptive integration with singularities
+=================================================
+
+The presence of an integrable singularity in the integration region
+causes an adaptive routine to concentrate new subintervals around the
+singularity. As the subintervals decrease in size the successive
+approximations to the integral converge in a limiting fashion. This
+approach to the limit can be accelerated using an extrapolation
+procedure. The QAGS algorithm combines adaptive bisection with the Wynn
+epsilon-algorithm to speed up the integration of many types of
+integrable singularities.
+
+ -- Function: int gsl_integration_qags (const gsl_function * F, double
+ A, double B, double EPSABS, double EPSREL, size_t LIMIT,
+ gsl_integration_workspace * WORKSPACE, double * RESULT,
+ double * ABSERR)
+ This function applies the Gauss-Kronrod 21-point integration rule
+ adaptively until an estimate of the integral of f over (a,b) is
+ achieved within the desired absolute and relative error limits,
+ EPSABS and EPSREL. The results are extrapolated using the
+ epsilon-algorithm, which accelerates the convergence of the
+ integral in the presence of discontinuities and integrable
+ singularities. The function returns the final approximation from
+ the extrapolation, RESULT, and an estimate of the absolute error,
+ ABSERR. The subintervals and their results are stored in the
+ memory provided by WORKSPACE. The maximum number of subintervals
+ is given by LIMIT, which may not exceed the allocated size of the
+ workspace.
+
+
+
+File: gsl-ref.info, Node: QAGP adaptive integration with known singular points, Next: QAGI adaptive integration on infinite intervals, Prev: QAGS adaptive integration with singularities, Up: Numerical Integration
+
+16.5 QAGP adaptive integration with known singular points
+=========================================================
+
+ -- Function: int gsl_integration_qagp (const gsl_function * F, double
+ * PTS, size_t NPTS, double EPSABS, double EPSREL, size_t
+ LIMIT, gsl_integration_workspace * WORKSPACE, double *
+ RESULT, double * ABSERR)
+ This function applies the adaptive integration algorithm QAGS
+ taking account of the user-supplied locations of singular points.
+ The array PTS of length NPTS should contain the endpoints of the
+ integration ranges defined by the integration region and locations
+ of the singularities. For example, to integrate over the region
+ (a,b) with break-points at x_1, x_2, x_3 (where a < x_1 < x_2 <
+ x_3 < b) the following PTS array should be used
+
+ pts[0] = a
+ pts[1] = x_1
+ pts[2] = x_2
+ pts[3] = x_3
+ pts[4] = b
+
+ with NPTS = 5.
+
+ If you know the locations of the singular points in the integration
+ region then this routine will be faster than `QAGS'.
+
+
+
+File: gsl-ref.info, Node: QAGI adaptive integration on infinite intervals, Next: QAWC adaptive integration for Cauchy principal values, Prev: QAGP adaptive integration with known singular points, Up: Numerical Integration
+
+16.6 QAGI adaptive integration on infinite intervals
+====================================================
+
+ -- Function: int gsl_integration_qagi (gsl_function * F, double
+ EPSABS, double EPSREL, size_t LIMIT,
+ gsl_integration_workspace * WORKSPACE, double * RESULT,
+ double * ABSERR)
+ This function computes the integral of the function F over the
+ infinite interval (-\infty,+\infty). The integral is mapped onto
+ the semi-open interval (0,1] using the transformation x = (1-t)/t,
+
+ \int_{-\infty}^{+\infty} dx f(x) =
+ \int_0^1 dt (f((1-t)/t) + f((-1+t)/t))/t^2.
+
+ It is then integrated using the QAGS algorithm. The normal
+ 21-point Gauss-Kronrod rule of QAGS is replaced by a 15-point
+ rule, because the transformation can generate an integrable
+ singularity at the origin. In this case a lower-order rule is
+ more efficient.
+
+ -- Function: int gsl_integration_qagiu (gsl_function * F, double A,
+ double EPSABS, double EPSREL, size_t LIMIT,
+ gsl_integration_workspace * WORKSPACE, double * RESULT,
+ double * ABSERR)
+ This function computes the integral of the function F over the
+ semi-infinite interval (a,+\infty). The integral is mapped onto
+ the semi-open interval (0,1] using the transformation x = a +
+ (1-t)/t,
+
+ \int_{a}^{+\infty} dx f(x) =
+ \int_0^1 dt f(a + (1-t)/t)/t^2
+
+ and then integrated using the QAGS algorithm.
+
+ -- Function: int gsl_integration_qagil (gsl_function * F, double B,
+ double EPSABS, double EPSREL, size_t LIMIT,
+ gsl_integration_workspace * WORKSPACE, double * RESULT,
+ double * ABSERR)
+ This function computes the integral of the function F over the
+ semi-infinite interval (-\infty,b). The integral is mapped onto
+ the semi-open interval (0,1] using the transformation x = b -
+ (1-t)/t,
+
+ \int_{+\infty}^{b} dx f(x) =
+ \int_0^1 dt f(b - (1-t)/t)/t^2
+
+ and then integrated using the QAGS algorithm.
+
+
+File: gsl-ref.info, Node: QAWC adaptive integration for Cauchy principal values, Next: QAWS adaptive integration for singular functions, Prev: QAGI adaptive integration on infinite intervals, Up: Numerical Integration
+
+16.7 QAWC adaptive integration for Cauchy principal values
+==========================================================
+
+ -- Function: int gsl_integration_qawc (gsl_function * F, double A,
+ double B, double C, double EPSABS, double EPSREL, size_t
+ LIMIT, gsl_integration_workspace * WORKSPACE, double *
+ RESULT, double * ABSERR)
+ This function computes the Cauchy principal value of the integral
+ of f over (a,b), with a singularity at C,
+
+ I = \int_a^b dx f(x) / (x - c)
+
+ The adaptive bisection algorithm of QAG is used, with
+ modifications to ensure that subdivisions do not occur at the
+ singular point x = c. When a subinterval contains the point x = c
+ or is close to it then a special 25-point modified Clenshaw-Curtis
+ rule is used to control the singularity. Further away from the
+ singularity the algorithm uses an ordinary 15-point Gauss-Kronrod
+ integration rule.
+
+
+
+File: gsl-ref.info, Node: QAWS adaptive integration for singular functions, Next: QAWO adaptive integration for oscillatory functions, Prev: QAWC adaptive integration for Cauchy principal values, Up: Numerical Integration
+
+16.8 QAWS adaptive integration for singular functions
+=====================================================
+
+The QAWS algorithm is designed for integrands with algebraic-logarithmic
+singularities at the end-points of an integration region. In order to
+work efficiently the algorithm requires a precomputed table of
+Chebyshev moments.
+
+ -- Function: gsl_integration_qaws_table *
+gsl_integration_qaws_table_alloc (double ALPHA, double BETA, int MU,
+ int NU)
+ This function allocates space for a `gsl_integration_qaws_table'
+ struct describing a singular weight function W(x) with the
+ parameters (\alpha, \beta, \mu, \nu),
+
+ W(x) = (x-a)^alpha (b-x)^beta log^mu (x-a) log^nu (b-x)
+
+ where \alpha > -1, \beta > -1, and \mu = 0, 1, \nu = 0, 1. The
+ weight function can take four different forms depending on the
+ values of \mu and \nu,
+
+ W(x) = (x-a)^alpha (b-x)^beta (mu = 0, nu = 0)
+ W(x) = (x-a)^alpha (b-x)^beta log(x-a) (mu = 1, nu = 0)
+ W(x) = (x-a)^alpha (b-x)^beta log(b-x) (mu = 0, nu = 1)
+ W(x) = (x-a)^alpha (b-x)^beta log(x-a) log(b-x) (mu = 1, nu = 1)
+
+ The singular points (a,b) do not have to be specified until the
+ integral is computed, where they are the endpoints of the
+ integration range.
+
+ The function returns a pointer to the newly allocated table
+ `gsl_integration_qaws_table' if no errors were detected, and 0 in
+ the case of error.
+
+ -- Function: int gsl_integration_qaws_table_set
+ (gsl_integration_qaws_table * T, double ALPHA, double BETA,
+ int MU, int NU)
+ This function modifies the parameters (\alpha, \beta, \mu, \nu) of
+ an existing `gsl_integration_qaws_table' struct T.
+
+ -- Function: void gsl_integration_qaws_table_free
+ (gsl_integration_qaws_table * T)
+ This function frees all the memory associated with the
+ `gsl_integration_qaws_table' struct T.
+
+ -- Function: int gsl_integration_qaws (gsl_function * F, const double
+ A, const double B, gsl_integration_qaws_table * T, const
+ double EPSABS, const double EPSREL, const size_t LIMIT,
+ gsl_integration_workspace * WORKSPACE, double * RESULT,
+ double * ABSERR)
+ This function computes the integral of the function f(x) over the
+ interval (a,b) with the singular weight function (x-a)^\alpha
+ (b-x)^\beta \log^\mu (x-a) \log^\nu (b-x). The parameters of the
+ weight function (\alpha, \beta, \mu, \nu) are taken from the table
+ T. The integral is,
+
+ I = \int_a^b dx f(x) (x-a)^alpha (b-x)^beta log^mu (x-a) log^nu (b-x).
+
+ The adaptive bisection algorithm of QAG is used. When a
+ subinterval contains one of the endpoints then a special 25-point
+ modified Clenshaw-Curtis rule is used to control the
+ singularities. For subintervals which do not include the
+ endpoints an ordinary 15-point Gauss-Kronrod integration rule is
+ used.
+
+
+
+File: gsl-ref.info, Node: QAWO adaptive integration for oscillatory functions, Next: QAWF adaptive integration for Fourier integrals, Prev: QAWS adaptive integration for singular functions, Up: Numerical Integration
+
+16.9 QAWO adaptive integration for oscillatory functions
+========================================================
+
+The QAWO algorithm is designed for integrands with an oscillatory
+factor, \sin(\omega x) or \cos(\omega x). In order to work efficiently
+the algorithm requires a table of Chebyshev moments which must be
+pre-computed with calls to the functions below.
+
+ -- Function: gsl_integration_qawo_table *
+gsl_integration_qawo_table_alloc (double OMEGA, double L, enum
+ gsl_integration_qawo_enum SINE, size_t N)
+ This function allocates space for a `gsl_integration_qawo_table'
+ struct and its associated workspace describing a sine or cosine
+ weight function W(x) with the parameters (\omega, L),
+
+ W(x) = sin(omega x)
+ W(x) = cos(omega x)
+
+ The parameter L must be the length of the interval over which the
+ function will be integrated L = b - a. The choice of sine or
+ cosine is made with the parameter SINE which should be chosen from
+ one of the two following symbolic values:
+
+ GSL_INTEG_COSINE
+ GSL_INTEG_SINE
+
+ The `gsl_integration_qawo_table' is a table of the trigonometric
+ coefficients required in the integration process. The parameter N
+ determines the number of levels of coefficients that are computed.
+ Each level corresponds to one bisection of the interval L, so that
+ N levels are sufficient for subintervals down to the length L/2^n.
+ The integration routine `gsl_integration_qawo' returns the error
+ `GSL_ETABLE' if the number of levels is insufficient for the
+ requested accuracy.
+
+
+ -- Function: int gsl_integration_qawo_table_set
+ (gsl_integration_qawo_table * T, double OMEGA, double L, enum
+ gsl_integration_qawo_enum SINE)
+ This function changes the parameters OMEGA, L and SINE of the
+ existing workspace T.
+
+ -- Function: int gsl_integration_qawo_table_set_length
+ (gsl_integration_qawo_table * T, double L)
+ This function allows the length parameter L of the workspace T to
+ be changed.
+
+ -- Function: void gsl_integration_qawo_table_free
+ (gsl_integration_qawo_table * T)
+ This function frees all the memory associated with the workspace T.
+
+ -- Function: int gsl_integration_qawo (gsl_function * F, const double
+ A, const double EPSABS, const double EPSREL, const size_t
+ LIMIT, gsl_integration_workspace * WORKSPACE,
+ gsl_integration_qawo_table * WF, double * RESULT, double *
+ ABSERR)
+ This function uses an adaptive algorithm to compute the integral of
+ f over (a,b) with the weight function \sin(\omega x) or
+ \cos(\omega x) defined by the table WF,
+
+ I = \int_a^b dx f(x) sin(omega x)
+ I = \int_a^b dx f(x) cos(omega x)
+
+ The results are extrapolated using the epsilon-algorithm to
+ accelerate the convergence of the integral. The function returns
+ the final approximation from the extrapolation, RESULT, and an
+ estimate of the absolute error, ABSERR. The subintervals and
+ their results are stored in the memory provided by WORKSPACE. The
+ maximum number of subintervals is given by LIMIT, which may not
+ exceed the allocated size of the workspace.
+
+ Those subintervals with "large" widths d where d\omega > 4 are
+ computed using a 25-point Clenshaw-Curtis integration rule, which
+ handles the oscillatory behavior. Subintervals with a "small"
+ widths where d\omega < 4 are computed using a 15-point
+ Gauss-Kronrod integration.
+
+
+
+File: gsl-ref.info, Node: QAWF adaptive integration for Fourier integrals, Next: Numerical integration error codes, Prev: QAWO adaptive integration for oscillatory functions, Up: Numerical Integration
+
+16.10 QAWF adaptive integration for Fourier integrals
+=====================================================
+
+ -- Function: int gsl_integration_qawf (gsl_function * F, const double
+ A, const double EPSABS, const size_t LIMIT,
+ gsl_integration_workspace * WORKSPACE,
+ gsl_integration_workspace * CYCLE_WORKSPACE,
+ gsl_integration_qawo_table * WF, double * RESULT, double *
+ ABSERR)
+ This function attempts to compute a Fourier integral of the
+ function F over the semi-infinite interval [a,+\infty).
+
+ I = \int_a^{+\infty} dx f(x) sin(omega x)
+ I = \int_a^{+\infty} dx f(x) cos(omega x)
+
+ The parameter \omega and choice of \sin or \cos is taken from the
+ table WF (the length L can take any value, since it is overridden
+ by this function to a value appropriate for the fourier
+ integration). The integral is computed using the QAWO algorithm
+ over each of the subintervals,
+
+ C_1 = [a, a + c]
+ C_2 = [a + c, a + 2 c]
+ ... = ...
+ C_k = [a + (k-1) c, a + k c]
+
+ where c = (2 floor(|\omega|) + 1) \pi/|\omega|. The width c is
+ chosen to cover an odd number of periods so that the contributions
+ from the intervals alternate in sign and are monotonically
+ decreasing when F is positive and monotonically decreasing. The
+ sum of this sequence of contributions is accelerated using the
+ epsilon-algorithm.
+
+ This function works to an overall absolute tolerance of ABSERR.
+ The following strategy is used: on each interval C_k the algorithm
+ tries to achieve the tolerance
+
+ TOL_k = u_k abserr
+
+ where u_k = (1 - p)p^{k-1} and p = 9/10. The sum of the geometric
+ series of contributions from each interval gives an overall
+ tolerance of ABSERR.
+
+ If the integration of a subinterval leads to difficulties then the
+ accuracy requirement for subsequent intervals is relaxed,
+
+ TOL_k = u_k max(abserr, max_{i<k}{E_i})
+
+ where E_k is the estimated error on the interval C_k.
+
+ The subintervals and their results are stored in the memory
+ provided by WORKSPACE. The maximum number of subintervals is
+ given by LIMIT, which may not exceed the allocated size of the
+ workspace. The integration over each subinterval uses the memory
+ provided by CYCLE_WORKSPACE as workspace for the QAWO algorithm.
+
+
+
+File: gsl-ref.info, Node: Numerical integration error codes, Next: Numerical integration examples, Prev: QAWF adaptive integration for Fourier integrals, Up: Numerical Integration
+
+16.11 Error codes
+=================
+
+In addition to the standard error codes for invalid arguments the
+functions can return the following values,
+
+`GSL_EMAXITER'
+ the maximum number of subdivisions was exceeded.
+
+`GSL_EROUND'
+ cannot reach tolerance because of roundoff error, or roundoff
+ error was detected in the extrapolation table.
+
+`GSL_ESING'
+ a non-integrable singularity or other bad integrand behavior was
+ found in the integration interval.
+
+`GSL_EDIVERGE'
+ the integral is divergent, or too slowly convergent to be
+ integrated numerically.
+
+
+File: gsl-ref.info, Node: Numerical integration examples, Next: Numerical integration References and Further Reading, Prev: Numerical integration error codes, Up: Numerical Integration
+
+16.12 Examples
+==============
+
+The integrator `QAGS' will handle a large class of definite integrals.
+For example, consider the following integral, which has a
+algebraic-logarithmic singularity at the origin,
+
+ \int_0^1 x^{-1/2} log(x) dx = -4
+
+The program below computes this integral to a relative accuracy bound of
+`1e-7'.
+
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_integration.h>
+
+ double f (double x, void * params) {
+ double alpha = *(double *) params;
+ double f = log(alpha*x) / sqrt(x);
+ return f;
+ }
+
+ int
+ main (void)
+ {
+ gsl_integration_workspace * w
+ = gsl_integration_workspace_alloc (1000);
+
+ double result, error;
+ double expected = -4.0;
+ double alpha = 1.0;
+
+ gsl_function F;
+ F.function = &f;
+ F.params = &alpha;
+
+ gsl_integration_qags (&F, 0, 1, 0, 1e-7, 1000,
+ w, &result, &error);
+
+ printf ("result = % .18f\n", result);
+ printf ("exact result = % .18f\n", expected);
+ printf ("estimated error = % .18f\n", error);
+ printf ("actual error = % .18f\n", result - expected);
+ printf ("intervals = %d\n", w->size);
+
+ gsl_integration_workspace_free (w);
+
+ return 0;
+ }
+
+The results below show that the desired accuracy is achieved after 8
+subdivisions.
+
+ $ ./a.out
+ result = -3.999999999999973799
+ exact result = -4.000000000000000000
+ estimated error = 0.000000000000246025
+ actual error = 0.000000000000026201
+ intervals = 8
+
+In fact, the extrapolation procedure used by `QAGS' produces an
+accuracy of almost twice as many digits. The error estimate returned by
+the extrapolation procedure is larger than the actual error, giving a
+margin of safety of one order of magnitude.
+
+
+File: gsl-ref.info, Node: Numerical integration References and Further Reading, Prev: Numerical integration examples, Up: Numerical Integration
+
+16.13 References and Further Reading
+====================================
+
+The following book is the definitive reference for QUADPACK, and was
+written by the original authors. It provides descriptions of the
+algorithms, program listings, test programs and examples. It also
+includes useful advice on numerical integration and many references to
+the numerical integration literature used in developing QUADPACK.
+
+ R. Piessens, E. de Doncker-Kapenga, C.W. Uberhuber, D.K. Kahaner.
+ `QUADPACK A subroutine package for automatic integration' Springer
+ Verlag, 1983.
+
+
+
+File: gsl-ref.info, Node: Random Number Generation, Next: Quasi-Random Sequences, Prev: Numerical Integration, Up: Top
+
+17 Random Number Generation
+***************************
+
+The library provides a large collection of random number generators
+which can be accessed through a uniform interface. Environment
+variables allow you to select different generators and seeds at runtime,
+so that you can easily switch between generators without needing to
+recompile your program. Each instance of a generator keeps track of its
+own state, allowing the generators to be used in multi-threaded
+programs. Additional functions are available for transforming uniform
+random numbers into samples from continuous or discrete probability
+distributions such as the Gaussian, log-normal or Poisson distributions.
+
+ These functions are declared in the header file `gsl_rng.h'.
+
+* Menu:
+
+* General comments on random numbers::
+* The Random Number Generator Interface::
+* Random number generator initialization::
+* Sampling from a random number generator::
+* Auxiliary random number generator functions::
+* Random number environment variables::
+* Copying random number generator state::
+* Reading and writing random number generator state::
+* Random number generator algorithms::
+* Unix random number generators::
+* Other random number generators::
+* Random Number Generator Performance::
+* Random Number Generator Examples::
+* Random Number References and Further Reading::
+* Random Number Acknowledgements::
+
+
+File: gsl-ref.info, Node: General comments on random numbers, Next: The Random Number Generator Interface, Up: Random Number Generation
+
+17.1 General comments on random numbers
+=======================================
+
+In 1988, Park and Miller wrote a paper entitled "Random number
+generators: good ones are hard to find." [Commun. ACM, 31, 1192-1201].
+Fortunately, some excellent random number generators are available,
+though poor ones are still in common use. You may be happy with the
+system-supplied random number generator on your computer, but you should
+be aware that as computers get faster, requirements on random number
+generators increase. Nowadays, a simulation that calls a random number
+generator millions of times can often finish before you can make it down
+the hall to the coffee machine and back.
+
+ A very nice review of random number generators was written by Pierre
+L'Ecuyer, as Chapter 4 of the book: Handbook on Simulation, Jerry Banks,
+ed. (Wiley, 1997). The chapter is available in postscript from
+L'Ecuyer's ftp site (see references). Knuth's volume on Seminumerical
+Algorithms (originally published in 1968) devotes 170 pages to random
+number generators, and has recently been updated in its 3rd edition
+(1997). It is brilliant, a classic. If you don't own it, you should
+stop reading right now, run to the nearest bookstore, and buy it.
+
+ A good random number generator will satisfy both theoretical and
+statistical properties. Theoretical properties are often hard to obtain
+(they require real math!), but one prefers a random number generator
+with a long period, low serial correlation, and a tendency _not_ to
+"fall mainly on the planes." Statistical tests are performed with
+numerical simulations. Generally, a random number generator is used to
+estimate some quantity for which the theory of probability provides an
+exact answer. Comparison to this exact answer provides a measure of
+"randomness".
+
+
+File: gsl-ref.info, Node: The Random Number Generator Interface, Next: Random number generator initialization, Prev: General comments on random numbers, Up: Random Number Generation
+
+17.2 The Random Number Generator Interface
+==========================================
+
+It is important to remember that a random number generator is not a
+"real" function like sine or cosine. Unlike real functions, successive
+calls to a random number generator yield different return values. Of
+course that is just what you want for a random number generator, but to
+achieve this effect, the generator must keep track of some kind of
+"state" variable. Sometimes this state is just an integer (sometimes
+just the value of the previously generated random number), but often it
+is more complicated than that and may involve a whole array of numbers,
+possibly with some indices thrown in. To use the random number
+generators, you do not need to know the details of what comprises the
+state, and besides that varies from algorithm to algorithm.
+
+ The random number generator library uses two special structs,
+`gsl_rng_type' which holds static information about each type of
+generator and `gsl_rng' which describes an instance of a generator
+created from a given `gsl_rng_type'.
+
+ The functions described in this section are declared in the header
+file `gsl_rng.h'.
+
+
+File: gsl-ref.info, Node: Random number generator initialization, Next: Sampling from a random number generator, Prev: The Random Number Generator Interface, Up: Random Number Generation
+
+17.3 Random number generator initialization
+===========================================
+
+ -- Function: gsl_rng * gsl_rng_alloc (const gsl_rng_type * T)
+ This function returns a pointer to a newly-created instance of a
+ random number generator of type T. For example, the following
+ code creates an instance of the Tausworthe generator,
+
+ gsl_rng * r = gsl_rng_alloc (gsl_rng_taus);
+
+ If there is insufficient memory to create the generator then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ The generator is automatically initialized with the default seed,
+ `gsl_rng_default_seed'. This is zero by default but can be changed
+ either directly or by using the environment variable `GSL_RNG_SEED'
+ (*note Random number environment variables::).
+
+ The details of the available generator types are described later
+ in this chapter.
+
+ -- Function: void gsl_rng_set (const gsl_rng * R, unsigned long int S)
+ This function initializes (or `seeds') the random number
+ generator. If the generator is seeded with the same value of S on
+ two different runs, the same stream of random numbers will be
+ generated by successive calls to the routines below. If different
+ values of S are supplied, then the generated streams of random
+ numbers should be completely different. If the seed S is zero
+ then the standard seed from the original implementation is used
+ instead. For example, the original Fortran source code for the
+ `ranlux' generator used a seed of 314159265, and so choosing S
+ equal to zero reproduces this when using `gsl_rng_ranlux'.
+
+ -- Function: void gsl_rng_free (gsl_rng * R)
+ This function frees all the memory associated with the generator R.
+
+
+File: gsl-ref.info, Node: Sampling from a random number generator, Next: Auxiliary random number generator functions, Prev: Random number generator initialization, Up: Random Number Generation
+
+17.4 Sampling from a random number generator
+============================================
+
+The following functions return uniformly distributed random numbers,
+either as integers or double precision floating point numbers. To
+obtain non-uniform distributions *note Random Number Distributions::.
+
+ -- Function: unsigned long int gsl_rng_get (const gsl_rng * R)
+ This function returns a random integer from the generator R. The
+ minimum and maximum values depend on the algorithm used, but all
+ integers in the range [MIN,MAX] are equally likely. The values of
+ MIN and MAX can determined using the auxiliary functions
+ `gsl_rng_max (r)' and `gsl_rng_min (r)'.
+
+ -- Function: double gsl_rng_uniform (const gsl_rng * R)
+ This function returns a double precision floating point number
+ uniformly distributed in the range [0,1). The range includes 0.0
+ but excludes 1.0. The value is typically obtained by dividing the
+ result of `gsl_rng_get(r)' by `gsl_rng_max(r) + 1.0' in double
+ precision. Some generators compute this ratio internally so that
+ they can provide floating point numbers with more than 32 bits of
+ randomness (the maximum number of bits that can be portably
+ represented in a single `unsigned long int').
+
+ -- Function: double gsl_rng_uniform_pos (const gsl_rng * R)
+ This function returns a positive double precision floating point
+ number uniformly distributed in the range (0,1), excluding both
+ 0.0 and 1.0. The number is obtained by sampling the generator
+ with the algorithm of `gsl_rng_uniform' until a non-zero value is
+ obtained. You can use this function if you need to avoid a
+ singularity at 0.0.
+
+ -- Function: unsigned long int gsl_rng_uniform_int (const gsl_rng * R,
+ unsigned long int N)
+ This function returns a random integer from 0 to n-1 inclusive by
+ scaling down and/or discarding samples from the generator R. All
+ integers in the range [0,n-1] are produced with equal probability.
+ For generators with a non-zero minimum value an offset is applied
+ so that zero is returned with the correct probability.
+
+ Note that this function is designed for sampling from ranges
+ smaller than the range of the underlying generator. The parameter
+ N must be less than or equal to the range of the generator R. If
+ N is larger than the range of the generator then the function
+ calls the error handler with an error code of `GSL_EINVAL' and
+ returns zero.
+
+ In particular, this function is not intended for generating the
+ full range of unsigned integer values [0,2^32-1]. Instead choose a
+ generator with the maximal integer range and zero mimimum value,
+ such as `gsl_rng_ranlxd1', `gsl_rng_mt19937' or `gsl_rng_taus',
+ and sample it directly using `gsl_rng_get'. The range of each
+ generator can be found using the auxiliary functions described in
+ the next section.
+
+
+File: gsl-ref.info, Node: Auxiliary random number generator functions, Next: Random number environment variables, Prev: Sampling from a random number generator, Up: Random Number Generation
+
+17.5 Auxiliary random number generator functions
+================================================
+
+The following functions provide information about an existing
+generator. You should use them in preference to hard-coding the
+generator parameters into your own code.
+
+ -- Function: const char * gsl_rng_name (const gsl_rng * R)
+ This function returns a pointer to the name of the generator. For
+ example,
+
+ printf ("r is a '%s' generator\n",
+ gsl_rng_name (r));
+
+ would print something like `r is a 'taus' generator'.
+
+ -- Function: unsigned long int gsl_rng_max (const gsl_rng * R)
+ `gsl_rng_max' returns the largest value that `gsl_rng_get' can
+ return.
+
+ -- Function: unsigned long int gsl_rng_min (const gsl_rng * R)
+ `gsl_rng_min' returns the smallest value that `gsl_rng_get' can
+ return. Usually this value is zero. There are some generators
+ with algorithms that cannot return zero, and for these generators
+ the minimum value is 1.
+
+ -- Function: void * gsl_rng_state (const gsl_rng * R)
+ -- Function: size_t gsl_rng_size (const gsl_rng * R)
+ These functions return a pointer to the state of generator R and
+ its size. You can use this information to access the state
+ directly. For example, the following code will write the state of
+ a generator to a stream,
+
+ void * state = gsl_rng_state (r);
+ size_t n = gsl_rng_size (r);
+ fwrite (state, n, 1, stream);
+
+ -- Function: const gsl_rng_type ** gsl_rng_types_setup (void)
+ This function returns a pointer to an array of all the available
+ generator types, terminated by a null pointer. The function should
+ be called once at the start of the program, if needed. The
+ following code fragment shows how to iterate over the array of
+ generator types to print the names of the available algorithms,
+
+ const gsl_rng_type **t, **t0;
+
+ t0 = gsl_rng_types_setup ();
+
+ printf ("Available generators:\n");
+
+ for (t = t0; *t != 0; t++)
+ {
+ printf ("%s\n", (*t)->name);
+ }
+
+
+File: gsl-ref.info, Node: Random number environment variables, Next: Copying random number generator state, Prev: Auxiliary random number generator functions, Up: Random Number Generation
+
+17.6 Random number environment variables
+========================================
+
+The library allows you to choose a default generator and seed from the
+environment variables `GSL_RNG_TYPE' and `GSL_RNG_SEED' and the
+function `gsl_rng_env_setup'. This makes it easy try out different
+generators and seeds without having to recompile your program.
+
+ -- Function: const gsl_rng_type * gsl_rng_env_setup (void)
+ This function reads the environment variables `GSL_RNG_TYPE' and
+ `GSL_RNG_SEED' and uses their values to set the corresponding
+ library variables `gsl_rng_default' and `gsl_rng_default_seed'.
+ These global variables are defined as follows,
+
+ extern const gsl_rng_type *gsl_rng_default
+ extern unsigned long int gsl_rng_default_seed
+
+ The environment variable `GSL_RNG_TYPE' should be the name of a
+ generator, such as `taus' or `mt19937'. The environment variable
+ `GSL_RNG_SEED' should contain the desired seed value. It is
+ converted to an `unsigned long int' using the C library function
+ `strtoul'.
+
+ If you don't specify a generator for `GSL_RNG_TYPE' then
+ `gsl_rng_mt19937' is used as the default. The initial value of
+ `gsl_rng_default_seed' is zero.
+
+
+Here is a short program which shows how to create a global generator
+using the environment variables `GSL_RNG_TYPE' and `GSL_RNG_SEED',
+
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+
+ gsl_rng * r; /* global generator */
+
+ int
+ main (void)
+ {
+ const gsl_rng_type * T;
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ printf ("generator type: %s\n", gsl_rng_name (r));
+ printf ("seed = %lu\n", gsl_rng_default_seed);
+ printf ("first value = %lu\n", gsl_rng_get (r));
+
+ gsl_rng_free (r);
+ return 0;
+ }
+
+Running the program without any environment variables uses the initial
+defaults, an `mt19937' generator with a seed of 0,
+
+ $ ./a.out
+ generator type: mt19937
+ seed = 0
+ first value = 4293858116
+
+By setting the two variables on the command line we can change the
+default generator and the seed,
+
+ $ GSL_RNG_TYPE="taus" GSL_RNG_SEED=123 ./a.out
+ GSL_RNG_TYPE=taus
+ GSL_RNG_SEED=123
+ generator type: taus
+ seed = 123
+ first value = 2720986350
+
+
+File: gsl-ref.info, Node: Copying random number generator state, Next: Reading and writing random number generator state, Prev: Random number environment variables, Up: Random Number Generation
+
+17.7 Copying random number generator state
+==========================================
+
+The above methods do not expose the random number `state' which changes
+from call to call. It is often useful to be able to save and restore
+the state. To permit these practices, a few somewhat more advanced
+functions are supplied. These include:
+
+ -- Function: int gsl_rng_memcpy (gsl_rng * DEST, const gsl_rng * SRC)
+ This function copies the random number generator SRC into the
+ pre-existing generator DEST, making DEST into an exact copy of
+ SRC. The two generators must be of the same type.
+
+ -- Function: gsl_rng * gsl_rng_clone (const gsl_rng * R)
+ This function returns a pointer to a newly created generator which
+ is an exact copy of the generator R.
+
+
+File: gsl-ref.info, Node: Reading and writing random number generator state, Next: Random number generator algorithms, Prev: Copying random number generator state, Up: Random Number Generation
+
+17.8 Reading and writing random number generator state
+======================================================
+
+The library provides functions for reading and writing the random
+number state to a file as binary data or formatted text.
+
+ -- Function: int gsl_rng_fwrite (FILE * STREAM, const gsl_rng * R)
+ This function writes the random number state of the random number
+ generator R to the stream STREAM in binary format. The return
+ value is 0 for success and `GSL_EFAILED' if there was a problem
+ writing to the file. Since the data is written in the native
+ binary format it may not be portable between different
+ architectures.
+
+ -- Function: int gsl_rng_fread (FILE * STREAM, gsl_rng * R)
+ This function reads the random number state into the random number
+ generator R from the open stream STREAM in binary format. The
+ random number generator R must be preinitialized with the correct
+ random number generator type since type information is not saved.
+ The return value is 0 for success and `GSL_EFAILED' if there was a
+ problem reading from the file. The data is assumed to have been
+ written in the native binary format on the same architecture.
+
+
+File: gsl-ref.info, Node: Random number generator algorithms, Next: Unix random number generators, Prev: Reading and writing random number generator state, Up: Random Number Generation
+
+17.9 Random number generator algorithms
+=======================================
+
+The functions described above make no reference to the actual algorithm
+used. This is deliberate so that you can switch algorithms without
+having to change any of your application source code. The library
+provides a large number of generators of different types, including
+simulation quality generators, generators provided for compatibility
+with other libraries and historical generators from the past.
+
+ The following generators are recommended for use in simulation. They
+have extremely long periods, low correlation and pass most statistical
+tests. For the most reliable source of uncorrelated numbers, the
+second-generation RANLUX generators have the strongest proof of
+randomness.
+
+ -- Generator: gsl_rng_mt19937
+ The MT19937 generator of Makoto Matsumoto and Takuji Nishimura is a
+ variant of the twisted generalized feedback shift-register
+ algorithm, and is known as the "Mersenne Twister" generator. It
+ has a Mersenne prime period of 2^19937 - 1 (about 10^6000) and is
+ equi-distributed in 623 dimensions. It has passed the DIEHARD
+ statistical tests. It uses 624 words of state per generator and is
+ comparable in speed to the other generators. The original
+ generator used a default seed of 4357 and choosing S equal to zero
+ in `gsl_rng_set' reproduces this. Later versions switched to 5489
+ as the default seed, you can choose this explicitly via
+ `gsl_rng_set' instead if you require it.
+
+ For more information see,
+ Makoto Matsumoto and Takuji Nishimura, "Mersenne Twister: A
+ 623-dimensionally equidistributed uniform pseudorandom number
+ generator". `ACM Transactions on Modeling and Computer
+ Simulation', Vol. 8, No. 1 (Jan. 1998), Pages 3-30
+
+ The generator `gsl_rng_mt19937' uses the second revision of the
+ seeding procedure published by the two authors above in 2002. The
+ original seeding procedures could cause spurious artifacts for
+ some seed values. They are still available through the alternative
+ generators `gsl_rng_mt19937_1999' and `gsl_rng_mt19937_1998'.
+
+ -- Generator: gsl_rng_ranlxs0
+ -- Generator: gsl_rng_ranlxs1
+ -- Generator: gsl_rng_ranlxs2
+ The generator `ranlxs0' is a second-generation version of the
+ RANLUX algorithm of Lu"scher, which produces "luxury random
+ numbers". This generator provides single precision output (24
+ bits) at three luxury levels `ranlxs0', `ranlxs1' and `ranlxs2',
+ in increasing order of strength. It uses double-precision
+ floating point arithmetic internally and can be significantly
+ faster than the integer version of `ranlux', particularly on
+ 64-bit architectures. The period of the generator is about
+ 10^171. The algorithm has mathematically proven properties and
+ can provide truly decorrelated numbers at a known level of
+ randomness. The higher luxury levels provide increased
+ decorrelation between samples as an additional safety margin.
+
+ -- Generator: gsl_rng_ranlxd1
+ -- Generator: gsl_rng_ranlxd2
+ These generators produce double precision output (48 bits) from the
+ RANLXS generator. The library provides two luxury levels
+ `ranlxd1' and `ranlxd2', in increasing order of strength.
+
+ -- Generator: gsl_rng_ranlux
+ -- Generator: gsl_rng_ranlux389
+ The `ranlux' generator is an implementation of the original
+ algorithm developed by Lu"scher. It uses a
+ lagged-fibonacci-with-skipping algorithm to produce "luxury random
+ numbers". It is a 24-bit generator, originally designed for
+ single-precision IEEE floating point numbers. This implementation
+ is based on integer arithmetic, while the second-generation
+ versions RANLXS and RANLXD described above provide floating-point
+ implementations which will be faster on many platforms. The
+ period of the generator is about 10^171. The algorithm has
+ mathematically proven properties and it can provide truly
+ decorrelated numbers at a known level of randomness. The default
+ level of decorrelation recommended by Lu"scher is provided by
+ `gsl_rng_ranlux', while `gsl_rng_ranlux389' gives the highest
+ level of randomness, with all 24 bits decorrelated. Both types of
+ generator use 24 words of state per generator.
+
+ For more information see,
+ M. Lu"scher, "A portable high-quality random number generator
+ for lattice field theory calculations", `Computer Physics
+ Communications', 79 (1994) 100-110.
+
+ F. James, "RANLUX: A Fortran implementation of the
+ high-quality pseudo-random number generator of Lu"scher",
+ `Computer Physics Communications', 79 (1994) 111-114
+
+ -- Generator: gsl_rng_cmrg
+ This is a combined multiple recursive generator by L'Ecuyer. Its
+ sequence is,
+
+ z_n = (x_n - y_n) mod m_1
+
+ where the two underlying generators x_n and y_n are,
+
+ x_n = (a_1 x_{n-1} + a_2 x_{n-2} + a_3 x_{n-3}) mod m_1
+ y_n = (b_1 y_{n-1} + b_2 y_{n-2} + b_3 y_{n-3}) mod m_2
+
+ with coefficients a_1 = 0, a_2 = 63308, a_3 = -183326, b_1 = 86098,
+ b_2 = 0, b_3 = -539608, and moduli m_1 = 2^31 - 1 = 2147483647 and
+ m_2 = 2145483479.
+
+ The period of this generator is lcm(m_1^3-1, m_2^3-1), which is
+ approximately 2^185 (about 10^56). It uses 6 words of state per
+ generator. For more information see,
+
+ P. L'Ecuyer, "Combined Multiple Recursive Random Number
+ Generators", `Operations Research', 44, 5 (1996), 816-822.
+
+ -- Generator: gsl_rng_mrg
+ This is a fifth-order multiple recursive generator by L'Ecuyer,
+ Blouin and Coutre. Its sequence is,
+
+ x_n = (a_1 x_{n-1} + a_5 x_{n-5}) mod m
+
+ with a_1 = 107374182, a_2 = a_3 = a_4 = 0, a_5 = 104480 and m =
+ 2^31 - 1.
+
+ The period of this generator is about 10^46. It uses 5 words of
+ state per generator. More information can be found in the
+ following paper,
+ P. L'Ecuyer, F. Blouin, and R. Coutre, "A search for good
+ multiple recursive random number generators", `ACM
+ Transactions on Modeling and Computer Simulation' 3, 87-98
+ (1993).
+
+ -- Generator: gsl_rng_taus
+ -- Generator: gsl_rng_taus2
+ This is a maximally equidistributed combined Tausworthe generator
+ by L'Ecuyer. The sequence is,
+
+ x_n = (s1_n ^^ s2_n ^^ s3_n)
+
+ where,
+
+ s1_{n+1} = (((s1_n&4294967294)<<12)^^(((s1_n<<13)^^s1_n)>>19))
+ s2_{n+1} = (((s2_n&4294967288)<< 4)^^(((s2_n<< 2)^^s2_n)>>25))
+ s3_{n+1} = (((s3_n&4294967280)<<17)^^(((s3_n<< 3)^^s3_n)>>11))
+
+ computed modulo 2^32. In the formulas above ^^ denotes
+ "exclusive-or". Note that the algorithm relies on the properties
+ of 32-bit unsigned integers and has been implemented using a
+ bitmask of `0xFFFFFFFF' to make it work on 64 bit machines.
+
+ The period of this generator is 2^88 (about 10^26). It uses 3
+ words of state per generator. For more information see,
+
+ P. L'Ecuyer, "Maximally Equidistributed Combined Tausworthe
+ Generators", `Mathematics of Computation', 65, 213 (1996),
+ 203-213.
+
+ The generator `gsl_rng_taus2' uses the same algorithm as
+ `gsl_rng_taus' but with an improved seeding procedure described in
+ the paper,
+
+ P. L'Ecuyer, "Tables of Maximally Equidistributed Combined
+ LFSR Generators", `Mathematics of Computation', 68, 225
+ (1999), 261-269
+
+ The generator `gsl_rng_taus2' should now be used in preference to
+ `gsl_rng_taus'.
+
+ -- Generator: gsl_rng_gfsr4
+ The `gfsr4' generator is like a lagged-fibonacci generator, and
+ produces each number as an `xor''d sum of four previous values.
+
+ r_n = r_{n-A} ^^ r_{n-B} ^^ r_{n-C} ^^ r_{n-D}
+
+ Ziff (ref below) notes that "it is now widely known" that two-tap
+ registers (such as R250, which is described below) have serious
+ flaws, the most obvious one being the three-point correlation that
+ comes from the definition of the generator. Nice mathematical
+ properties can be derived for GFSR's, and numerics bears out the
+ claim that 4-tap GFSR's with appropriately chosen offsets are as
+ random as can be measured, using the author's test.
+
+ This implementation uses the values suggested the example on p392
+ of Ziff's article: A=471, B=1586, C=6988, D=9689.
+
+ If the offsets are appropriately chosen (such as the one ones in
+ this implementation), then the sequence is said to be maximal;
+ that means that the period is 2^D - 1, where D is the longest lag.
+ (It is one less than 2^D because it is not permitted to have all
+ zeros in the `ra[]' array.) For this implementation with D=9689
+ that works out to about 10^2917.
+
+ Note that the implementation of this generator using a 32-bit
+ integer amounts to 32 parallel implementations of one-bit
+ generators. One consequence of this is that the period of this
+ 32-bit generator is the same as for the one-bit generator.
+ Moreover, this independence means that all 32-bit patterns are
+ equally likely, and in particular that 0 is an allowed random
+ value. (We are grateful to Heiko Bauke for clarifying for us these
+ properties of GFSR random number generators.)
+
+ For more information see,
+ Robert M. Ziff, "Four-tap shift-register-sequence
+ random-number generators", `Computers in Physics', 12(4),
+ Jul/Aug 1998, pp 385-392.
+
+
+File: gsl-ref.info, Node: Unix random number generators, Next: Other random number generators, Prev: Random number generator algorithms, Up: Random Number Generation
+
+17.10 Unix random number generators
+===================================
+
+The standard Unix random number generators `rand', `random' and
+`rand48' are provided as part of GSL. Although these generators are
+widely available individually often they aren't all available on the
+same platform. This makes it difficult to write portable code using
+them and so we have included the complete set of Unix generators in GSL
+for convenience. Note that these generators don't produce high-quality
+randomness and aren't suitable for work requiring accurate statistics.
+However, if you won't be measuring statistical quantities and just want
+to introduce some variation into your program then these generators are
+quite acceptable.
+
+ -- Generator: gsl_rng_rand
+ This is the BSD `rand' generator. Its sequence is
+
+ x_{n+1} = (a x_n + c) mod m
+
+ with a = 1103515245, c = 12345 and m = 2^31. The seed specifies
+ the initial value, x_1. The period of this generator is 2^31, and
+ it uses 1 word of storage per generator.
+
+ -- Generator: gsl_rng_random_bsd
+ -- Generator: gsl_rng_random_libc5
+ -- Generator: gsl_rng_random_glibc2
+ These generators implement the `random' family of functions, a set
+ of linear feedback shift register generators originally used in BSD
+ Unix. There are several versions of `random' in use today: the
+ original BSD version (e.g. on SunOS4), a libc5 version (found on
+ older GNU/Linux systems) and a glibc2 version. Each version uses a
+ different seeding procedure, and thus produces different sequences.
+
+ The original BSD routines accepted a variable length buffer for the
+ generator state, with longer buffers providing higher-quality
+ randomness. The `random' function implemented algorithms for
+ buffer lengths of 8, 32, 64, 128 and 256 bytes, and the algorithm
+ with the largest length that would fit into the user-supplied
+ buffer was used. To support these algorithms additional
+ generators are available with the following names,
+
+ gsl_rng_random8_bsd
+ gsl_rng_random32_bsd
+ gsl_rng_random64_bsd
+ gsl_rng_random128_bsd
+ gsl_rng_random256_bsd
+
+ where the numeric suffix indicates the buffer length. The
+ original BSD `random' function used a 128-byte default buffer and
+ so `gsl_rng_random_bsd' has been made equivalent to
+ `gsl_rng_random128_bsd'. Corresponding versions of the `libc5'
+ and `glibc2' generators are also available, with the names
+ `gsl_rng_random8_libc5', `gsl_rng_random8_glibc2', etc.
+
+ -- Generator: gsl_rng_rand48
+ This is the Unix `rand48' generator. Its sequence is
+
+ x_{n+1} = (a x_n + c) mod m
+
+ defined on 48-bit unsigned integers with a = 25214903917, c = 11
+ and m = 2^48. The seed specifies the upper 32 bits of the initial
+ value, x_1, with the lower 16 bits set to `0x330E'. The function
+ `gsl_rng_get' returns the upper 32 bits from each term of the
+ sequence. This does not have a direct parallel in the original
+ `rand48' functions, but forcing the result to type `long int'
+ reproduces the output of `mrand48'. The function
+ `gsl_rng_uniform' uses the full 48 bits of internal state to return
+ the double precision number x_n/m, which is equivalent to the
+ function `drand48'. Note that some versions of the GNU C Library
+ contained a bug in `mrand48' function which caused it to produce
+ different results (only the lower 16-bits of the return value were
+ set).
+
+
+File: gsl-ref.info, Node: Other random number generators, Next: Random Number Generator Performance, Prev: Unix random number generators, Up: Random Number Generation
+
+17.11 Other random number generators
+====================================
+
+The generators in this section are provided for compatibility with
+existing libraries. If you are converting an existing program to use
+GSL then you can select these generators to check your new
+implementation against the original one, using the same random number
+generator. After verifying that your new program reproduces the
+original results you can then switch to a higher-quality generator.
+
+ Note that most of the generators in this section are based on single
+linear congruence relations, which are the least sophisticated type of
+generator. In particular, linear congruences have poor properties when
+used with a non-prime modulus, as several of these routines do (e.g.
+with a power of two modulus, 2^31 or 2^32). This leads to periodicity
+in the least significant bits of each number, with only the higher bits
+having any randomness. Thus if you want to produce a random bitstream
+it is best to avoid using the least significant bits.
+
+ -- Generator: gsl_rng_ranf
+ This is the CRAY random number generator `RANF'. Its sequence is
+
+ x_{n+1} = (a x_n) mod m
+
+ defined on 48-bit unsigned integers with a = 44485709377909 and m
+ = 2^48. The seed specifies the lower 32 bits of the initial value,
+ x_1, with the lowest bit set to prevent the seed taking an even
+ value. The upper 16 bits of x_1 are set to 0. A consequence of
+ this procedure is that the pairs of seeds 2 and 3, 4 and 5, etc
+ produce the same sequences.
+
+ The generator compatible with the CRAY MATHLIB routine RANF. It
+ produces double precision floating point numbers which should be
+ identical to those from the original RANF.
+
+ There is a subtlety in the implementation of the seeding. The
+ initial state is reversed through one step, by multiplying by the
+ modular inverse of a mod m. This is done for compatibility with
+ the original CRAY implementation.
+
+ Note that you can only seed the generator with integers up to
+ 2^32, while the original CRAY implementation uses non-portable
+ wide integers which can cover all 2^48 states of the generator.
+
+ The function `gsl_rng_get' returns the upper 32 bits from each term
+ of the sequence. The function `gsl_rng_uniform' uses the full 48
+ bits to return the double precision number x_n/m.
+
+ The period of this generator is 2^46.
+
+ -- Generator: gsl_rng_ranmar
+ This is the RANMAR lagged-fibonacci generator of Marsaglia, Zaman
+ and Tsang. It is a 24-bit generator, originally designed for
+ single-precision IEEE floating point numbers. It was included in
+ the CERNLIB high-energy physics library.
+
+ -- Generator: gsl_rng_r250
+ This is the shift-register generator of Kirkpatrick and Stoll. The
+ sequence is based on the recurrence
+
+ x_n = x_{n-103} ^^ x_{n-250}
+
+ where ^^ denotes "exclusive-or", defined on 32-bit words. The
+ period of this generator is about 2^250 and it uses 250 words of
+ state per generator.
+
+ For more information see,
+ S. Kirkpatrick and E. Stoll, "A very fast shift-register
+ sequence random number generator", `Journal of Computational
+ Physics', 40, 517-526 (1981)
+
+ -- Generator: gsl_rng_tt800
+ This is an earlier version of the twisted generalized feedback
+ shift-register generator, and has been superseded by the
+ development of MT19937. However, it is still an acceptable
+ generator in its own right. It has a period of 2^800 and uses 33
+ words of storage per generator.
+
+ For more information see,
+ Makoto Matsumoto and Yoshiharu Kurita, "Twisted GFSR
+ Generators II", `ACM Transactions on Modelling and Computer
+ Simulation', Vol. 4, No. 3, 1994, pages 254-266.
+
+ -- Generator: gsl_rng_vax
+ This is the VAX generator `MTH$RANDOM'. Its sequence is,
+
+ x_{n+1} = (a x_n + c) mod m
+
+ with a = 69069, c = 1 and m = 2^32. The seed specifies the
+ initial value, x_1. The period of this generator is 2^32 and it
+ uses 1 word of storage per generator.
+
+ -- Generator: gsl_rng_transputer
+ This is the random number generator from the INMOS Transputer
+ Development system. Its sequence is,
+
+ x_{n+1} = (a x_n) mod m
+
+ with a = 1664525 and m = 2^32. The seed specifies the initial
+ value, x_1.
+
+ -- Generator: gsl_rng_randu
+ This is the IBM `RANDU' generator. Its sequence is
+
+ x_{n+1} = (a x_n) mod m
+
+ with a = 65539 and m = 2^31. The seed specifies the initial value,
+ x_1. The period of this generator was only 2^29. It has become a
+ textbook example of a poor generator.
+
+ -- Generator: gsl_rng_minstd
+ This is Park and Miller's "minimal standard" MINSTD generator, a
+ simple linear congruence which takes care to avoid the major
+ pitfalls of such algorithms. Its sequence is,
+
+ x_{n+1} = (a x_n) mod m
+
+ with a = 16807 and m = 2^31 - 1 = 2147483647. The seed specifies
+ the initial value, x_1. The period of this generator is about
+ 2^31.
+
+ This generator is used in the IMSL Library (subroutine RNUN) and in
+ MATLAB (the RAND function). It is also sometimes known by the
+ acronym "GGL" (I'm not sure what that stands for).
+
+ For more information see,
+ Park and Miller, "Random Number Generators: Good ones are
+ hard to find", `Communications of the ACM', October 1988,
+ Volume 31, No 10, pages 1192-1201.
+
+ -- Generator: gsl_rng_uni
+ -- Generator: gsl_rng_uni32
+ This is a reimplementation of the 16-bit SLATEC random number
+ generator RUNIF. A generalization of the generator to 32 bits is
+ provided by `gsl_rng_uni32'. The original source code is
+ available from NETLIB.
+
+ -- Generator: gsl_rng_slatec
+ This is the SLATEC random number generator RAND. It is ancient.
+ The original source code is available from NETLIB.
+
+ -- Generator: gsl_rng_zuf
+ This is the ZUFALL lagged Fibonacci series generator of Peterson.
+ Its sequence is,
+
+ t = u_{n-273} + u_{n-607}
+ u_n = t - floor(t)
+
+ The original source code is available from NETLIB. For more
+ information see,
+ W. Petersen, "Lagged Fibonacci Random Number Generators for
+ the NEC SX-3", `International Journal of High Speed
+ Computing' (1994).
+
+ -- Generator: gsl_rng_knuthran2
+ This is a second-order multiple recursive generator described by
+ Knuth in `Seminumerical Algorithms', 3rd Ed., page 108. Its
+ sequence is,
+
+ x_n = (a_1 x_{n-1} + a_2 x_{n-2}) mod m
+
+ with a_1 = 271828183, a_2 = 314159269, and m = 2^31 - 1.
+
+ -- Generator: gsl_rng_knuthran2002
+ -- Generator: gsl_rng_knuthran
+ This is a second-order multiple recursive generator described by
+ Knuth in `Seminumerical Algorithms', 3rd Ed., Section 3.6. Knuth
+ provides its C code. The updated routine `gsl_rng_knuthran2002'
+ is from the revised 9th printing and corrects some weaknesses in
+ the earlier version, which is implemented as `gsl_rng_knuthran'.
+
+ -- Generator: gsl_rng_borosh13
+ -- Generator: gsl_rng_fishman18
+ -- Generator: gsl_rng_fishman20
+ -- Generator: gsl_rng_lecuyer21
+ -- Generator: gsl_rng_waterman14
+ These multiplicative generators are taken from Knuth's
+ `Seminumerical Algorithms', 3rd Ed., pages 106-108. Their sequence
+ is,
+
+ x_{n+1} = (a x_n) mod m
+
+ where the seed specifies the initial value, x_1. The parameters a
+ and m are as follows, Borosh-Niederreiter: a = 1812433253, m =
+ 2^32, Fishman18: a = 62089911, m = 2^31 - 1, Fishman20: a = 48271,
+ m = 2^31 - 1, L'Ecuyer: a = 40692, m = 2^31 - 249, Waterman: a =
+ 1566083941, m = 2^32.
+
+ -- Generator: gsl_rng_fishman2x
+ This is the L'Ecuyer-Fishman random number generator. It is taken
+ from Knuth's `Seminumerical Algorithms', 3rd Ed., page 108. Its
+ sequence is,
+
+ z_{n+1} = (x_n - y_n) mod m
+
+ with m = 2^31 - 1. x_n and y_n are given by the `fishman20' and
+ `lecuyer21' algorithms. The seed specifies the initial value, x_1.
+
+
+ -- Generator: gsl_rng_coveyou
+ This is the Coveyou random number generator. It is taken from
+ Knuth's `Seminumerical Algorithms', 3rd Ed., Section 3.2.2. Its
+ sequence is,
+
+ x_{n+1} = (x_n (x_n + 1)) mod m
+
+ with m = 2^32. The seed specifies the initial value, x_1.
+
+
+File: gsl-ref.info, Node: Random Number Generator Performance, Next: Random Number Generator Examples, Prev: Other random number generators, Up: Random Number Generation
+
+17.12 Performance
+=================
+
+The following table shows the relative performance of a selection the
+available random number generators. The fastest simulation quality
+generators are `taus', `gfsr4' and `mt19937'. The generators which
+offer the best mathematically-proven quality are those based on the
+RANLUX algorithm.
+
+ 1754 k ints/sec, 870 k doubles/sec, taus
+ 1613 k ints/sec, 855 k doubles/sec, gfsr4
+ 1370 k ints/sec, 769 k doubles/sec, mt19937
+ 565 k ints/sec, 571 k doubles/sec, ranlxs0
+ 400 k ints/sec, 405 k doubles/sec, ranlxs1
+ 490 k ints/sec, 389 k doubles/sec, mrg
+ 407 k ints/sec, 297 k doubles/sec, ranlux
+ 243 k ints/sec, 254 k doubles/sec, ranlxd1
+ 251 k ints/sec, 253 k doubles/sec, ranlxs2
+ 238 k ints/sec, 215 k doubles/sec, cmrg
+ 247 k ints/sec, 198 k doubles/sec, ranlux389
+ 141 k ints/sec, 140 k doubles/sec, ranlxd2
+
+ 1852 k ints/sec, 935 k doubles/sec, ran3
+ 813 k ints/sec, 575 k doubles/sec, ran0
+ 787 k ints/sec, 476 k doubles/sec, ran1
+ 379 k ints/sec, 292 k doubles/sec, ran2
+
+
+File: gsl-ref.info, Node: Random Number Generator Examples, Next: Random Number References and Further Reading, Prev: Random Number Generator Performance, Up: Random Number Generation
+
+17.13 Examples
+==============
+
+The following program demonstrates the use of a random number generator
+to produce uniform random numbers in the range [0.0, 1.0),
+
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+
+ int
+ main (void)
+ {
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ int i, n = 10;
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (i = 0; i < n; i++)
+ {
+ double u = gsl_rng_uniform (r);
+ printf ("%.5f\n", u);
+ }
+
+ gsl_rng_free (r);
+
+ return 0;
+ }
+
+Here is the output of the program,
+
+ $ ./a.out
+ 0.99974
+ 0.16291
+ 0.28262
+ 0.94720
+ 0.23166
+ 0.48497
+ 0.95748
+ 0.74431
+ 0.54004
+ 0.73995
+
+The numbers depend on the seed used by the generator. The default seed
+can be changed with the `GSL_RNG_SEED' environment variable to produce
+a different stream of numbers. The generator itself can be changed
+using the environment variable `GSL_RNG_TYPE'. Here is the output of
+the program using a seed value of 123 and the multiple-recursive
+generator `mrg',
+
+ $ GSL_RNG_SEED=123 GSL_RNG_TYPE=mrg ./a.out
+ GSL_RNG_TYPE=mrg
+ GSL_RNG_SEED=123
+ 0.33050
+ 0.86631
+ 0.32982
+ 0.67620
+ 0.53391
+ 0.06457
+ 0.16847
+ 0.70229
+ 0.04371
+ 0.86374
+
+
+File: gsl-ref.info, Node: Random Number References and Further Reading, Next: Random Number Acknowledgements, Prev: Random Number Generator Examples, Up: Random Number Generation
+
+17.14 References and Further Reading
+====================================
+
+The subject of random number generation and testing is reviewed
+extensively in Knuth's `Seminumerical Algorithms'.
+
+ Donald E. Knuth, `The Art of Computer Programming: Seminumerical
+ Algorithms' (Vol 2, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896842.
+
+Further information is available in the review paper written by Pierre
+L'Ecuyer,
+
+ P. L'Ecuyer, "Random Number Generation", Chapter 4 of the Handbook
+ on Simulation, Jerry Banks Ed., Wiley, 1998, 93-137.
+
+ `http://www.iro.umontreal.ca/~lecuyer/papers.html' in the file
+ `handsim.ps'.
+
+The source code for the DIEHARD random number generator tests is also
+available online,
+
+ `DIEHARD source code' G. Marsaglia,
+
+ `http://stat.fsu.edu/pub/diehard/'
+
+A comprehensive set of random number generator tests is available from
+NIST,
+
+ NIST Special Publication 800-22, "A Statistical Test Suite for the
+ Validation of Random Number Generators and Pseudo Random Number
+ Generators for Cryptographic Applications".
+
+ `http://csrc.nist.gov/rng/'
+
+
+File: gsl-ref.info, Node: Random Number Acknowledgements, Prev: Random Number References and Further Reading, Up: Random Number Generation
+
+17.15 Acknowledgements
+======================
+
+Thanks to Makoto Matsumoto, Takuji Nishimura and Yoshiharu Kurita for
+making the source code to their generators (MT19937, MM&TN; TT800,
+MM&YK) available under the GNU General Public License. Thanks to Martin
+Lu"scher for providing notes and source code for the RANLXS and RANLXD
+generators.
+
+
+File: gsl-ref.info, Node: Quasi-Random Sequences, Next: Random Number Distributions, Prev: Random Number Generation, Up: Top
+
+18 Quasi-Random Sequences
+*************************
+
+This chapter describes functions for generating quasi-random sequences
+in arbitrary dimensions. A quasi-random sequence progressively covers a
+d-dimensional space with a set of points that are uniformly
+distributed. Quasi-random sequences are also known as low-discrepancy
+sequences. The quasi-random sequence generators use an interface that
+is similar to the interface for random number generators, except that
+seeding is not required--each generator produces a single sequence.
+
+ The functions described in this section are declared in the header
+file `gsl_qrng.h'.
+
+* Menu:
+
+* Quasi-random number generator initialization::
+* Sampling from a quasi-random number generator::
+* Auxiliary quasi-random number generator functions::
+* Saving and resorting quasi-random number generator state::
+* Quasi-random number generator algorithms::
+* Quasi-random number generator examples::
+* Quasi-random number references::
+
+
+File: gsl-ref.info, Node: Quasi-random number generator initialization, Next: Sampling from a quasi-random number generator, Up: Quasi-Random Sequences
+
+18.1 Quasi-random number generator initialization
+=================================================
+
+ -- Function: gsl_qrng * gsl_qrng_alloc (const gsl_qrng_type * T,
+ unsigned int D)
+ This function returns a pointer to a newly-created instance of a
+ quasi-random sequence generator of type T and dimension D. If
+ there is insufficient memory to create the generator then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: void gsl_qrng_free (gsl_qrng * Q)
+ This function frees all the memory associated with the generator Q.
+
+ -- Function: void gsl_qrng_init (gsl_qrng * Q)
+ This function reinitializes the generator Q to its starting point.
+ Note that quasi-random sequences do not use a seed and always
+ produce the same set of values.
+
+
+File: gsl-ref.info, Node: Sampling from a quasi-random number generator, Next: Auxiliary quasi-random number generator functions, Prev: Quasi-random number generator initialization, Up: Quasi-Random Sequences
+
+18.2 Sampling from a quasi-random number generator
+==================================================
+
+ -- Function: int gsl_qrng_get (const gsl_qrng * Q, double X[])
+ This function stores the next point from the sequence generator Q
+ in the array X. The space available for X must match the
+ dimension of the generator. The point X will lie in the range 0 <
+ x_i < 1 for each x_i.
+
+
+File: gsl-ref.info, Node: Auxiliary quasi-random number generator functions, Next: Saving and resorting quasi-random number generator state, Prev: Sampling from a quasi-random number generator, Up: Quasi-Random Sequences
+
+18.3 Auxiliary quasi-random number generator functions
+======================================================
+
+ -- Function: const char * gsl_qrng_name (const gsl_qrng * Q)
+ This function returns a pointer to the name of the generator.
+
+ -- Function: size_t gsl_qrng_size (const gsl_qrng * Q)
+ -- Function: void * gsl_qrng_state (const gsl_qrng * Q)
+ These functions return a pointer to the state of generator R and
+ its size. You can use this information to access the state
+ directly. For example, the following code will write the state of
+ a generator to a stream,
+
+ void * state = gsl_qrng_state (q);
+ size_t n = gsl_qrng_size (q);
+ fwrite (state, n, 1, stream);
+
+
+File: gsl-ref.info, Node: Saving and resorting quasi-random number generator state, Next: Quasi-random number generator algorithms, Prev: Auxiliary quasi-random number generator functions, Up: Quasi-Random Sequences
+
+18.4 Saving and resorting quasi-random number generator state
+=============================================================
+
+ -- Function: int gsl_qrng_memcpy (gsl_qrng * DEST, const gsl_qrng *
+ SRC)
+ This function copies the quasi-random sequence generator SRC into
+ the pre-existing generator DEST, making DEST into an exact copy of
+ SRC. The two generators must be of the same type.
+
+ -- Function: gsl_qrng * gsl_qrng_clone (const gsl_qrng * Q)
+ This function returns a pointer to a newly created generator which
+ is an exact copy of the generator Q.
+
+
+File: gsl-ref.info, Node: Quasi-random number generator algorithms, Next: Quasi-random number generator examples, Prev: Saving and resorting quasi-random number generator state, Up: Quasi-Random Sequences
+
+18.5 Quasi-random number generator algorithms
+=============================================
+
+The following quasi-random sequence algorithms are available,
+
+ -- Generator: gsl_qrng_niederreiter_2
+ This generator uses the algorithm described in Bratley, Fox,
+ Niederreiter, `ACM Trans. Model. Comp. Sim.' 2, 195 (1992). It is
+ valid up to 12 dimensions.
+
+ -- Generator: gsl_qrng_sobol
+ This generator uses the Sobol sequence described in Antonov,
+ Saleev, `USSR Comput. Maths. Math. Phys.' 19, 252 (1980). It is
+ valid up to 40 dimensions.
+
+
+File: gsl-ref.info, Node: Quasi-random number generator examples, Next: Quasi-random number references, Prev: Quasi-random number generator algorithms, Up: Quasi-Random Sequences
+
+18.6 Examples
+=============
+
+The following program prints the first 1024 points of the 2-dimensional
+Sobol sequence.
+
+ #include <stdio.h>
+ #include <gsl/gsl_qrng.h>
+
+ int
+ main (void)
+ {
+ int i;
+ gsl_qrng * q = gsl_qrng_alloc (gsl_qrng_sobol, 2);
+
+ for (i = 0; i < 1024; i++)
+ {
+ double v[2];
+ gsl_qrng_get (q, v);
+ printf ("%.5f %.5f\n", v[0], v[1]);
+ }
+
+ gsl_qrng_free (q);
+ return 0;
+ }
+
+Here is the output from the program,
+
+ $ ./a.out
+ 0.50000 0.50000
+ 0.75000 0.25000
+ 0.25000 0.75000
+ 0.37500 0.37500
+ 0.87500 0.87500
+ 0.62500 0.12500
+ 0.12500 0.62500
+ ....
+
+It can be seen that successive points progressively fill-in the spaces
+between previous points.
+
+
+File: gsl-ref.info, Node: Quasi-random number references, Prev: Quasi-random number generator examples, Up: Quasi-Random Sequences
+
+18.7 References
+===============
+
+The implementations of the quasi-random sequence routines are based on
+the algorithms described in the following paper,
+
+ P. Bratley and B.L. Fox and H. Niederreiter, "Algorithm 738:
+ Programs to Generate Niederreiter's Low-discrepancy Sequences",
+ `ACM Transactions on Mathematical Software', Vol. 20, No. 4,
+ December, 1994, p. 494-495.
+
+
+File: gsl-ref.info, Node: Random Number Distributions, Next: Statistics, Prev: Quasi-Random Sequences, Up: Top
+
+19 Random Number Distributions
+******************************
+
+This chapter describes functions for generating random variates and
+computing their probability distributions. Samples from the
+distributions described in this chapter can be obtained using any of the
+random number generators in the library as an underlying source of
+randomness.
+
+ In the simplest cases a non-uniform distribution can be obtained
+analytically from the uniform distribution of a random number generator
+by applying an appropriate transformation. This method uses one call to
+the random number generator. More complicated distributions are created
+by the "acceptance-rejection" method, which compares the desired
+distribution against a distribution which is similar and known
+analytically. This usually requires several samples from the generator.
+
+ The library also provides cumulative distribution functions and
+inverse cumulative distribution functions, sometimes referred to as
+quantile functions. The cumulative distribution functions and their
+inverses are computed separately for the upper and lower tails of the
+distribution, allowing full accuracy to be retained for small results.
+
+ The functions for random variates and probability density functions
+described in this section are declared in `gsl_randist.h'. The
+corresponding cumulative distribution functions are declared in
+`gsl_cdf.h'.
+
+ Note that the discrete random variate functions always return a
+value of type `unsigned int', and on most platforms this has a maximum
+value of 2^32-1 ~=~ 4.29e9. They should only be called with a safe
+range of parameters (where there is a negligible probability of a
+variate exceeding this limit) to prevent incorrect results due to
+overflow.
+
+* Menu:
+
+* Random Number Distribution Introduction::
+* The Gaussian Distribution::
+* The Gaussian Tail Distribution::
+* The Bivariate Gaussian Distribution::
+* The Exponential Distribution::
+* The Laplace Distribution::
+* The Exponential Power Distribution::
+* The Cauchy Distribution::
+* The Rayleigh Distribution::
+* The Rayleigh Tail Distribution::
+* The Landau Distribution::
+* The Levy alpha-Stable Distributions::
+* The Levy skew alpha-Stable Distribution::
+* The Gamma Distribution::
+* The Flat (Uniform) Distribution::
+* The Lognormal Distribution::
+* The Chi-squared Distribution::
+* The F-distribution::
+* The t-distribution::
+* The Beta Distribution::
+* The Logistic Distribution::
+* The Pareto Distribution::
+* Spherical Vector Distributions::
+* The Weibull Distribution::
+* The Type-1 Gumbel Distribution::
+* The Type-2 Gumbel Distribution::
+* The Dirichlet Distribution::
+* General Discrete Distributions::
+* The Poisson Distribution::
+* The Bernoulli Distribution::
+* The Binomial Distribution::
+* The Multinomial Distribution::
+* The Negative Binomial Distribution::
+* The Pascal Distribution::
+* The Geometric Distribution::
+* The Hypergeometric Distribution::
+* The Logarithmic Distribution::
+* Shuffling and Sampling::
+* Random Number Distribution Examples::
+* Random Number Distribution References and Further Reading::
+
+
+File: gsl-ref.info, Node: Random Number Distribution Introduction, Next: The Gaussian Distribution, Up: Random Number Distributions
+
+19.1 Introduction
+=================
+
+Continuous random number distributions are defined by a probability
+density function, p(x), such that the probability of x occurring in the
+infinitesimal range x to x+dx is p dx.
+
+ The cumulative distribution function for the lower tail P(x) is
+defined by the integral,
+
+ P(x) = \int_{-\infty}^{x} dx' p(x')
+
+and gives the probability of a variate taking a value less than x.
+
+ The cumulative distribution function for the upper tail Q(x) is
+defined by the integral,
+
+ Q(x) = \int_{x}^{+\infty} dx' p(x')
+
+and gives the probability of a variate taking a value greater than x.
+
+ The upper and lower cumulative distribution functions are related by
+P(x) + Q(x) = 1 and satisfy 0 <= P(x) <= 1, 0 <= Q(x) <= 1.
+
+ The inverse cumulative distributions, x=P^{-1}(P) and x=Q^{-1}(Q)
+give the values of x which correspond to a specific value of P or Q.
+They can be used to find confidence limits from probability values.
+
+ For discrete distributions the probability of sampling the integer
+value k is given by p(k), where \sum_k p(k) = 1. The cumulative
+distribution for the lower tail P(k) of a discrete distribution is
+defined as,
+
+ P(k) = \sum_{i <= k} p(i)
+
+where the sum is over the allowed range of the distribution less than
+or equal to k.
+
+ The cumulative distribution for the upper tail of a discrete
+distribution Q(k) is defined as
+
+ Q(k) = \sum_{i > k} p(i)
+
+giving the sum of probabilities for all values greater than k. These
+two definitions satisfy the identity P(k)+Q(k)=1.
+
+ If the range of the distribution is 1 to n inclusive then P(n)=1,
+Q(n)=0 while P(1) = p(1), Q(1)=1-p(1).
+
+
+File: gsl-ref.info, Node: The Gaussian Distribution, Next: The Gaussian Tail Distribution, Prev: Random Number Distribution Introduction, Up: Random Number Distributions
+
+19.2 The Gaussian Distribution
+==============================
+
+ -- Function: double gsl_ran_gaussian (const gsl_rng * R, double SIGMA)
+ This function returns a Gaussian random variate, with mean zero and
+ standard deviation SIGMA. The probability distribution for
+ Gaussian random variates is,
+
+ p(x) dx = {1 \over \sqrt{2 \pi \sigma^2}} \exp (-x^2 / 2\sigma^2) dx
+
+ for x in the range -\infty to +\infty. Use the transformation z =
+ \mu + x on the numbers returned by `gsl_ran_gaussian' to obtain a
+ Gaussian distribution with mean \mu. This function uses the
+ Box-Mueller algorithm which requires two calls to the random
+ number generator R.
+
+ -- Function: double gsl_ran_gaussian_pdf (double X, double SIGMA)
+ This function computes the probability density p(x) at X for a
+ Gaussian distribution with standard deviation SIGMA, using the
+ formula given above.
+
+
+ -- Function: double gsl_ran_gaussian_ziggurat (const gsl_rng * R,
+ double SIGMA)
+ -- Function: double gsl_ran_gaussian_ratio_method (const gsl_rng * R,
+ double SIGMA)
+ This function computes a Gaussian random variate using the
+ alternative Marsaglia-Tsang ziggurat and Kinderman-Monahan-Leva
+ ratio methods. The Ziggurat algorithm is the fastest available
+ algorithm in most cases.
+
+ -- Function: double gsl_ran_ugaussian (const gsl_rng * R)
+ -- Function: double gsl_ran_ugaussian_pdf (double X)
+ -- Function: double gsl_ran_ugaussian_ratio_method (const gsl_rng * R)
+ These functions compute results for the unit Gaussian
+ distribution. They are equivalent to the functions above with a
+ standard deviation of one, SIGMA = 1.
+
+ -- Function: double gsl_cdf_gaussian_P (double X, double SIGMA)
+ -- Function: double gsl_cdf_gaussian_Q (double X, double SIGMA)
+ -- Function: double gsl_cdf_gaussian_Pinv (double P, double SIGMA)
+ -- Function: double gsl_cdf_gaussian_Qinv (double Q, double SIGMA)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Gaussian distribution with
+ standard deviation SIGMA.
+
+ -- Function: double gsl_cdf_ugaussian_P (double X)
+ -- Function: double gsl_cdf_ugaussian_Q (double X)
+ -- Function: double gsl_cdf_ugaussian_Pinv (double P)
+ -- Function: double gsl_cdf_ugaussian_Qinv (double Q)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the unit Gaussian distribution.
+
+
+File: gsl-ref.info, Node: The Gaussian Tail Distribution, Next: The Bivariate Gaussian Distribution, Prev: The Gaussian Distribution, Up: Random Number Distributions
+
+19.3 The Gaussian Tail Distribution
+===================================
+
+ -- Function: double gsl_ran_gaussian_tail (const gsl_rng * R, double
+ A, double SIGMA)
+ This function provides random variates from the upper tail of a
+ Gaussian distribution with standard deviation SIGMA. The values
+ returned are larger than the lower limit A, which must be
+ positive. The method is based on Marsaglia's famous
+ rectangle-wedge-tail algorithm (Ann. Math. Stat. 32, 894-899
+ (1961)), with this aspect explained in Knuth, v2, 3rd ed, p139,586
+ (exercise 11).
+
+ The probability distribution for Gaussian tail random variates is,
+
+ p(x) dx = {1 \over N(a;\sigma) \sqrt{2 \pi \sigma^2}} \exp (- x^2/(2 \sigma^2)) dx
+
+ for x > a where N(a;\sigma) is the normalization constant,
+
+ N(a;\sigma) = (1/2) erfc(a / sqrt(2 sigma^2)).
+
+
+ -- Function: double gsl_ran_gaussian_tail_pdf (double X, double A,
+ double SIGMA)
+ This function computes the probability density p(x) at X for a
+ Gaussian tail distribution with standard deviation SIGMA and lower
+ limit A, using the formula given above.
+
+
+ -- Function: double gsl_ran_ugaussian_tail (const gsl_rng * R, double
+ A)
+ -- Function: double gsl_ran_ugaussian_tail_pdf (double X, double A)
+ These functions compute results for the tail of a unit Gaussian
+ distribution. They are equivalent to the functions above with a
+ standard deviation of one, SIGMA = 1.
+
+
+File: gsl-ref.info, Node: The Bivariate Gaussian Distribution, Next: The Exponential Distribution, Prev: The Gaussian Tail Distribution, Up: Random Number Distributions
+
+19.4 The Bivariate Gaussian Distribution
+========================================
+
+ -- Function: void gsl_ran_bivariate_gaussian (const gsl_rng * R,
+ double SIGMA_X, double SIGMA_Y, double RHO, double * X,
+ double * Y)
+ This function generates a pair of correlated Gaussian variates,
+ with mean zero, correlation coefficient RHO and standard deviations
+ SIGMA_X and SIGMA_Y in the x and y directions. The probability
+ distribution for bivariate Gaussian random variates is,
+
+ p(x,y) dx dy = {1 \over 2 \pi \sigma_x \sigma_y \sqrt{1-\rho^2}} \exp (-(x^2/\sigma_x^2 + y^2/\sigma_y^2 - 2 \rho x y/(\sigma_x\sigma_y))/2(1-\rho^2)) dx dy
+
+ for x,y in the range -\infty to +\infty. The correlation
+ coefficient RHO should lie between 1 and -1.
+
+ -- Function: double gsl_ran_bivariate_gaussian_pdf (double X, double
+ Y, double SIGMA_X, double SIGMA_Y, double RHO)
+ This function computes the probability density p(x,y) at (X,Y) for
+ a bivariate Gaussian distribution with standard deviations
+ SIGMA_X, SIGMA_Y and correlation coefficient RHO, using the
+ formula given above.
+
+
+
+File: gsl-ref.info, Node: The Exponential Distribution, Next: The Laplace Distribution, Prev: The Bivariate Gaussian Distribution, Up: Random Number Distributions
+
+19.5 The Exponential Distribution
+=================================
+
+ -- Function: double gsl_ran_exponential (const gsl_rng * R, double MU)
+ This function returns a random variate from the exponential
+ distribution with mean MU. The distribution is,
+
+ p(x) dx = {1 \over \mu} \exp(-x/\mu) dx
+
+ for x >= 0.
+
+ -- Function: double gsl_ran_exponential_pdf (double X, double MU)
+ This function computes the probability density p(x) at X for an
+ exponential distribution with mean MU, using the formula given
+ above.
+
+
+ -- Function: double gsl_cdf_exponential_P (double X, double MU)
+ -- Function: double gsl_cdf_exponential_Q (double X, double MU)
+ -- Function: double gsl_cdf_exponential_Pinv (double P, double MU)
+ -- Function: double gsl_cdf_exponential_Qinv (double Q, double MU)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the exponential distribution
+ with mean MU.
+
+
+File: gsl-ref.info, Node: The Laplace Distribution, Next: The Exponential Power Distribution, Prev: The Exponential Distribution, Up: Random Number Distributions
+
+19.6 The Laplace Distribution
+=============================
+
+ -- Function: double gsl_ran_laplace (const gsl_rng * R, double A)
+ This function returns a random variate from the Laplace
+ distribution with width A. The distribution is,
+
+ p(x) dx = {1 \over 2 a} \exp(-|x/a|) dx
+
+ for -\infty < x < \infty.
+
+ -- Function: double gsl_ran_laplace_pdf (double X, double A)
+ This function computes the probability density p(x) at X for a
+ Laplace distribution with width A, using the formula given above.
+
+
+ -- Function: double gsl_cdf_laplace_P (double X, double A)
+ -- Function: double gsl_cdf_laplace_Q (double X, double A)
+ -- Function: double gsl_cdf_laplace_Pinv (double P, double A)
+ -- Function: double gsl_cdf_laplace_Qinv (double Q, double A)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Laplace distribution with
+ width A.
+
+
+File: gsl-ref.info, Node: The Exponential Power Distribution, Next: The Cauchy Distribution, Prev: The Laplace Distribution, Up: Random Number Distributions
+
+19.7 The Exponential Power Distribution
+=======================================
+
+ -- Function: double gsl_ran_exppow (const gsl_rng * R, double A,
+ double B)
+ This function returns a random variate from the exponential power
+ distribution with scale parameter A and exponent B. The
+ distribution is,
+
+ p(x) dx = {1 \over 2 a \Gamma(1+1/b)} \exp(-|x/a|^b) dx
+
+ for x >= 0. For b = 1 this reduces to the Laplace distribution.
+ For b = 2 it has the same form as a gaussian distribution, but
+ with a = \sqrt{2} \sigma.
+
+ -- Function: double gsl_ran_exppow_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for an
+ exponential power distribution with scale parameter A and exponent
+ B, using the formula given above.
+
+
+ -- Function: double gsl_cdf_exppow_P (double X, double A, double B)
+ -- Function: double gsl_cdf_exppow_Q (double X, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) for the exponential power distribution with parameters
+ A and B.
+
+
+File: gsl-ref.info, Node: The Cauchy Distribution, Next: The Rayleigh Distribution, Prev: The Exponential Power Distribution, Up: Random Number Distributions
+
+19.8 The Cauchy Distribution
+============================
+
+ -- Function: double gsl_ran_cauchy (const gsl_rng * R, double A)
+ This function returns a random variate from the Cauchy
+ distribution with scale parameter A. The probability distribution
+ for Cauchy random variates is,
+
+ p(x) dx = {1 \over a\pi (1 + (x/a)^2) } dx
+
+ for x in the range -\infty to +\infty. The Cauchy distribution is
+ also known as the Lorentz distribution.
+
+ -- Function: double gsl_ran_cauchy_pdf (double X, double A)
+ This function computes the probability density p(x) at X for a
+ Cauchy distribution with scale parameter A, using the formula
+ given above.
+
+
+ -- Function: double gsl_cdf_cauchy_P (double X, double A)
+ -- Function: double gsl_cdf_cauchy_Q (double X, double A)
+ -- Function: double gsl_cdf_cauchy_Pinv (double P, double A)
+ -- Function: double gsl_cdf_cauchy_Qinv (double Q, double A)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Cauchy distribution with
+ scale parameter A.
+
+
+File: gsl-ref.info, Node: The Rayleigh Distribution, Next: The Rayleigh Tail Distribution, Prev: The Cauchy Distribution, Up: Random Number Distributions
+
+19.9 The Rayleigh Distribution
+==============================
+
+ -- Function: double gsl_ran_rayleigh (const gsl_rng * R, double SIGMA)
+ This function returns a random variate from the Rayleigh
+ distribution with scale parameter SIGMA. The distribution is,
+
+ p(x) dx = {x \over \sigma^2} \exp(- x^2/(2 \sigma^2)) dx
+
+ for x > 0.
+
+ -- Function: double gsl_ran_rayleigh_pdf (double X, double SIGMA)
+ This function computes the probability density p(x) at X for a
+ Rayleigh distribution with scale parameter SIGMA, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_rayleigh_P (double X, double SIGMA)
+ -- Function: double gsl_cdf_rayleigh_Q (double X, double SIGMA)
+ -- Function: double gsl_cdf_rayleigh_Pinv (double P, double SIGMA)
+ -- Function: double gsl_cdf_rayleigh_Qinv (double Q, double SIGMA)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Rayleigh distribution with
+ scale parameter SIGMA.
+
+
+File: gsl-ref.info, Node: The Rayleigh Tail Distribution, Next: The Landau Distribution, Prev: The Rayleigh Distribution, Up: Random Number Distributions
+
+19.10 The Rayleigh Tail Distribution
+====================================
+
+ -- Function: double gsl_ran_rayleigh_tail (const gsl_rng * R, double
+ A, double SIGMA)
+ This function returns a random variate from the tail of the
+ Rayleigh distribution with scale parameter SIGMA and a lower limit
+ of A. The distribution is,
+
+ p(x) dx = {x \over \sigma^2} \exp ((a^2 - x^2) /(2 \sigma^2)) dx
+
+ for x > a.
+
+ -- Function: double gsl_ran_rayleigh_tail_pdf (double X, double A,
+ double SIGMA)
+ This function computes the probability density p(x) at X for a
+ Rayleigh tail distribution with scale parameter SIGMA and lower
+ limit A, using the formula given above.
+
+
+
+File: gsl-ref.info, Node: The Landau Distribution, Next: The Levy alpha-Stable Distributions, Prev: The Rayleigh Tail Distribution, Up: Random Number Distributions
+
+19.11 The Landau Distribution
+=============================
+
+ -- Function: double gsl_ran_landau (const gsl_rng * R)
+ This function returns a random variate from the Landau
+ distribution. The probability distribution for Landau random
+ variates is defined analytically by the complex integral,
+
+ p(x) = (1/(2 \pi i)) \int_{c-i\infty}^{c+i\infty} ds exp(s log(s) + x s)
+ For numerical purposes it is more convenient to use the following
+ equivalent form of the integral,
+
+ p(x) = (1/\pi) \int_0^\infty dt \exp(-t \log(t) - x t) \sin(\pi t).
+
+ -- Function: double gsl_ran_landau_pdf (double X)
+ This function computes the probability density p(x) at X for the
+ Landau distribution using an approximation to the formula given
+ above.
+
+
+
+File: gsl-ref.info, Node: The Levy alpha-Stable Distributions, Next: The Levy skew alpha-Stable Distribution, Prev: The Landau Distribution, Up: Random Number Distributions
+
+19.12 The Levy alpha-Stable Distributions
+=========================================
+
+ -- Function: double gsl_ran_levy (const gsl_rng * R, double C, double
+ ALPHA)
+ This function returns a random variate from the Levy symmetric
+ stable distribution with scale C and exponent ALPHA. The symmetric
+ stable probability distribution is defined by a fourier transform,
+
+ p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^alpha)
+
+ There is no explicit solution for the form of p(x) and the library
+ does not define a corresponding `pdf' function. For \alpha = 1
+ the distribution reduces to the Cauchy distribution. For \alpha =
+ 2 it is a Gaussian distribution with \sigma = \sqrt{2} c. For
+ \alpha < 1 the tails of the distribution become extremely wide.
+
+ The algorithm only works for 0 < alpha <= 2.
+
+
+
+File: gsl-ref.info, Node: The Levy skew alpha-Stable Distribution, Next: The Gamma Distribution, Prev: The Levy alpha-Stable Distributions, Up: Random Number Distributions
+
+19.13 The Levy skew alpha-Stable Distribution
+=============================================
+
+ -- Function: double gsl_ran_levy_skew (const gsl_rng * R, double C,
+ double ALPHA, double BETA)
+ This function returns a random variate from the Levy skew stable
+ distribution with scale C, exponent ALPHA and skewness parameter
+ BETA. The skewness parameter must lie in the range [-1,1]. The
+ Levy skew stable probability distribution is defined by a fourier
+ transform,
+
+ p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^alpha (1-i beta sign(t) tan(pi alpha/2)))
+
+ When \alpha = 1 the term \tan(\pi \alpha/2) is replaced by
+ -(2/\pi)\log|t|. There is no explicit solution for the form of
+ p(x) and the library does not define a corresponding `pdf'
+ function. For \alpha = 2 the distribution reduces to a Gaussian
+ distribution with \sigma = \sqrt{2} c and the skewness parameter
+ has no effect. For \alpha < 1 the tails of the distribution
+ become extremely wide. The symmetric distribution corresponds to
+ \beta = 0.
+
+ The algorithm only works for 0 < alpha <= 2.
+
+ The Levy alpha-stable distributions have the property that if N
+alpha-stable variates are drawn from the distribution p(c, \alpha,
+\beta) then the sum Y = X_1 + X_2 + \dots + X_N will also be
+distributed as an alpha-stable variate, p(N^(1/\alpha) c, \alpha,
+\beta).
+
+
+
+File: gsl-ref.info, Node: The Gamma Distribution, Next: The Flat (Uniform) Distribution, Prev: The Levy skew alpha-Stable Distribution, Up: Random Number Distributions
+
+19.14 The Gamma Distribution
+============================
+
+ -- Function: double gsl_ran_gamma (const gsl_rng * R, double A, double
+ B)
+ This function returns a random variate from the gamma
+ distribution. The distribution function is,
+
+ p(x) dx = {1 \over \Gamma(a) b^a} x^{a-1} e^{-x/b} dx
+
+ for x > 0.
+
+ The gamma distribution with an integer parameter A is known as the
+ Erlang distribution.
+
+ The variates are computed using the Marsaglia-Tsang fast gamma
+ method. This function for this method was previously called
+ `gsl_ran_gamma_mt' and can still be accessed using this name.
+
+ -- Function: double gsl_ran_gamma_knuth (const gsl_rng * R, double A,
+ double B)
+ This function returns a gamma variate using the algorithms from
+ Knuth (vol 2).
+
+ -- Function: double gsl_ran_gamma_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ gamma distribution with parameters A and B, using the formula
+ given above.
+
+
+ -- Function: double gsl_cdf_gamma_P (double X, double A, double B)
+ -- Function: double gsl_cdf_gamma_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_gamma_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_gamma_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the gamma distribution with
+ parameters A and B.
+
+
+File: gsl-ref.info, Node: The Flat (Uniform) Distribution, Next: The Lognormal Distribution, Prev: The Gamma Distribution, Up: Random Number Distributions
+
+19.15 The Flat (Uniform) Distribution
+=====================================
+
+ -- Function: double gsl_ran_flat (const gsl_rng * R, double A, double
+ B)
+ This function returns a random variate from the flat (uniform)
+ distribution from A to B. The distribution is,
+
+ p(x) dx = {1 \over (b-a)} dx
+
+ if a <= x < b and 0 otherwise.
+
+ -- Function: double gsl_ran_flat_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ uniform distribution from A to B, using the formula given above.
+
+
+ -- Function: double gsl_cdf_flat_P (double X, double A, double B)
+ -- Function: double gsl_cdf_flat_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_flat_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_flat_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for a uniform distribution from A to
+ B.
+
+
+File: gsl-ref.info, Node: The Lognormal Distribution, Next: The Chi-squared Distribution, Prev: The Flat (Uniform) Distribution, Up: Random Number Distributions
+
+19.16 The Lognormal Distribution
+================================
+
+ -- Function: double gsl_ran_lognormal (const gsl_rng * R, double ZETA,
+ double SIGMA)
+ This function returns a random variate from the lognormal
+ distribution. The distribution function is,
+
+ p(x) dx = {1 \over x \sqrt{2 \pi \sigma^2} } \exp(-(\ln(x) - \zeta)^2/2 \sigma^2) dx
+
+ for x > 0.
+
+ -- Function: double gsl_ran_lognormal_pdf (double X, double ZETA,
+ double SIGMA)
+ This function computes the probability density p(x) at X for a
+ lognormal distribution with parameters ZETA and SIGMA, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_lognormal_P (double X, double ZETA, double
+ SIGMA)
+ -- Function: double gsl_cdf_lognormal_Q (double X, double ZETA, double
+ SIGMA)
+ -- Function: double gsl_cdf_lognormal_Pinv (double P, double ZETA,
+ double SIGMA)
+ -- Function: double gsl_cdf_lognormal_Qinv (double Q, double ZETA,
+ double SIGMA)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the lognormal distribution with
+ parameters ZETA and SIGMA.
+
+
+File: gsl-ref.info, Node: The Chi-squared Distribution, Next: The F-distribution, Prev: The Lognormal Distribution, Up: Random Number Distributions
+
+19.17 The Chi-squared Distribution
+==================================
+
+The chi-squared distribution arises in statistics. If Y_i are n
+independent gaussian random variates with unit variance then the
+sum-of-squares,
+
+ X_i = \sum_i Y_i^2
+
+has a chi-squared distribution with n degrees of freedom.
+
+ -- Function: double gsl_ran_chisq (const gsl_rng * R, double NU)
+ This function returns a random variate from the chi-squared
+ distribution with NU degrees of freedom. The distribution function
+ is,
+
+ p(x) dx = {1 \over 2 \Gamma(\nu/2) } (x/2)^{\nu/2 - 1} \exp(-x/2) dx
+
+ for x >= 0.
+
+ -- Function: double gsl_ran_chisq_pdf (double X, double NU)
+ This function computes the probability density p(x) at X for a
+ chi-squared distribution with NU degrees of freedom, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_chisq_P (double X, double NU)
+ -- Function: double gsl_cdf_chisq_Q (double X, double NU)
+ -- Function: double gsl_cdf_chisq_Pinv (double P, double NU)
+ -- Function: double gsl_cdf_chisq_Qinv (double Q, double NU)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the chi-squared distribution
+ with NU degrees of freedom.
+
+
+File: gsl-ref.info, Node: The F-distribution, Next: The t-distribution, Prev: The Chi-squared Distribution, Up: Random Number Distributions
+
+19.18 The F-distribution
+========================
+
+The F-distribution arises in statistics. If Y_1 and Y_2 are
+chi-squared deviates with \nu_1 and \nu_2 degrees of freedom then the
+ratio,
+
+ X = { (Y_1 / \nu_1) \over (Y_2 / \nu_2) }
+
+has an F-distribution F(x;\nu_1,\nu_2).
+
+ -- Function: double gsl_ran_fdist (const gsl_rng * R, double NU1,
+ double NU2)
+ This function returns a random variate from the F-distribution
+ with degrees of freedom NU1 and NU2. The distribution function is,
+
+ p(x) dx =
+ { \Gamma((\nu_1 + \nu_2)/2)
+ \over \Gamma(\nu_1/2) \Gamma(\nu_2/2) }
+ \nu_1^{\nu_1/2} \nu_2^{\nu_2/2}
+ x^{\nu_1/2 - 1} (\nu_2 + \nu_1 x)^{-\nu_1/2 -\nu_2/2}
+
+ for x >= 0.
+
+ -- Function: double gsl_ran_fdist_pdf (double X, double NU1, double
+ NU2)
+ This function computes the probability density p(x) at X for an
+ F-distribution with NU1 and NU2 degrees of freedom, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_fdist_P (double X, double NU1, double NU2)
+ -- Function: double gsl_cdf_fdist_Q (double X, double NU1, double NU2)
+ -- Function: double gsl_cdf_fdist_Pinv (double P, double NU1, double
+ NU2)
+ -- Function: double gsl_cdf_fdist_Qinv (double Q, double NU1, double
+ NU2)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the F-distribution with NU1 and
+ NU2 degrees of freedom.
+
+
+File: gsl-ref.info, Node: The t-distribution, Next: The Beta Distribution, Prev: The F-distribution, Up: Random Number Distributions
+
+19.19 The t-distribution
+========================
+
+The t-distribution arises in statistics. If Y_1 has a normal
+distribution and Y_2 has a chi-squared distribution with \nu degrees of
+freedom then the ratio,
+
+ X = { Y_1 \over \sqrt{Y_2 / \nu} }
+
+has a t-distribution t(x;\nu) with \nu degrees of freedom.
+
+ -- Function: double gsl_ran_tdist (const gsl_rng * R, double NU)
+ This function returns a random variate from the t-distribution.
+ The distribution function is,
+
+ p(x) dx = {\Gamma((\nu + 1)/2) \over \sqrt{\pi \nu} \Gamma(\nu/2)}
+ (1 + x^2/\nu)^{-(\nu + 1)/2} dx
+
+ for -\infty < x < +\infty.
+
+ -- Function: double gsl_ran_tdist_pdf (double X, double NU)
+ This function computes the probability density p(x) at X for a
+ t-distribution with NU degrees of freedom, using the formula given
+ above.
+
+
+ -- Function: double gsl_cdf_tdist_P (double X, double NU)
+ -- Function: double gsl_cdf_tdist_Q (double X, double NU)
+ -- Function: double gsl_cdf_tdist_Pinv (double P, double NU)
+ -- Function: double gsl_cdf_tdist_Qinv (double Q, double NU)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the t-distribution with NU
+ degrees of freedom.
+
+
+File: gsl-ref.info, Node: The Beta Distribution, Next: The Logistic Distribution, Prev: The t-distribution, Up: Random Number Distributions
+
+19.20 The Beta Distribution
+===========================
+
+ -- Function: double gsl_ran_beta (const gsl_rng * R, double A, double
+ B)
+ This function returns a random variate from the beta distribution.
+ The distribution function is,
+
+ p(x) dx = {\Gamma(a+b) \over \Gamma(a) \Gamma(b)} x^{a-1} (1-x)^{b-1} dx
+
+ for 0 <= x <= 1.
+
+ -- Function: double gsl_ran_beta_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ beta distribution with parameters A and B, using the formula given
+ above.
+
+
+ -- Function: double gsl_cdf_beta_P (double X, double A, double B)
+ -- Function: double gsl_cdf_beta_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_beta_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_beta_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the beta distribution with
+ parameters A and B.
+
+
+File: gsl-ref.info, Node: The Logistic Distribution, Next: The Pareto Distribution, Prev: The Beta Distribution, Up: Random Number Distributions
+
+19.21 The Logistic Distribution
+===============================
+
+ -- Function: double gsl_ran_logistic (const gsl_rng * R, double A)
+ This function returns a random variate from the logistic
+ distribution. The distribution function is,
+
+ p(x) dx = { \exp(-x/a) \over a (1 + \exp(-x/a))^2 } dx
+
+ for -\infty < x < +\infty.
+
+ -- Function: double gsl_ran_logistic_pdf (double X, double A)
+ This function computes the probability density p(x) at X for a
+ logistic distribution with scale parameter A, using the formula
+ given above.
+
+
+ -- Function: double gsl_cdf_logistic_P (double X, double A)
+ -- Function: double gsl_cdf_logistic_Q (double X, double A)
+ -- Function: double gsl_cdf_logistic_Pinv (double P, double A)
+ -- Function: double gsl_cdf_logistic_Qinv (double Q, double A)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the logistic distribution with
+ scale parameter A.
+
+
+File: gsl-ref.info, Node: The Pareto Distribution, Next: Spherical Vector Distributions, Prev: The Logistic Distribution, Up: Random Number Distributions
+
+19.22 The Pareto Distribution
+=============================
+
+ -- Function: double gsl_ran_pareto (const gsl_rng * R, double A,
+ double B)
+ This function returns a random variate from the Pareto
+ distribution of order A. The distribution function is,
+
+ p(x) dx = (a/b) / (x/b)^{a+1} dx
+
+ for x >= b.
+
+ -- Function: double gsl_ran_pareto_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ Pareto distribution with exponent A and scale B, using the formula
+ given above.
+
+
+ -- Function: double gsl_cdf_pareto_P (double X, double A, double B)
+ -- Function: double gsl_cdf_pareto_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_pareto_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_pareto_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Pareto distribution with
+ exponent A and scale B.
+
+
+File: gsl-ref.info, Node: Spherical Vector Distributions, Next: The Weibull Distribution, Prev: The Pareto Distribution, Up: Random Number Distributions
+
+19.23 Spherical Vector Distributions
+====================================
+
+The spherical distributions generate random vectors, located on a
+spherical surface. They can be used as random directions, for example
+in the steps of a random walk.
+
+ -- Function: void gsl_ran_dir_2d (const gsl_rng * R, double * X,
+ double * Y)
+ -- Function: void gsl_ran_dir_2d_trig_method (const gsl_rng * R,
+ double * X, double * Y)
+ This function returns a random direction vector v = (X,Y) in two
+ dimensions. The vector is normalized such that |v|^2 = x^2 + y^2
+ = 1. The obvious way to do this is to take a uniform random
+ number between 0 and 2\pi and let X and Y be the sine and cosine
+ respectively. Two trig functions would have been expensive in the
+ old days, but with modern hardware implementations, this is
+ sometimes the fastest way to go. This is the case for the Pentium
+ (but not the case for the Sun Sparcstation). One can avoid the
+ trig evaluations by choosing X and Y in the interior of a unit
+ circle (choose them at random from the interior of the enclosing
+ square, and then reject those that are outside the unit circle),
+ and then dividing by \sqrt{x^2 + y^2}. A much cleverer approach,
+ attributed to von Neumann (See Knuth, v2, 3rd ed, p140, exercise
+ 23), requires neither trig nor a square root. In this approach, U
+ and V are chosen at random from the interior of a unit circle, and
+ then x=(u^2-v^2)/(u^2+v^2) and y=2uv/(u^2+v^2).
+
+ -- Function: void gsl_ran_dir_3d (const gsl_rng * R, double * X,
+ double * Y, double * Z)
+ This function returns a random direction vector v = (X,Y,Z) in
+ three dimensions. The vector is normalized such that |v|^2 = x^2
+ + y^2 + z^2 = 1. The method employed is due to Robert E. Knop
+ (CACM 13, 326 (1970)), and explained in Knuth, v2, 3rd ed, p136.
+ It uses the surprising fact that the distribution projected along
+ any axis is actually uniform (this is only true for 3 dimensions).
+
+ -- Function: void gsl_ran_dir_nd (const gsl_rng * R, size_t N, double
+ * X)
+ This function returns a random direction vector v =
+ (x_1,x_2,...,x_n) in N dimensions. The vector is normalized such
+ that |v|^2 = x_1^2 + x_2^2 + ... + x_n^2 = 1. The method uses the
+ fact that a multivariate gaussian distribution is spherically
+ symmetric. Each component is generated to have a gaussian
+ distribution, and then the components are normalized. The method
+ is described by Knuth, v2, 3rd ed, p135-136, and attributed to G.
+ W. Brown, Modern Mathematics for the Engineer (1956).
+
+
+File: gsl-ref.info, Node: The Weibull Distribution, Next: The Type-1 Gumbel Distribution, Prev: Spherical Vector Distributions, Up: Random Number Distributions
+
+19.24 The Weibull Distribution
+==============================
+
+ -- Function: double gsl_ran_weibull (const gsl_rng * R, double A,
+ double B)
+ This function returns a random variate from the Weibull
+ distribution. The distribution function is,
+
+ p(x) dx = {b \over a^b} x^{b-1} \exp(-(x/a)^b) dx
+
+ for x >= 0.
+
+ -- Function: double gsl_ran_weibull_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ Weibull distribution with scale A and exponent B, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_weibull_P (double X, double A, double B)
+ -- Function: double gsl_cdf_weibull_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_weibull_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_weibull_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Weibull distribution with
+ scale A and exponent B.
+
+
+File: gsl-ref.info, Node: The Type-1 Gumbel Distribution, Next: The Type-2 Gumbel Distribution, Prev: The Weibull Distribution, Up: Random Number Distributions
+
+19.25 The Type-1 Gumbel Distribution
+====================================
+
+ -- Function: double gsl_ran_gumbel1 (const gsl_rng * R, double A,
+ double B)
+ This function returns a random variate from the Type-1 Gumbel
+ distribution. The Type-1 Gumbel distribution function is,
+
+ p(x) dx = a b \exp(-(b \exp(-ax) + ax)) dx
+
+ for -\infty < x < \infty.
+
+ -- Function: double gsl_ran_gumbel1_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ Type-1 Gumbel distribution with parameters A and B, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_gumbel1_P (double X, double A, double B)
+ -- Function: double gsl_cdf_gumbel1_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_gumbel1_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_gumbel1_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Type-1 Gumbel distribution
+ with parameters A and B.
+
+
+File: gsl-ref.info, Node: The Type-2 Gumbel Distribution, Next: The Dirichlet Distribution, Prev: The Type-1 Gumbel Distribution, Up: Random Number Distributions
+
+19.26 The Type-2 Gumbel Distribution
+====================================
+
+ -- Function: double gsl_ran_gumbel2 (const gsl_rng * R, double A,
+ double B)
+ This function returns a random variate from the Type-2 Gumbel
+ distribution. The Type-2 Gumbel distribution function is,
+
+ p(x) dx = a b x^{-a-1} \exp(-b x^{-a}) dx
+
+ for 0 < x < \infty.
+
+ -- Function: double gsl_ran_gumbel2_pdf (double X, double A, double B)
+ This function computes the probability density p(x) at X for a
+ Type-2 Gumbel distribution with parameters A and B, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_gumbel2_P (double X, double A, double B)
+ -- Function: double gsl_cdf_gumbel2_Q (double X, double A, double B)
+ -- Function: double gsl_cdf_gumbel2_Pinv (double P, double A, double B)
+ -- Function: double gsl_cdf_gumbel2_Qinv (double Q, double A, double B)
+ These functions compute the cumulative distribution functions
+ P(x), Q(x) and their inverses for the Type-2 Gumbel distribution
+ with parameters A and B.
+
+
+File: gsl-ref.info, Node: The Dirichlet Distribution, Next: General Discrete Distributions, Prev: The Type-2 Gumbel Distribution, Up: Random Number Distributions
+
+19.27 The Dirichlet Distribution
+================================
+
+ -- Function: void gsl_ran_dirichlet (const gsl_rng * R, size_t K,
+ const double ALPHA[], double THETA[])
+ This function returns an array of K random variates from a
+ Dirichlet distribution of order K-1. The distribution function is
+
+ p(\theta_1, ..., \theta_K) d\theta_1 ... d\theta_K =
+ (1/Z) \prod_{i=1}^K \theta_i^{\alpha_i - 1} \delta(1 -\sum_{i=1}^K \theta_i) d\theta_1 ... d\theta_K
+
+ for theta_i >= 0 and alpha_i >= 0. The delta function ensures
+ that \sum \theta_i = 1. The normalization factor Z is
+
+ Z = {\prod_{i=1}^K \Gamma(\alpha_i)} / {\Gamma( \sum_{i=1}^K \alpha_i)}
+
+ The random variates are generated by sampling K values from gamma
+ distributions with parameters a=alpha_i, b=1, and renormalizing.
+ See A.M. Law, W.D. Kelton, `Simulation Modeling and Analysis'
+ (1991).
+
+ -- Function: double gsl_ran_dirichlet_pdf (size_t K, const double
+ ALPHA[], const double THETA[])
+ This function computes the probability density p(\theta_1, ... ,
+ \theta_K) at THETA[K] for a Dirichlet distribution with parameters
+ ALPHA[K], using the formula given above.
+
+ -- Function: double gsl_ran_dirichlet_lnpdf (size_t K, const double
+ ALPHA[], const double THETA[])
+ This function computes the logarithm of the probability density
+ p(\theta_1, ... , \theta_K) for a Dirichlet distribution with
+ parameters ALPHA[K].
+
+
+File: gsl-ref.info, Node: General Discrete Distributions, Next: The Poisson Distribution, Prev: The Dirichlet Distribution, Up: Random Number Distributions
+
+19.28 General Discrete Distributions
+====================================
+
+Given K discrete events with different probabilities P[k], produce a
+random value k consistent with its probability.
+
+ The obvious way to do this is to preprocess the probability list by
+generating a cumulative probability array with K+1 elements:
+
+ C[0] = 0
+ C[k+1] = C[k]+P[k].
+
+Note that this construction produces C[K]=1. Now choose a uniform
+deviate u between 0 and 1, and find the value of k such that C[k] <= u
+< C[k+1]. Although this in principle requires of order \log K steps per
+random number generation, they are fast steps, and if you use something
+like \lfloor uK \rfloor as a starting point, you can often do pretty
+well.
+
+ But faster methods have been devised. Again, the idea is to
+preprocess the probability list, and save the result in some form of
+lookup table; then the individual calls for a random discrete event can
+go rapidly. An approach invented by G. Marsaglia (Generating discrete
+random numbers in a computer, Comm ACM 6, 37-38 (1963)) is very clever,
+and readers interested in examples of good algorithm design are
+directed to this short and well-written paper. Unfortunately, for
+large K, Marsaglia's lookup table can be quite large.
+
+ A much better approach is due to Alastair J. Walker (An efficient
+method for generating discrete random variables with general
+distributions, ACM Trans on Mathematical Software 3, 253-256 (1977);
+see also Knuth, v2, 3rd ed, p120-121,139). This requires two lookup
+tables, one floating point and one integer, but both only of size K.
+After preprocessing, the random numbers are generated in O(1) time,
+even for large K. The preprocessing suggested by Walker requires
+O(K^2) effort, but that is not actually necessary, and the
+implementation provided here only takes O(K) effort. In general, more
+preprocessing leads to faster generation of the individual random
+numbers, but a diminishing return is reached pretty early. Knuth points
+out that the optimal preprocessing is combinatorially difficult for
+large K.
+
+ This method can be used to speed up some of the discrete random
+number generators below, such as the binomial distribution. To use it
+for something like the Poisson Distribution, a modification would have
+to be made, since it only takes a finite set of K outcomes.
+
+ -- Function: gsl_ran_discrete_t * gsl_ran_discrete_preproc (size_t K,
+ const double * P)
+ This function returns a pointer to a structure that contains the
+ lookup table for the discrete random number generator. The array
+ P[] contains the probabilities of the discrete events; these array
+ elements must all be positive, but they needn't add up to one (so
+ you can think of them more generally as "weights")--the
+ preprocessor will normalize appropriately. This return value is
+ used as an argument for the `gsl_ran_discrete' function below.
+
+ -- Function: size_t gsl_ran_discrete (const gsl_rng * R, const
+ gsl_ran_discrete_t * G)
+ After the preprocessor, above, has been called, you use this
+ function to get the discrete random numbers.
+
+ -- Function: double gsl_ran_discrete_pdf (size_t K, const
+ gsl_ran_discrete_t * G)
+ Returns the probability P[k] of observing the variable K. Since
+ P[k] is not stored as part of the lookup table, it must be
+ recomputed; this computation takes O(K), so if K is large and you
+ care about the original array P[k] used to create the lookup
+ table, then you should just keep this original array P[k] around.
+
+ -- Function: void gsl_ran_discrete_free (gsl_ran_discrete_t * G)
+ De-allocates the lookup table pointed to by G.
+
+
+File: gsl-ref.info, Node: The Poisson Distribution, Next: The Bernoulli Distribution, Prev: General Discrete Distributions, Up: Random Number Distributions
+
+19.29 The Poisson Distribution
+==============================
+
+ -- Function: unsigned int gsl_ran_poisson (const gsl_rng * R, double
+ MU)
+ This function returns a random integer from the Poisson
+ distribution with mean MU. The probability distribution for
+ Poisson variates is,
+
+ p(k) = {\mu^k \over k!} \exp(-\mu)
+
+ for k >= 0.
+
+ -- Function: double gsl_ran_poisson_pdf (unsigned int K, double MU)
+ This function computes the probability p(k) of obtaining K from a
+ Poisson distribution with mean MU, using the formula given above.
+
+
+ -- Function: double gsl_cdf_poisson_P (unsigned int K, double MU)
+ -- Function: double gsl_cdf_poisson_Q (unsigned int K, double MU)
+ These functions compute the cumulative distribution functions
+ P(k), Q(k) for the Poisson distribution with parameter MU.
+
+
+File: gsl-ref.info, Node: The Bernoulli Distribution, Next: The Binomial Distribution, Prev: The Poisson Distribution, Up: Random Number Distributions
+
+19.30 The Bernoulli Distribution
+================================
+
+ -- Function: unsigned int gsl_ran_bernoulli (const gsl_rng * R, double
+ P)
+ This function returns either 0 or 1, the result of a Bernoulli
+ trial with probability P. The probability distribution for a
+ Bernoulli trial is,
+
+ p(0) = 1 - p
+ p(1) = p
+
+
+ -- Function: double gsl_ran_bernoulli_pdf (unsigned int K, double P)
+ This function computes the probability p(k) of obtaining K from a
+ Bernoulli distribution with probability parameter P, using the
+ formula given above.
+
+
+
+File: gsl-ref.info, Node: The Binomial Distribution, Next: The Multinomial Distribution, Prev: The Bernoulli Distribution, Up: Random Number Distributions
+
+19.31 The Binomial Distribution
+===============================
+
+ -- Function: unsigned int gsl_ran_binomial (const gsl_rng * R, double
+ P, unsigned int N)
+ This function returns a random integer from the binomial
+ distribution, the number of successes in N independent trials with
+ probability P. The probability distribution for binomial variates
+ is,
+
+ p(k) = {n! \over k! (n-k)! } p^k (1-p)^{n-k}
+
+ for 0 <= k <= n.
+
+ -- Function: double gsl_ran_binomial_pdf (unsigned int K, double P,
+ unsigned int N)
+ This function computes the probability p(k) of obtaining K from a
+ binomial distribution with parameters P and N, using the formula
+ given above.
+
+
+ -- Function: double gsl_cdf_binomial_P (unsigned int K, double P,
+ unsigned int N)
+ -- Function: double gsl_cdf_binomial_Q (unsigned int K, double P,
+ unsigned int N)
+ These functions compute the cumulative distribution functions
+ P(k), Q(k) for the binomial distribution with parameters P and N.
+
+
+File: gsl-ref.info, Node: The Multinomial Distribution, Next: The Negative Binomial Distribution, Prev: The Binomial Distribution, Up: Random Number Distributions
+
+19.32 The Multinomial Distribution
+==================================
+
+ -- Function: void gsl_ran_multinomial (const gsl_rng * R, size_t K,
+ unsigned int N, const double P[], unsigned int N[])
+ This function computes a random sample N[] from the multinomial
+ distribution formed by N trials from an underlying distribution
+ P[K]. The distribution function for N[] is,
+
+ P(n_1, n_2, ..., n_K) =
+ (N!/(n_1! n_2! ... n_K!)) p_1^n_1 p_2^n_2 ... p_K^n_K
+
+ where (n_1, n_2, ..., n_K) are nonnegative integers with
+ sum_{k=1}^K n_k = N, and (p_1, p_2, ..., p_K) is a probability
+ distribution with \sum p_i = 1. If the array P[K] is not
+ normalized then its entries will be treated as weights and
+ normalized appropriately. The arrays N[] and P[] must both be of
+ length K.
+
+ Random variates are generated using the conditional binomial
+ method (see C.S. David, `The computer generation of multinomial
+ random variates', Comp. Stat. Data Anal. 16 (1993) 205-217 for
+ details).
+
+ -- Function: double gsl_ran_multinomial_pdf (size_t K, const double
+ P[], const unsigned int N[])
+ This function computes the probability P(n_1, n_2, ..., n_K) of
+ sampling N[K] from a multinomial distribution with parameters
+ P[K], using the formula given above.
+
+ -- Function: double gsl_ran_multinomial_lnpdf (size_t K, const double
+ P[], const unsigned int N[])
+ This function returns the logarithm of the probability for the
+ multinomial distribution P(n_1, n_2, ..., n_K) with parameters
+ P[K].
+
+
+File: gsl-ref.info, Node: The Negative Binomial Distribution, Next: The Pascal Distribution, Prev: The Multinomial Distribution, Up: Random Number Distributions
+
+19.33 The Negative Binomial Distribution
+========================================
+
+ -- Function: unsigned int gsl_ran_negative_binomial (const gsl_rng *
+ R, double P, double N)
+ This function returns a random integer from the negative binomial
+ distribution, the number of failures occurring before N successes
+ in independent trials with probability P of success. The
+ probability distribution for negative binomial variates is,
+
+ p(k) = {\Gamma(n + k) \over \Gamma(k+1) \Gamma(n) } p^n (1-p)^k
+
+ Note that n is not required to be an integer.
+
+ -- Function: double gsl_ran_negative_binomial_pdf (unsigned int K,
+ double P, double N)
+ This function computes the probability p(k) of obtaining K from a
+ negative binomial distribution with parameters P and N, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_negative_binomial_P (unsigned int K,
+ double P, double N)
+ -- Function: double gsl_cdf_negative_binomial_Q (unsigned int K,
+ double P, double N)
+ These functions compute the cumulative distribution functions
+ P(k), Q(k) for the negative binomial distribution with parameters
+ P and N.
+
+
+File: gsl-ref.info, Node: The Pascal Distribution, Next: The Geometric Distribution, Prev: The Negative Binomial Distribution, Up: Random Number Distributions
+
+19.34 The Pascal Distribution
+=============================
+
+ -- Function: unsigned int gsl_ran_pascal (const gsl_rng * R, double P,
+ unsigned int N)
+ This function returns a random integer from the Pascal
+ distribution. The Pascal distribution is simply a negative
+ binomial distribution with an integer value of n.
+
+ p(k) = {(n + k - 1)! \over k! (n - 1)! } p^n (1-p)^k
+
+ for k >= 0
+
+ -- Function: double gsl_ran_pascal_pdf (unsigned int K, double P,
+ unsigned int N)
+ This function computes the probability p(k) of obtaining K from a
+ Pascal distribution with parameters P and N, using the formula
+ given above.
+
+
+ -- Function: double gsl_cdf_pascal_P (unsigned int K, double P,
+ unsigned int N)
+ -- Function: double gsl_cdf_pascal_Q (unsigned int K, double P,
+ unsigned int N)
+ These functions compute the cumulative distribution functions
+ P(k), Q(k) for the Pascal distribution with parameters P and N.
+
+
+File: gsl-ref.info, Node: The Geometric Distribution, Next: The Hypergeometric Distribution, Prev: The Pascal Distribution, Up: Random Number Distributions
+
+19.35 The Geometric Distribution
+================================
+
+ -- Function: unsigned int gsl_ran_geometric (const gsl_rng * R, double
+ P)
+ This function returns a random integer from the geometric
+ distribution, the number of independent trials with probability P
+ until the first success. The probability distribution for
+ geometric variates is,
+
+ p(k) = p (1-p)^(k-1)
+
+ for k >= 1. Note that the distribution begins with k=1 with this
+ definition. There is another convention in which the exponent k-1
+ is replaced by k.
+
+ -- Function: double gsl_ran_geometric_pdf (unsigned int K, double P)
+ This function computes the probability p(k) of obtaining K from a
+ geometric distribution with probability parameter P, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_geometric_P (unsigned int K, double P)
+ -- Function: double gsl_cdf_geometric_Q (unsigned int K, double P)
+ These functions compute the cumulative distribution functions
+ P(k), Q(k) for the geometric distribution with parameter P.
+
+
+File: gsl-ref.info, Node: The Hypergeometric Distribution, Next: The Logarithmic Distribution, Prev: The Geometric Distribution, Up: Random Number Distributions
+
+19.36 The Hypergeometric Distribution
+=====================================
+
+ -- Function: unsigned int gsl_ran_hypergeometric (const gsl_rng * R,
+ unsigned int N1, unsigned int N2, unsigned int T)
+ This function returns a random integer from the hypergeometric
+ distribution. The probability distribution for hypergeometric
+ random variates is,
+
+ p(k) = C(n_1, k) C(n_2, t - k) / C(n_1 + n_2, t)
+
+ where C(a,b) = a!/(b!(a-b)!) and t <= n_1 + n_2. The domain of k
+ is max(0,t-n_2), ..., min(t,n_1).
+
+ If a population contains n_1 elements of "type 1" and n_2 elements
+ of "type 2" then the hypergeometric distribution gives the
+ probability of obtaining k elements of "type 1" in t samples from
+ the population without replacement.
+
+ -- Function: double gsl_ran_hypergeometric_pdf (unsigned int K,
+ unsigned int N1, unsigned int N2, unsigned int T)
+ This function computes the probability p(k) of obtaining K from a
+ hypergeometric distribution with parameters N1, N2, T, using the
+ formula given above.
+
+
+ -- Function: double gsl_cdf_hypergeometric_P (unsigned int K, unsigned
+ int N1, unsigned int N2, unsigned int T)
+ -- Function: double gsl_cdf_hypergeometric_Q (unsigned int K, unsigned
+ int N1, unsigned int N2, unsigned int T)
+ These functions compute the cumulative distribution functions
+ P(k), Q(k) for the hypergeometric distribution with parameters N1,
+ N2 and T.
+
+
+File: gsl-ref.info, Node: The Logarithmic Distribution, Next: Shuffling and Sampling, Prev: The Hypergeometric Distribution, Up: Random Number Distributions
+
+19.37 The Logarithmic Distribution
+==================================
+
+ -- Function: unsigned int gsl_ran_logarithmic (const gsl_rng * R,
+ double P)
+ This function returns a random integer from the logarithmic
+ distribution. The probability distribution for logarithmic random
+ variates is,
+
+ p(k) = {-1 \over \log(1-p)} {(p^k \over k)}
+
+ for k >= 1.
+
+ -- Function: double gsl_ran_logarithmic_pdf (unsigned int K, double P)
+ This function computes the probability p(k) of obtaining K from a
+ logarithmic distribution with probability parameter P, using the
+ formula given above.
+
+
+
+File: gsl-ref.info, Node: Shuffling and Sampling, Next: Random Number Distribution Examples, Prev: The Logarithmic Distribution, Up: Random Number Distributions
+
+19.38 Shuffling and Sampling
+============================
+
+The following functions allow the shuffling and sampling of a set of
+objects. The algorithms rely on a random number generator as a source
+of randomness and a poor quality generator can lead to correlations in
+the output. In particular it is important to avoid generators with a
+short period. For more information see Knuth, v2, 3rd ed, Section
+3.4.2, "Random Sampling and Shuffling".
+
+ -- Function: void gsl_ran_shuffle (const gsl_rng * R, void * BASE,
+ size_t N, size_t SIZE)
+ This function randomly shuffles the order of N objects, each of
+ size SIZE, stored in the array BASE[0..N-1]. The output of the
+ random number generator R is used to produce the permutation. The
+ algorithm generates all possible n! permutations with equal
+ probability, assuming a perfect source of random numbers.
+
+ The following code shows how to shuffle the numbers from 0 to 51,
+
+ int a[52];
+
+ for (i = 0; i < 52; i++)
+ {
+ a[i] = i;
+ }
+
+ gsl_ran_shuffle (r, a, 52, sizeof (int));
+
+
+ -- Function: int gsl_ran_choose (const gsl_rng * R, void * DEST,
+ size_t K, void * SRC, size_t N, size_t SIZE)
+ This function fills the array DEST[k] with K objects taken
+ randomly from the N elements of the array SRC[0..N-1]. The
+ objects are each of size SIZE. The output of the random number
+ generator R is used to make the selection. The algorithm ensures
+ all possible samples are equally likely, assuming a perfect source
+ of randomness.
+
+ The objects are sampled _without_ replacement, thus each object can
+ only appear once in DEST[k]. It is required that K be less than
+ or equal to `n'. The objects in DEST will be in the same relative
+ order as those in SRC. You will need to call `gsl_ran_shuffle(r,
+ dest, n, size)' if you want to randomize the order.
+
+ The following code shows how to select a random sample of three
+ unique numbers from the set 0 to 99,
+
+ double a[3], b[100];
+
+ for (i = 0; i < 100; i++)
+ {
+ b[i] = (double) i;
+ }
+
+ gsl_ran_choose (r, a, 3, b, 100, sizeof (double));
+
+
+ -- Function: void gsl_ran_sample (const gsl_rng * R, void * DEST,
+ size_t K, void * SRC, size_t N, size_t SIZE)
+ This function is like `gsl_ran_choose' but samples K items from
+ the original array of N items SRC with replacement, so the same
+ object can appear more than once in the output sequence DEST.
+ There is no requirement that K be less than N in this case.
+
+
+File: gsl-ref.info, Node: Random Number Distribution Examples, Next: Random Number Distribution References and Further Reading, Prev: Shuffling and Sampling, Up: Random Number Distributions
+
+19.39 Examples
+==============
+
+The following program demonstrates the use of a random number generator
+to produce variates from a distribution. It prints 10 samples from the
+Poisson distribution with a mean of 3.
+
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_randist.h>
+
+ int
+ main (void)
+ {
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ int i, n = 10;
+ double mu = 3.0;
+
+ /* create a generator chosen by the
+ environment variable GSL_RNG_TYPE */
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ /* print n random variates chosen from
+ the poisson distribution with mean
+ parameter mu */
+
+ for (i = 0; i < n; i++)
+ {
+ unsigned int k = gsl_ran_poisson (r, mu);
+ printf (" %u", k);
+ }
+
+ printf ("\n");
+ gsl_rng_free (r);
+ return 0;
+ }
+
+If the library and header files are installed under `/usr/local' (the
+default location) then the program can be compiled with these options,
+
+ $ gcc -Wall demo.c -lgsl -lgslcblas -lm
+
+Here is the output of the program,
+
+ $ ./a.out
+ 2 5 5 2 1 0 3 4 1 1
+
+The variates depend on the seed used by the generator. The seed for the
+default generator type `gsl_rng_default' can be changed with the
+`GSL_RNG_SEED' environment variable to produce a different stream of
+variates,
+
+ $ GSL_RNG_SEED=123 ./a.out
+ GSL_RNG_SEED=123
+ 4 5 6 3 3 1 4 2 5 5
+
+The following program generates a random walk in two dimensions.
+
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_randist.h>
+
+ int
+ main (void)
+ {
+ int i;
+ double x = 0, y = 0, dx, dy;
+
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_rng_env_setup();
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ printf ("%g %g\n", x, y);
+
+ for (i = 0; i < 10; i++)
+ {
+ gsl_ran_dir_2d (r, &dx, &dy);
+ x += dx; y += dy;
+ printf ("%g %g\n", x, y);
+ }
+
+ gsl_rng_free (r);
+ return 0;
+ }
+
+Here is the output from the program, three 10-step random walks from
+the origin,
+
+ The following program computes the upper and lower cumulative
+distribution functions for the standard normal distribution at x=2.
+
+ #include <stdio.h>
+ #include <gsl/gsl_cdf.h>
+
+ int
+ main (void)
+ {
+ double P, Q;
+ double x = 2.0;
+
+ P = gsl_cdf_ugaussian_P (x);
+ printf ("prob(x < %f) = %f\n", x, P);
+
+ Q = gsl_cdf_ugaussian_Q (x);
+ printf ("prob(x > %f) = %f\n", x, Q);
+
+ x = gsl_cdf_ugaussian_Pinv (P);
+ printf ("Pinv(%f) = %f\n", P, x);
+
+ x = gsl_cdf_ugaussian_Qinv (Q);
+ printf ("Qinv(%f) = %f\n", Q, x);
+
+ return 0;
+ }
+
+Here is the output of the program,
+
+ prob(x < 2.000000) = 0.977250
+ prob(x > 2.000000) = 0.022750
+ Pinv(0.977250) = 2.000000
+ Qinv(0.022750) = 2.000000
+
+
+File: gsl-ref.info, Node: Random Number Distribution References and Further Reading, Prev: Random Number Distribution Examples, Up: Random Number Distributions
+
+19.40 References and Further Reading
+====================================
+
+For an encyclopaedic coverage of the subject readers are advised to
+consult the book `Non-Uniform Random Variate Generation' by Luc
+Devroye. It covers every imaginable distribution and provides hundreds
+of algorithms.
+
+ Luc Devroye, `Non-Uniform Random Variate Generation',
+ Springer-Verlag, ISBN 0-387-96305-7.
+
+The subject of random variate generation is also reviewed by Knuth, who
+describes algorithms for all the major distributions.
+
+ Donald E. Knuth, `The Art of Computer Programming: Seminumerical
+ Algorithms' (Vol 2, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896842.
+
+The Particle Data Group provides a short review of techniques for
+generating distributions of random numbers in the "Monte Carlo" section
+of its Annual Review of Particle Physics.
+
+ `Review of Particle Properties' R.M. Barnett et al., Physical
+ Review D54, 1 (1996) `http://pdg.lbl.gov/'.
+
+The Review of Particle Physics is available online in postscript and pdf
+format.
+
+An overview of methods used to compute cumulative distribution functions
+can be found in `Statistical Computing' by W.J. Kennedy and J.E.
+Gentle. Another general reference is `Elements of Statistical
+Computing' by R.A. Thisted.
+
+ William E. Kennedy and James E. Gentle, `Statistical Computing'
+ (1980), Marcel Dekker, ISBN 0-8247-6898-1.
+
+ Ronald A. Thisted, `Elements of Statistical Computing' (1988),
+ Chapman & Hall, ISBN 0-412-01371-1.
+
+The cumulative distribution functions for the Gaussian distribution are
+based on the following papers,
+
+ `Rational Chebyshev Approximations Using Linear Equations', W.J.
+ Cody, W. Fraser, J.F. Hart. Numerische Mathematik 12, 242-251
+ (1968).
+
+ `Rational Chebyshev Approximations for the Error Function', W.J.
+ Cody. Mathematics of Computation 23, n107, 631-637 (July 1969).
+
+
+File: gsl-ref.info, Node: Statistics, Next: Histograms, Prev: Random Number Distributions, Up: Top
+
+20 Statistics
+*************
+
+This chapter describes the statistical functions in the library. The
+basic statistical functions include routines to compute the mean,
+variance and standard deviation. More advanced functions allow you to
+calculate absolute deviations, skewness, and kurtosis as well as the
+median and arbitrary percentiles. The algorithms use recurrence
+relations to compute average quantities in a stable way, without large
+intermediate values that might overflow.
+
+ The functions are available in versions for datasets in the standard
+floating-point and integer types. The versions for double precision
+floating-point data have the prefix `gsl_stats' and are declared in the
+header file `gsl_statistics_double.h'. The versions for integer data
+have the prefix `gsl_stats_int' and are declared in the header file
+`gsl_statistics_int.h'.
+
+* Menu:
+
+* Mean and standard deviation and variance::
+* Absolute deviation::
+* Higher moments (skewness and kurtosis)::
+* Autocorrelation::
+* Covariance::
+* Weighted Samples::
+* Maximum and Minimum values::
+* Median and Percentiles::
+* Example statistical programs::
+* Statistics References and Further Reading::
+
+
+File: gsl-ref.info, Node: Mean and standard deviation and variance, Next: Absolute deviation, Up: Statistics
+
+20.1 Mean, Standard Deviation and Variance
+==========================================
+
+ -- Function: double gsl_stats_mean (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function returns the arithmetic mean of DATA, a dataset of
+ length N with stride STRIDE. The arithmetic mean, or "sample
+ mean", is denoted by \Hat\mu and defined as,
+
+ \Hat\mu = (1/N) \sum x_i
+
+ where x_i are the elements of the dataset DATA. For samples drawn
+ from a gaussian distribution the variance of \Hat\mu is \sigma^2 /
+ N.
+
+ -- Function: double gsl_stats_variance (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function returns the estimated, or "sample", variance of
+ DATA, a dataset of length N with stride STRIDE. The estimated
+ variance is denoted by \Hat\sigma^2 and is defined by,
+
+ \Hat\sigma^2 = (1/(N-1)) \sum (x_i - \Hat\mu)^2
+
+ where x_i are the elements of the dataset DATA. Note that the
+ normalization factor of 1/(N-1) results from the derivation of
+ \Hat\sigma^2 as an unbiased estimator of the population variance
+ \sigma^2. For samples drawn from a gaussian distribution the
+ variance of \Hat\sigma^2 itself is 2 \sigma^4 / N.
+
+ This function computes the mean via a call to `gsl_stats_mean'. If
+ you have already computed the mean then you can pass it directly to
+ `gsl_stats_variance_m'.
+
+ -- Function: double gsl_stats_variance_m (const double DATA[], size_t
+ STRIDE, size_t N, double MEAN)
+ This function returns the sample variance of DATA relative to the
+ given value of MEAN. The function is computed with \Hat\mu
+ replaced by the value of MEAN that you supply,
+
+ \Hat\sigma^2 = (1/(N-1)) \sum (x_i - mean)^2
+
+ -- Function: double gsl_stats_sd (const double DATA[], size_t STRIDE,
+ size_t N)
+ -- Function: double gsl_stats_sd_m (const double DATA[], size_t
+ STRIDE, size_t N, double MEAN)
+ The standard deviation is defined as the square root of the
+ variance. These functions return the square root of the
+ corresponding variance functions above.
+
+ -- Function: double gsl_stats_variance_with_fixed_mean (const double
+ DATA[], size_t STRIDE, size_t N, double MEAN)
+ This function computes an unbiased estimate of the variance of
+ DATA when the population mean MEAN of the underlying distribution
+ is known _a priori_. In this case the estimator for the variance
+ uses the factor 1/N and the sample mean \Hat\mu is replaced by the
+ known population mean \mu,
+
+ \Hat\sigma^2 = (1/N) \sum (x_i - \mu)^2
+
+ -- Function: double gsl_stats_sd_with_fixed_mean (const double DATA[],
+ size_t STRIDE, size_t N, double MEAN)
+ This function calculates the standard deviation of DATA for a
+ fixed population mean MEAN. The result is the square root of the
+ corresponding variance function.
+
+
+File: gsl-ref.info, Node: Absolute deviation, Next: Higher moments (skewness and kurtosis), Prev: Mean and standard deviation and variance, Up: Statistics
+
+20.2 Absolute deviation
+=======================
+
+ -- Function: double gsl_stats_absdev (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function computes the absolute deviation from the mean of
+ DATA, a dataset of length N with stride STRIDE. The absolute
+ deviation from the mean is defined as,
+
+ absdev = (1/N) \sum |x_i - \Hat\mu|
+
+ where x_i are the elements of the dataset DATA. The absolute
+ deviation from the mean provides a more robust measure of the
+ width of a distribution than the variance. This function computes
+ the mean of DATA via a call to `gsl_stats_mean'.
+
+ -- Function: double gsl_stats_absdev_m (const double DATA[], size_t
+ STRIDE, size_t N, double MEAN)
+ This function computes the absolute deviation of the dataset DATA
+ relative to the given value of MEAN,
+
+ absdev = (1/N) \sum |x_i - mean|
+
+ This function is useful if you have already computed the mean of
+ DATA (and want to avoid recomputing it), or wish to calculate the
+ absolute deviation relative to another value (such as zero, or the
+ median).
+
+
+File: gsl-ref.info, Node: Higher moments (skewness and kurtosis), Next: Autocorrelation, Prev: Absolute deviation, Up: Statistics
+
+20.3 Higher moments (skewness and kurtosis)
+===========================================
+
+ -- Function: double gsl_stats_skew (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function computes the skewness of DATA, a dataset of length N
+ with stride STRIDE. The skewness is defined as,
+
+ skew = (1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^3
+
+ where x_i are the elements of the dataset DATA. The skewness
+ measures the asymmetry of the tails of a distribution.
+
+ The function computes the mean and estimated standard deviation of
+ DATA via calls to `gsl_stats_mean' and `gsl_stats_sd'.
+
+ -- Function: double gsl_stats_skew_m_sd (const double DATA[], size_t
+ STRIDE, size_t N, double MEAN, double SD)
+ This function computes the skewness of the dataset DATA using the
+ given values of the mean MEAN and standard deviation SD,
+
+ skew = (1/N) \sum ((x_i - mean)/sd)^3
+
+ These functions are useful if you have already computed the mean
+ and standard deviation of DATA and want to avoid recomputing them.
+
+ -- Function: double gsl_stats_kurtosis (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function computes the kurtosis of DATA, a dataset of length N
+ with stride STRIDE. The kurtosis is defined as,
+
+ kurtosis = ((1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^4) - 3
+
+ The kurtosis measures how sharply peaked a distribution is,
+ relative to its width. The kurtosis is normalized to zero for a
+ gaussian distribution.
+
+ -- Function: double gsl_stats_kurtosis_m_sd (const double DATA[],
+ size_t STRIDE, size_t N, double MEAN, double SD)
+ This function computes the kurtosis of the dataset DATA using the
+ given values of the mean MEAN and standard deviation SD,
+
+ kurtosis = ((1/N) \sum ((x_i - mean)/sd)^4) - 3
+
+ This function is useful if you have already computed the mean and
+ standard deviation of DATA and want to avoid recomputing them.
+
+
+File: gsl-ref.info, Node: Autocorrelation, Next: Covariance, Prev: Higher moments (skewness and kurtosis), Up: Statistics
+
+20.4 Autocorrelation
+====================
+
+ -- Function: double gsl_stats_lag1_autocorrelation (const double
+ DATA[], const size_t STRIDE, const size_t N)
+ This function computes the lag-1 autocorrelation of the dataset
+ DATA.
+
+ a_1 = {\sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i-1} - \Hat\mu)
+ \over
+ \sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i} - \Hat\mu)}
+
+ -- Function: double gsl_stats_lag1_autocorrelation_m (const double
+ DATA[], const size_t STRIDE, const size_t N, const double
+ MEAN)
+ This function computes the lag-1 autocorrelation of the dataset
+ DATA using the given value of the mean MEAN.
+
+
+
+File: gsl-ref.info, Node: Covariance, Next: Weighted Samples, Prev: Autocorrelation, Up: Statistics
+
+20.5 Covariance
+===============
+
+ -- Function: double gsl_stats_covariance (const double DATA1[], const
+ size_t STRIDE1, const double DATA2[], const size_t STRIDE2,
+ const size_t N)
+ This function computes the covariance of the datasets DATA1 and
+ DATA2 which must both be of the same length N.
+
+ covar = (1/(n - 1)) \sum_{i = 1}^{n} (x_i - \Hat x) (y_i - \Hat y)
+
+ -- Function: double gsl_stats_covariance_m (const double DATA1[],
+ const size_t STRIDE1, const double DATA2[], const size_t
+ STRIDE2, const size_t N, const double MEAN1, const double
+ MEAN2)
+ This function computes the covariance of the datasets DATA1 and
+ DATA2 using the given values of the means, MEAN1 and MEAN2. This
+ is useful if you have already computed the means of DATA1 and
+ DATA2 and want to avoid recomputing them.
+
+
+File: gsl-ref.info, Node: Weighted Samples, Next: Maximum and Minimum values, Prev: Covariance, Up: Statistics
+
+20.6 Weighted Samples
+=====================
+
+The functions described in this section allow the computation of
+statistics for weighted samples. The functions accept an array of
+samples, x_i, with associated weights, w_i. Each sample x_i is
+considered as having been drawn from a Gaussian distribution with
+variance \sigma_i^2. The sample weight w_i is defined as the
+reciprocal of this variance, w_i = 1/\sigma_i^2. Setting a weight to
+zero corresponds to removing a sample from a dataset.
+
+ -- Function: double gsl_stats_wmean (const double W[], size_t WSTRIDE,
+ const double DATA[], size_t STRIDE, size_t N)
+ This function returns the weighted mean of the dataset DATA with
+ stride STRIDE and length N, using the set of weights W with stride
+ WSTRIDE and length N. The weighted mean is defined as,
+
+ \Hat\mu = (\sum w_i x_i) / (\sum w_i)
+
+ -- Function: double gsl_stats_wvariance (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N)
+ This function returns the estimated variance of the dataset DATA
+ with stride STRIDE and length N, using the set of weights W with
+ stride WSTRIDE and length N. The estimated variance of a weighted
+ dataset is defined as,
+
+ \Hat\sigma^2 = ((\sum w_i)/((\sum w_i)^2 - \sum (w_i^2)))
+ \sum w_i (x_i - \Hat\mu)^2
+
+ Note that this expression reduces to an unweighted variance with
+ the familiar 1/(N-1) factor when there are N equal non-zero
+ weights.
+
+ -- Function: double gsl_stats_wvariance_m (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double
+ WMEAN)
+ This function returns the estimated variance of the weighted
+ dataset DATA using the given weighted mean WMEAN.
+
+ -- Function: double gsl_stats_wsd (const double W[], size_t WSTRIDE,
+ const double DATA[], size_t STRIDE, size_t N)
+ The standard deviation is defined as the square root of the
+ variance. This function returns the square root of the
+ corresponding variance function `gsl_stats_wvariance' above.
+
+ -- Function: double gsl_stats_wsd_m (const double W[], size_t WSTRIDE,
+ const double DATA[], size_t STRIDE, size_t N, double WMEAN)
+ This function returns the square root of the corresponding variance
+ function `gsl_stats_wvariance_m' above.
+
+ -- Function: double gsl_stats_wvariance_with_fixed_mean (const double
+ W[], size_t WSTRIDE, const double DATA[], size_t STRIDE,
+ size_t N, const double MEAN)
+ This function computes an unbiased estimate of the variance of
+ weighted dataset DATA when the population mean MEAN of the
+ underlying distribution is known _a priori_. In this case the
+ estimator for the variance replaces the sample mean \Hat\mu by the
+ known population mean \mu,
+
+ \Hat\sigma^2 = (\sum w_i (x_i - \mu)^2) / (\sum w_i)
+
+ -- Function: double gsl_stats_wsd_with_fixed_mean (const double W[],
+ size_t WSTRIDE, const double DATA[], size_t STRIDE, size_t N,
+ const double MEAN)
+ The standard deviation is defined as the square root of the
+ variance. This function returns the square root of the
+ corresponding variance function above.
+
+ -- Function: double gsl_stats_wabsdev (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N)
+ This function computes the weighted absolute deviation from the
+ weighted mean of DATA. The absolute deviation from the mean is
+ defined as,
+
+ absdev = (\sum w_i |x_i - \Hat\mu|) / (\sum w_i)
+
+ -- Function: double gsl_stats_wabsdev_m (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double
+ WMEAN)
+ This function computes the absolute deviation of the weighted
+ dataset DATA about the given weighted mean WMEAN.
+
+ -- Function: double gsl_stats_wskew (const double W[], size_t WSTRIDE,
+ const double DATA[], size_t STRIDE, size_t N)
+ This function computes the weighted skewness of the dataset DATA.
+
+ skew = (\sum w_i ((x_i - xbar)/\sigma)^3) / (\sum w_i)
+
+ -- Function: double gsl_stats_wskew_m_sd (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double
+ WMEAN, double WSD)
+ This function computes the weighted skewness of the dataset DATA
+ using the given values of the weighted mean and weighted standard
+ deviation, WMEAN and WSD.
+
+ -- Function: double gsl_stats_wkurtosis (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N)
+ This function computes the weighted kurtosis of the dataset DATA.
+
+ kurtosis = ((\sum w_i ((x_i - xbar)/sigma)^4) / (\sum w_i)) - 3
+
+ -- Function: double gsl_stats_wkurtosis_m_sd (const double W[], size_t
+ WSTRIDE, const double DATA[], size_t STRIDE, size_t N, double
+ WMEAN, double WSD)
+ This function computes the weighted kurtosis of the dataset DATA
+ using the given values of the weighted mean and weighted standard
+ deviation, WMEAN and WSD.
+
diff --git a/gsl-1.9/doc/gsl-ref.info-3 b/gsl-1.9/doc/gsl-ref.info-3
new file mode 100644
index 0000000..d30fefa
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info-3
@@ -0,0 +1,7520 @@
+This is gsl-ref.info, produced by makeinfo version 4.8 from
+gsl-ref.texi.
+
+INFO-DIR-SECTION Scientific software
+START-INFO-DIR-ENTRY
+* gsl-ref: (gsl-ref). GNU Scientific Library - Reference
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+2005, 2006, 2007 The GSL Team.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Free Software
+Needs Free Documentation", the Front-Cover text being "A GNU Manual",
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled "GNU Free Documentation
+License".
+
+ (a) The Back-Cover Text is: "You have freedom to copy and modify this
+GNU Manual, like GNU software."
+
+
+File: gsl-ref.info, Node: Maximum and Minimum values, Next: Median and Percentiles, Prev: Weighted Samples, Up: Statistics
+
+20.7 Maximum and Minimum values
+===============================
+
+The following functions find the maximum and minimum values of a
+dataset (or their indices). If the data contains `NaN's then a `NaN'
+will be returned, since the maximum or minimum value is undefined. For
+functions which return an index, the location of the first `NaN' in the
+array is returned.
+
+ -- Function: double gsl_stats_max (const double DATA[], size_t STRIDE,
+ size_t N)
+ This function returns the maximum value in DATA, a dataset of
+ length N with stride STRIDE. The maximum value is defined as the
+ value of the element x_i which satisfies x_i >= x_j for all j.
+
+ If you want instead to find the element with the largest absolute
+ magnitude you will need to apply `fabs' or `abs' to your data
+ before calling this function.
+
+ -- Function: double gsl_stats_min (const double DATA[], size_t STRIDE,
+ size_t N)
+ This function returns the minimum value in DATA, a dataset of
+ length N with stride STRIDE. The minimum value is defined as the
+ value of the element x_i which satisfies x_i <= x_j for all j.
+
+ If you want instead to find the element with the smallest absolute
+ magnitude you will need to apply `fabs' or `abs' to your data
+ before calling this function.
+
+ -- Function: void gsl_stats_minmax (double * MIN, double * MAX, const
+ double DATA[], size_t STRIDE, size_t N)
+ This function finds both the minimum and maximum values MIN, MAX
+ in DATA in a single pass.
+
+ -- Function: size_t gsl_stats_max_index (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function returns the index of the maximum value in DATA, a
+ dataset of length N with stride STRIDE. The maximum value is
+ defined as the value of the element x_i which satisfies x_i >= x_j
+ for all j. When there are several equal maximum elements then the
+ first one is chosen.
+
+ -- Function: size_t gsl_stats_min_index (const double DATA[], size_t
+ STRIDE, size_t N)
+ This function returns the index of the minimum value in DATA, a
+ dataset of length N with stride STRIDE. The minimum value is
+ defined as the value of the element x_i which satisfies x_i >= x_j
+ for all j. When there are several equal minimum elements then the
+ first one is chosen.
+
+ -- Function: void gsl_stats_minmax_index (size_t * MIN_INDEX, size_t *
+ MAX_INDEX, const double DATA[], size_t STRIDE, size_t N)
+ This function returns the indexes MIN_INDEX, MAX_INDEX of the
+ minimum and maximum values in DATA in a single pass.
+
+
+File: gsl-ref.info, Node: Median and Percentiles, Next: Example statistical programs, Prev: Maximum and Minimum values, Up: Statistics
+
+20.8 Median and Percentiles
+===========================
+
+The median and percentile functions described in this section operate on
+sorted data. For convenience we use "quantiles", measured on a scale
+of 0 to 1, instead of percentiles (which use a scale of 0 to 100).
+
+ -- Function: double gsl_stats_median_from_sorted_data (const double
+ SORTED_DATA[], size_t STRIDE, size_t N)
+ This function returns the median value of SORTED_DATA, a dataset
+ of length N with stride STRIDE. The elements of the array must be
+ in ascending numerical order. There are no checks to see whether
+ the data are sorted, so the function `gsl_sort' should always be
+ used first.
+
+ When the dataset has an odd number of elements the median is the
+ value of element (n-1)/2. When the dataset has an even number of
+ elements the median is the mean of the two nearest middle values,
+ elements (n-1)/2 and n/2. Since the algorithm for computing the
+ median involves interpolation this function always returns a
+ floating-point number, even for integer data types.
+
+ -- Function: double gsl_stats_quantile_from_sorted_data (const double
+ SORTED_DATA[], size_t STRIDE, size_t N, double F)
+ This function returns a quantile value of SORTED_DATA, a
+ double-precision array of length N with stride STRIDE. The
+ elements of the array must be in ascending numerical order. The
+ quantile is determined by the F, a fraction between 0 and 1. For
+ example, to compute the value of the 75th percentile F should have
+ the value 0.75.
+
+ There are no checks to see whether the data are sorted, so the
+ function `gsl_sort' should always be used first.
+
+ The quantile is found by interpolation, using the formula
+
+ quantile = (1 - \delta) x_i + \delta x_{i+1}
+
+ where i is `floor'((n - 1)f) and \delta is (n-1)f - i.
+
+ Thus the minimum value of the array (`data[0*stride]') is given by
+ F equal to zero, the maximum value (`data[(n-1)*stride]') is given
+ by F equal to one and the median value is given by F equal to 0.5.
+ Since the algorithm for computing quantiles involves
+ interpolation this function always returns a floating-point
+ number, even for integer data types.
+
+
+File: gsl-ref.info, Node: Example statistical programs, Next: Statistics References and Further Reading, Prev: Median and Percentiles, Up: Statistics
+
+20.9 Examples
+=============
+
+Here is a basic example of how to use the statistical functions:
+
+ #include <stdio.h>
+ #include <gsl/gsl_statistics.h>
+
+ int
+ main(void)
+ {
+ double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6};
+ double mean, variance, largest, smallest;
+
+ mean = gsl_stats_mean(data, 1, 5);
+ variance = gsl_stats_variance(data, 1, 5);
+ largest = gsl_stats_max(data, 1, 5);
+ smallest = gsl_stats_min(data, 1, 5);
+
+ printf ("The dataset is %g, %g, %g, %g, %g\n",
+ data[0], data[1], data[2], data[3], data[4]);
+
+ printf ("The sample mean is %g\n", mean);
+ printf ("The estimated variance is %g\n", variance);
+ printf ("The largest value is %g\n", largest);
+ printf ("The smallest value is %g\n", smallest);
+ return 0;
+ }
+
+ The program should produce the following output,
+
+ The dataset is 17.2, 18.1, 16.5, 18.3, 12.6
+ The sample mean is 16.54
+ The estimated variance is 4.2984
+ The largest value is 18.3
+ The smallest value is 12.6
+
+ Here is an example using sorted data,
+
+ #include <stdio.h>
+ #include <gsl/gsl_sort.h>
+ #include <gsl/gsl_statistics.h>
+
+ int
+ main(void)
+ {
+ double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6};
+ double median, upperq, lowerq;
+
+ printf ("Original dataset: %g, %g, %g, %g, %g\n",
+ data[0], data[1], data[2], data[3], data[4]);
+
+ gsl_sort (data, 1, 5);
+
+ printf ("Sorted dataset: %g, %g, %g, %g, %g\n",
+ data[0], data[1], data[2], data[3], data[4]);
+
+ median
+ = gsl_stats_median_from_sorted_data (data,
+ 1, 5);
+
+ upperq
+ = gsl_stats_quantile_from_sorted_data (data,
+ 1, 5,
+ 0.75);
+ lowerq
+ = gsl_stats_quantile_from_sorted_data (data,
+ 1, 5,
+ 0.25);
+
+ printf ("The median is %g\n", median);
+ printf ("The upper quartile is %g\n", upperq);
+ printf ("The lower quartile is %g\n", lowerq);
+ return 0;
+ }
+
+ This program should produce the following output,
+
+ Original dataset: 17.2, 18.1, 16.5, 18.3, 12.6
+ Sorted dataset: 12.6, 16.5, 17.2, 18.1, 18.3
+ The median is 17.2
+ The upper quartile is 18.1
+ The lower quartile is 16.5
+
+
+File: gsl-ref.info, Node: Statistics References and Further Reading, Prev: Example statistical programs, Up: Statistics
+
+20.10 References and Further Reading
+====================================
+
+The standard reference for almost any topic in statistics is the
+multi-volume `Advanced Theory of Statistics' by Kendall and Stuart.
+
+ Maurice Kendall, Alan Stuart, and J. Keith Ord. `The Advanced
+ Theory of Statistics' (multiple volumes) reprinted as `Kendall's
+ Advanced Theory of Statistics'. Wiley, ISBN 047023380X.
+
+Many statistical concepts can be more easily understood by a Bayesian
+approach. The following book by Gelman, Carlin, Stern and Rubin gives a
+comprehensive coverage of the subject.
+
+ Andrew Gelman, John B. Carlin, Hal S. Stern, Donald B. Rubin.
+ `Bayesian Data Analysis'. Chapman & Hall, ISBN 0412039915.
+
+For physicists the Particle Data Group provides useful reviews of
+Probability and Statistics in the "Mathematical Tools" section of its
+Annual Review of Particle Physics.
+
+ `Review of Particle Properties' R.M. Barnett et al., Physical
+ Review D54, 1 (1996)
+
+The Review of Particle Physics is available online at the website
+`http://pdg.lbl.gov/'.
+
+
+File: gsl-ref.info, Node: Histograms, Next: N-tuples, Prev: Statistics, Up: Top
+
+21 Histograms
+*************
+
+This chapter describes functions for creating histograms. Histograms
+provide a convenient way of summarizing the distribution of a set of
+data. A histogram consists of a set of "bins" which count the number of
+events falling into a given range of a continuous variable x. In GSL
+the bins of a histogram contain floating-point numbers, so they can be
+used to record both integer and non-integer distributions. The bins
+can use arbitrary sets of ranges (uniformly spaced bins are the
+default). Both one and two-dimensional histograms are supported.
+
+ Once a histogram has been created it can also be converted into a
+probability distribution function. The library provides efficient
+routines for selecting random samples from probability distributions.
+This can be useful for generating simulations based on real data.
+
+ The functions are declared in the header files `gsl_histogram.h' and
+`gsl_histogram2d.h'.
+
+* Menu:
+
+* The histogram struct::
+* Histogram allocation::
+* Copying Histograms::
+* Updating and accessing histogram elements::
+* Searching histogram ranges::
+* Histogram Statistics::
+* Histogram Operations::
+* Reading and writing histograms::
+* Resampling from histograms::
+* The histogram probability distribution struct::
+* Example programs for histograms::
+* Two dimensional histograms::
+* The 2D histogram struct::
+* 2D Histogram allocation::
+* Copying 2D Histograms::
+* Updating and accessing 2D histogram elements::
+* Searching 2D histogram ranges::
+* 2D Histogram Statistics::
+* 2D Histogram Operations::
+* Reading and writing 2D histograms::
+* Resampling from 2D histograms::
+* Example programs for 2D histograms::
+
+
+File: gsl-ref.info, Node: The histogram struct, Next: Histogram allocation, Up: Histograms
+
+21.1 The histogram struct
+=========================
+
+A histogram is defined by the following struct,
+
+ -- Data Type: gsl_histogram
+ `size_t n'
+ This is the number of histogram bins
+
+ `double * range'
+ The ranges of the bins are stored in an array of N+1 elements
+ pointed to by RANGE.
+
+ `double * bin'
+ The counts for each bin are stored in an array of N elements
+ pointed to by BIN. The bins are floating-point numbers, so
+ you can increment them by non-integer values if necessary.
+
+The range for BIN[i] is given by RANGE[i] to RANGE[i+1]. For n bins
+there are n+1 entries in the array RANGE. Each bin is inclusive at the
+lower end and exclusive at the upper end. Mathematically this means
+that the bins are defined by the following inequality,
+ bin[i] corresponds to range[i] <= x < range[i+1]
+
+Here is a diagram of the correspondence between ranges and bins on the
+number-line for x,
+
+
+ [ bin[0] )[ bin[1] )[ bin[2] )[ bin[3] )[ bin[4] )
+ ---|---------|---------|---------|---------|---------|--- x
+ r[0] r[1] r[2] r[3] r[4] r[5]
+
+In this picture the values of the RANGE array are denoted by r. On the
+left-hand side of each bin the square bracket `[' denotes an inclusive
+lower bound (r <= x), and the round parentheses `)' on the right-hand
+side denote an exclusive upper bound (x < r). Thus any samples which
+fall on the upper end of the histogram are excluded. If you want to
+include this value for the last bin you will need to add an extra bin
+to your histogram.
+
+ The `gsl_histogram' struct and its associated functions are defined
+in the header file `gsl_histogram.h'.
+
+
+File: gsl-ref.info, Node: Histogram allocation, Next: Copying Histograms, Prev: The histogram struct, Up: Histograms
+
+21.2 Histogram allocation
+=========================
+
+The functions for allocating memory to a histogram follow the style of
+`malloc' and `free'. In addition they also perform their own error
+checking. If there is insufficient memory available to allocate a
+histogram then the functions call the error handler (with an error
+number of `GSL_ENOMEM') in addition to returning a null pointer. Thus
+if you use the library error handler to abort your program then it
+isn't necessary to check every histogram `alloc'.
+
+ -- Function: gsl_histogram * gsl_histogram_alloc (size_t N)
+ This function allocates memory for a histogram with N bins, and
+ returns a pointer to a newly created `gsl_histogram' struct. If
+ insufficient memory is available a null pointer is returned and the
+ error handler is invoked with an error code of `GSL_ENOMEM'. The
+ bins and ranges are not initialized, and should be prepared using
+ one of the range-setting functions below in order to make the
+ histogram ready for use.
+
+ -- Function: int gsl_histogram_set_ranges (gsl_histogram * H, const
+ double RANGE[], size_t SIZE)
+ This function sets the ranges of the existing histogram H using
+ the array RANGE of size SIZE. The values of the histogram bins
+ are reset to zero. The `range' array should contain the desired
+ bin limits. The ranges can be arbitrary, subject to the
+ restriction that they are monotonically increasing.
+
+ The following example shows how to create a histogram with
+ logarithmic bins with ranges [1,10), [10,100) and [100,1000).
+
+ gsl_histogram * h = gsl_histogram_alloc (3);
+
+ /* bin[0] covers the range 1 <= x < 10 */
+ /* bin[1] covers the range 10 <= x < 100 */
+ /* bin[2] covers the range 100 <= x < 1000 */
+
+ double range[4] = { 1.0, 10.0, 100.0, 1000.0 };
+
+ gsl_histogram_set_ranges (h, range, 4);
+
+ Note that the size of the RANGE array should be defined to be one
+ element bigger than the number of bins. The additional element is
+ required for the upper value of the final bin.
+
+ -- Function: int gsl_histogram_set_ranges_uniform (gsl_histogram * H,
+ double XMIN, double XMAX)
+ This function sets the ranges of the existing histogram H to cover
+ the range XMIN to XMAX uniformly. The values of the histogram
+ bins are reset to zero. The bin ranges are shown in the table
+ below,
+ bin[0] corresponds to xmin <= x < xmin + d
+ bin[1] corresponds to xmin + d <= x < xmin + 2 d
+ ......
+ bin[n-1] corresponds to xmin + (n-1)d <= x < xmax
+
+ where d is the bin spacing, d = (xmax-xmin)/n.
+
+ -- Function: void gsl_histogram_free (gsl_histogram * H)
+ This function frees the histogram H and all of the memory
+ associated with it.
+
+
+File: gsl-ref.info, Node: Copying Histograms, Next: Updating and accessing histogram elements, Prev: Histogram allocation, Up: Histograms
+
+21.3 Copying Histograms
+=======================
+
+ -- Function: int gsl_histogram_memcpy (gsl_histogram * DEST, const
+ gsl_histogram * SRC)
+ This function copies the histogram SRC into the pre-existing
+ histogram DEST, making DEST into an exact copy of SRC. The two
+ histograms must be of the same size.
+
+ -- Function: gsl_histogram * gsl_histogram_clone (const gsl_histogram
+ * SRC)
+ This function returns a pointer to a newly created histogram which
+ is an exact copy of the histogram SRC.
+
+
+File: gsl-ref.info, Node: Updating and accessing histogram elements, Next: Searching histogram ranges, Prev: Copying Histograms, Up: Histograms
+
+21.4 Updating and accessing histogram elements
+==============================================
+
+There are two ways to access histogram bins, either by specifying an x
+coordinate or by using the bin-index directly. The functions for
+accessing the histogram through x coordinates use a binary search to
+identify the bin which covers the appropriate range.
+
+ -- Function: int gsl_histogram_increment (gsl_histogram * H, double X)
+ This function updates the histogram H by adding one (1.0) to the
+ bin whose range contains the coordinate X.
+
+ If X lies in the valid range of the histogram then the function
+ returns zero to indicate success. If X is less than the lower
+ limit of the histogram then the function returns `GSL_EDOM', and
+ none of bins are modified. Similarly, if the value of X is greater
+ than or equal to the upper limit of the histogram then the function
+ returns `GSL_EDOM', and none of the bins are modified. The error
+ handler is not called, however, since it is often necessary to
+ compute histograms for a small range of a larger dataset, ignoring
+ the values outside the range of interest.
+
+ -- Function: int gsl_histogram_accumulate (gsl_histogram * H, double
+ X, double WEIGHT)
+ This function is similar to `gsl_histogram_increment' but increases
+ the value of the appropriate bin in the histogram H by the
+ floating-point number WEIGHT.
+
+ -- Function: double gsl_histogram_get (const gsl_histogram * H, size_t
+ I)
+ This function returns the contents of the I-th bin of the histogram
+ H. If I lies outside the valid range of indices for the histogram
+ then the error handler is called with an error code of `GSL_EDOM'
+ and the function returns 0.
+
+ -- Function: int gsl_histogram_get_range (const gsl_histogram * H,
+ size_t I, double * LOWER, double * UPPER)
+ This function finds the upper and lower range limits of the I-th
+ bin of the histogram H. If the index I is valid then the
+ corresponding range limits are stored in LOWER and UPPER. The
+ lower limit is inclusive (i.e. events with this coordinate are
+ included in the bin) and the upper limit is exclusive (i.e. events
+ with the coordinate of the upper limit are excluded and fall in the
+ neighboring higher bin, if it exists). The function returns 0 to
+ indicate success. If I lies outside the valid range of indices for
+ the histogram then the error handler is called and the function
+ returns an error code of `GSL_EDOM'.
+
+ -- Function: double gsl_histogram_max (const gsl_histogram * H)
+ -- Function: double gsl_histogram_min (const gsl_histogram * H)
+ -- Function: size_t gsl_histogram_bins (const gsl_histogram * H)
+ These functions return the maximum upper and minimum lower range
+ limits and the number of bins of the histogram H. They provide a
+ way of determining these values without accessing the
+ `gsl_histogram' struct directly.
+
+ -- Function: void gsl_histogram_reset (gsl_histogram * H)
+ This function resets all the bins in the histogram H to zero.
+
+
+File: gsl-ref.info, Node: Searching histogram ranges, Next: Histogram Statistics, Prev: Updating and accessing histogram elements, Up: Histograms
+
+21.5 Searching histogram ranges
+===============================
+
+The following functions are used by the access and update routines to
+locate the bin which corresponds to a given x coordinate.
+
+ -- Function: int gsl_histogram_find (const gsl_histogram * H, double
+ X, size_t * I)
+ This function finds and sets the index I to the bin number which
+ covers the coordinate X in the histogram H. The bin is located
+ using a binary search. The search includes an optimization for
+ histograms with uniform range, and will return the correct bin
+ immediately in this case. If X is found in the range of the
+ histogram then the function sets the index I and returns
+ `GSL_SUCCESS'. If X lies outside the valid range of the histogram
+ then the function returns `GSL_EDOM' and the error handler is
+ invoked.
+
+
+File: gsl-ref.info, Node: Histogram Statistics, Next: Histogram Operations, Prev: Searching histogram ranges, Up: Histograms
+
+21.6 Histogram Statistics
+=========================
+
+ -- Function: double gsl_histogram_max_val (const gsl_histogram * H)
+ This function returns the maximum value contained in the histogram
+ bins.
+
+ -- Function: size_t gsl_histogram_max_bin (const gsl_histogram * H)
+ This function returns the index of the bin containing the maximum
+ value. In the case where several bins contain the same maximum
+ value the smallest index is returned.
+
+ -- Function: double gsl_histogram_min_val (const gsl_histogram * H)
+ This function returns the minimum value contained in the histogram
+ bins.
+
+ -- Function: size_t gsl_histogram_min_bin (const gsl_histogram * H)
+ This function returns the index of the bin containing the minimum
+ value. In the case where several bins contain the same maximum
+ value the smallest index is returned.
+
+ -- Function: double gsl_histogram_mean (const gsl_histogram * H)
+ This function returns the mean of the histogrammed variable, where
+ the histogram is regarded as a probability distribution. Negative
+ bin values are ignored for the purposes of this calculation. The
+ accuracy of the result is limited by the bin width.
+
+ -- Function: double gsl_histogram_sigma (const gsl_histogram * H)
+ This function returns the standard deviation of the histogrammed
+ variable, where the histogram is regarded as a probability
+ distribution. Negative bin values are ignored for the purposes of
+ this calculation. The accuracy of the result is limited by the bin
+ width.
+
+ -- Function: double gsl_histogram_sum (const gsl_histogram * H)
+ This function returns the sum of all bin values. Negative bin
+ values are included in the sum.
+
+
+File: gsl-ref.info, Node: Histogram Operations, Next: Reading and writing histograms, Prev: Histogram Statistics, Up: Histograms
+
+21.7 Histogram Operations
+=========================
+
+ -- Function: int gsl_histogram_equal_bins_p (const gsl_histogram * H1,
+ const gsl_histogram * H2)
+ This function returns 1 if the all of the individual bin ranges of
+ the two histograms are identical, and 0 otherwise.
+
+ -- Function: int gsl_histogram_add (gsl_histogram * H1, const
+ gsl_histogram * H2)
+ This function adds the contents of the bins in histogram H2 to the
+ corresponding bins of histogram H1, i.e. h'_1(i) = h_1(i) +
+ h_2(i). The two histograms must have identical bin ranges.
+
+ -- Function: int gsl_histogram_sub (gsl_histogram * H1, const
+ gsl_histogram * H2)
+ This function subtracts the contents of the bins in histogram H2
+ from the corresponding bins of histogram H1, i.e. h'_1(i) = h_1(i)
+ - h_2(i). The two histograms must have identical bin ranges.
+
+ -- Function: int gsl_histogram_mul (gsl_histogram * H1, const
+ gsl_histogram * H2)
+ This function multiplies the contents of the bins of histogram H1
+ by the contents of the corresponding bins in histogram H2, i.e.
+ h'_1(i) = h_1(i) * h_2(i). The two histograms must have identical
+ bin ranges.
+
+ -- Function: int gsl_histogram_div (gsl_histogram * H1, const
+ gsl_histogram * H2)
+ This function divides the contents of the bins of histogram H1 by
+ the contents of the corresponding bins in histogram H2, i.e.
+ h'_1(i) = h_1(i) / h_2(i). The two histograms must have identical
+ bin ranges.
+
+ -- Function: int gsl_histogram_scale (gsl_histogram * H, double SCALE)
+ This function multiplies the contents of the bins of histogram H
+ by the constant SCALE, i.e. h'_1(i) = h_1(i) * scale.
+
+ -- Function: int gsl_histogram_shift (gsl_histogram * H, double OFFSET)
+ This function shifts the contents of the bins of histogram H by
+ the constant OFFSET, i.e. h'_1(i) = h_1(i) + offset.
+
+
+File: gsl-ref.info, Node: Reading and writing histograms, Next: Resampling from histograms, Prev: Histogram Operations, Up: Histograms
+
+21.8 Reading and writing histograms
+===================================
+
+The library provides functions for reading and writing histograms to a
+file as binary data or formatted text.
+
+ -- Function: int gsl_histogram_fwrite (FILE * STREAM, const
+ gsl_histogram * H)
+ This function writes the ranges and bins of the histogram H to the
+ stream STREAM in binary format. The return value is 0 for success
+ and `GSL_EFAILED' if there was a problem writing to the file.
+ Since the data is written in the native binary format it may not
+ be portable between different architectures.
+
+ -- Function: int gsl_histogram_fread (FILE * STREAM, gsl_histogram * H)
+ This function reads into the histogram H from the open stream
+ STREAM in binary format. The histogram H must be preallocated
+ with the correct size since the function uses the number of bins
+ in H to determine how many bytes to read. The return value is 0
+ for success and `GSL_EFAILED' if there was a problem reading from
+ the file. The data is assumed to have been written in the native
+ binary format on the same architecture.
+
+ -- Function: int gsl_histogram_fprintf (FILE * STREAM, const
+ gsl_histogram * H, const char * RANGE_FORMAT, const char *
+ BIN_FORMAT)
+ This function writes the ranges and bins of the histogram H
+ line-by-line to the stream STREAM using the format specifiers
+ RANGE_FORMAT and BIN_FORMAT. These should be one of the `%g',
+ `%e' or `%f' formats for floating point numbers. The function
+ returns 0 for success and `GSL_EFAILED' if there was a problem
+ writing to the file. The histogram output is formatted in three
+ columns, and the columns are separated by spaces, like this,
+
+ range[0] range[1] bin[0]
+ range[1] range[2] bin[1]
+ range[2] range[3] bin[2]
+ ....
+ range[n-1] range[n] bin[n-1]
+
+ The values of the ranges are formatted using RANGE_FORMAT and the
+ value of the bins are formatted using BIN_FORMAT. Each line
+ contains the lower and upper limit of the range of the bins and the
+ value of the bin itself. Since the upper limit of one bin is the
+ lower limit of the next there is duplication of these values
+ between lines but this allows the histogram to be manipulated with
+ line-oriented tools.
+
+ -- Function: int gsl_histogram_fscanf (FILE * STREAM, gsl_histogram *
+ H)
+ This function reads formatted data from the stream STREAM into the
+ histogram H. The data is assumed to be in the three-column format
+ used by `gsl_histogram_fprintf'. The histogram H must be
+ preallocated with the correct length since the function uses the
+ size of H to determine how many numbers to read. The function
+ returns 0 for success and `GSL_EFAILED' if there was a problem
+ reading from the file.
+
+
+File: gsl-ref.info, Node: Resampling from histograms, Next: The histogram probability distribution struct, Prev: Reading and writing histograms, Up: Histograms
+
+21.9 Resampling from histograms
+===============================
+
+A histogram made by counting events can be regarded as a measurement of
+a probability distribution. Allowing for statistical error, the height
+of each bin represents the probability of an event where the value of x
+falls in the range of that bin. The probability distribution function
+has the one-dimensional form p(x)dx where,
+
+ p(x) = n_i/ (N w_i)
+
+In this equation n_i is the number of events in the bin which contains
+x, w_i is the width of the bin and N is the total number of events.
+The distribution of events within each bin is assumed to be uniform.
+
+
+File: gsl-ref.info, Node: The histogram probability distribution struct, Next: Example programs for histograms, Prev: Resampling from histograms, Up: Histograms
+
+21.10 The histogram probability distribution struct
+===================================================
+
+The probability distribution function for a histogram consists of a set
+of "bins" which measure the probability of an event falling into a
+given range of a continuous variable x. A probability distribution
+function is defined by the following struct, which actually stores the
+cumulative probability distribution function. This is the natural
+quantity for generating samples via the inverse transform method,
+because there is a one-to-one mapping between the cumulative
+probability distribution and the range [0,1]. It can be shown that by
+taking a uniform random number in this range and finding its
+corresponding coordinate in the cumulative probability distribution we
+obtain samples with the desired probability distribution.
+
+ -- Data Type: gsl_histogram_pdf
+ `size_t n'
+ This is the number of bins used to approximate the probability
+ distribution function.
+
+ `double * range'
+ The ranges of the bins are stored in an array of N+1 elements
+ pointed to by RANGE.
+
+ `double * sum'
+ The cumulative probability for the bins is stored in an array
+ of N elements pointed to by SUM.
+
+The following functions allow you to create a `gsl_histogram_pdf'
+struct which represents this probability distribution and generate
+random samples from it.
+
+ -- Function: gsl_histogram_pdf * gsl_histogram_pdf_alloc (size_t N)
+ This function allocates memory for a probability distribution with
+ N bins and returns a pointer to a newly initialized
+ `gsl_histogram_pdf' struct. If insufficient memory is available a
+ null pointer is returned and the error handler is invoked with an
+ error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_histogram_pdf_init (gsl_histogram_pdf * P, const
+ gsl_histogram * H)
+ This function initializes the probability distribution P with the
+ contents of the histogram H. If any of the bins of H are negative
+ then the error handler is invoked with an error code of `GSL_EDOM'
+ because a probability distribution cannot contain negative values.
+
+ -- Function: void gsl_histogram_pdf_free (gsl_histogram_pdf * P)
+ This function frees the probability distribution function P and
+ all of the memory associated with it.
+
+ -- Function: double gsl_histogram_pdf_sample (const gsl_histogram_pdf
+ * P, double R)
+ This function uses R, a uniform random number between zero and
+ one, to compute a single random sample from the probability
+ distribution P. The algorithm used to compute the sample s is
+ given by the following formula,
+
+ s = range[i] + delta * (range[i+1] - range[i])
+
+ where i is the index which satisfies sum[i] <= r < sum[i+1] and
+ delta is (r - sum[i])/(sum[i+1] - sum[i]).
+
+
+File: gsl-ref.info, Node: Example programs for histograms, Next: Two dimensional histograms, Prev: The histogram probability distribution struct, Up: Histograms
+
+21.11 Example programs for histograms
+=====================================
+
+The following program shows how to make a simple histogram of a column
+of numerical data supplied on `stdin'. The program takes three
+arguments, specifying the upper and lower bounds of the histogram and
+the number of bins. It then reads numbers from `stdin', one line at a
+time, and adds them to the histogram. When there is no more data to
+read it prints out the accumulated histogram using
+`gsl_histogram_fprintf'.
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <gsl/gsl_histogram.h>
+
+ int
+ main (int argc, char **argv)
+ {
+ double a, b;
+ size_t n;
+
+ if (argc != 4)
+ {
+ printf ("Usage: gsl-histogram xmin xmax n\n"
+ "Computes a histogram of the data "
+ "on stdin using n bins from xmin "
+ "to xmax\n");
+ exit (0);
+ }
+
+ a = atof (argv[1]);
+ b = atof (argv[2]);
+ n = atoi (argv[3]);
+
+ {
+ double x;
+ gsl_histogram * h = gsl_histogram_alloc (n);
+ gsl_histogram_set_ranges_uniform (h, a, b);
+
+ while (fscanf (stdin, "%lg", &x) == 1)
+ {
+ gsl_histogram_increment (h, x);
+ }
+ gsl_histogram_fprintf (stdout, h, "%g", "%g");
+ gsl_histogram_free (h);
+ }
+ exit (0);
+ }
+
+Here is an example of the program in use. We generate 10000 random
+samples from a Cauchy distribution with a width of 30 and histogram
+them over the range -100 to 100, using 200 bins.
+
+ $ gsl-randist 0 10000 cauchy 30
+ | gsl-histogram -100 100 200 > histogram.dat
+
+A plot of the resulting histogram shows the familiar shape of the
+Cauchy distribution and the fluctuations caused by the finite sample
+size.
+
+ $ awk '{print $1, $3 ; print $2, $3}' histogram.dat
+ | graph -T X
+
+
+File: gsl-ref.info, Node: Two dimensional histograms, Next: The 2D histogram struct, Prev: Example programs for histograms, Up: Histograms
+
+21.12 Two dimensional histograms
+================================
+
+A two dimensional histogram consists of a set of "bins" which count the
+number of events falling in a given area of the (x,y) plane. The
+simplest way to use a two dimensional histogram is to record
+two-dimensional position information, n(x,y). Another possibility is
+to form a "joint distribution" by recording related variables. For
+example a detector might record both the position of an event (x) and
+the amount of energy it deposited E. These could be histogrammed as
+the joint distribution n(x,E).
+
+
+File: gsl-ref.info, Node: The 2D histogram struct, Next: 2D Histogram allocation, Prev: Two dimensional histograms, Up: Histograms
+
+21.13 The 2D histogram struct
+=============================
+
+Two dimensional histograms are defined by the following struct,
+
+ -- Data Type: gsl_histogram2d
+ `size_t nx, ny'
+ This is the number of histogram bins in the x and y
+ directions.
+
+ `double * xrange'
+ The ranges of the bins in the x-direction are stored in an
+ array of NX + 1 elements pointed to by XRANGE.
+
+ `double * yrange'
+ The ranges of the bins in the y-direction are stored in an
+ array of NY + 1 elements pointed to by YRANGE.
+
+ `double * bin'
+ The counts for each bin are stored in an array pointed to by
+ BIN. The bins are floating-point numbers, so you can
+ increment them by non-integer values if necessary. The array
+ BIN stores the two dimensional array of bins in a single
+ block of memory according to the mapping `bin(i,j)' = `bin[i
+ * ny + j]'.
+
+The range for `bin(i,j)' is given by `xrange[i]' to `xrange[i+1]' in
+the x-direction and `yrange[j]' to `yrange[j+1]' in the y-direction.
+Each bin is inclusive at the lower end and exclusive at the upper end.
+Mathematically this means that the bins are defined by the following
+inequality,
+ bin(i,j) corresponds to xrange[i] <= x < xrange[i+1]
+ and yrange[j] <= y < yrange[j+1]
+
+Note that any samples which fall on the upper sides of the histogram are
+excluded. If you want to include these values for the side bins you
+will need to add an extra row or column to your histogram.
+
+ The `gsl_histogram2d' struct and its associated functions are
+defined in the header file `gsl_histogram2d.h'.
+
+
+File: gsl-ref.info, Node: 2D Histogram allocation, Next: Copying 2D Histograms, Prev: The 2D histogram struct, Up: Histograms
+
+21.14 2D Histogram allocation
+=============================
+
+The functions for allocating memory to a 2D histogram follow the style
+of `malloc' and `free'. In addition they also perform their own error
+checking. If there is insufficient memory available to allocate a
+histogram then the functions call the error handler (with an error
+number of `GSL_ENOMEM') in addition to returning a null pointer. Thus
+if you use the library error handler to abort your program then it
+isn't necessary to check every 2D histogram `alloc'.
+
+ -- Function: gsl_histogram2d * gsl_histogram2d_alloc (size_t NX,
+ size_t NY)
+ This function allocates memory for a two-dimensional histogram with
+ NX bins in the x direction and NY bins in the y direction. The
+ function returns a pointer to a newly created `gsl_histogram2d'
+ struct. If insufficient memory is available a null pointer is
+ returned and the error handler is invoked with an error code of
+ `GSL_ENOMEM'. The bins and ranges must be initialized with one of
+ the functions below before the histogram is ready for use.
+
+ -- Function: int gsl_histogram2d_set_ranges (gsl_histogram2d * H,
+ const double XRANGE[], size_t XSIZE, const double YRANGE[],
+ size_t YSIZE)
+ This function sets the ranges of the existing histogram H using
+ the arrays XRANGE and YRANGE of size XSIZE and YSIZE respectively.
+ The values of the histogram bins are reset to zero.
+
+ -- Function: int gsl_histogram2d_set_ranges_uniform (gsl_histogram2d *
+ H, double XMIN, double XMAX, double YMIN, double YMAX)
+ This function sets the ranges of the existing histogram H to cover
+ the ranges XMIN to XMAX and YMIN to YMAX uniformly. The values of
+ the histogram bins are reset to zero.
+
+ -- Function: void gsl_histogram2d_free (gsl_histogram2d * H)
+ This function frees the 2D histogram H and all of the memory
+ associated with it.
+
+
+File: gsl-ref.info, Node: Copying 2D Histograms, Next: Updating and accessing 2D histogram elements, Prev: 2D Histogram allocation, Up: Histograms
+
+21.15 Copying 2D Histograms
+===========================
+
+ -- Function: int gsl_histogram2d_memcpy (gsl_histogram2d * DEST, const
+ gsl_histogram2d * SRC)
+ This function copies the histogram SRC into the pre-existing
+ histogram DEST, making DEST into an exact copy of SRC. The two
+ histograms must be of the same size.
+
+ -- Function: gsl_histogram2d * gsl_histogram2d_clone (const
+ gsl_histogram2d * SRC)
+ This function returns a pointer to a newly created histogram which
+ is an exact copy of the histogram SRC.
+
+
+File: gsl-ref.info, Node: Updating and accessing 2D histogram elements, Next: Searching 2D histogram ranges, Prev: Copying 2D Histograms, Up: Histograms
+
+21.16 Updating and accessing 2D histogram elements
+==================================================
+
+You can access the bins of a two-dimensional histogram either by
+specifying a pair of (x,y) coordinates or by using the bin indices
+(i,j) directly. The functions for accessing the histogram through
+(x,y) coordinates use binary searches in the x and y directions to
+identify the bin which covers the appropriate range.
+
+ -- Function: int gsl_histogram2d_increment (gsl_histogram2d * H,
+ double X, double Y)
+ This function updates the histogram H by adding one (1.0) to the
+ bin whose x and y ranges contain the coordinates (X,Y).
+
+ If the point (x,y) lies inside the valid ranges of the histogram
+ then the function returns zero to indicate success. If (x,y) lies
+ outside the limits of the histogram then the function returns
+ `GSL_EDOM', and none of the bins are modified. The error handler
+ is not called, since it is often necessary to compute histograms
+ for a small range of a larger dataset, ignoring any coordinates
+ outside the range of interest.
+
+ -- Function: int gsl_histogram2d_accumulate (gsl_histogram2d * H,
+ double X, double Y, double WEIGHT)
+ This function is similar to `gsl_histogram2d_increment' but
+ increases the value of the appropriate bin in the histogram H by
+ the floating-point number WEIGHT.
+
+ -- Function: double gsl_histogram2d_get (const gsl_histogram2d * H,
+ size_t I, size_t J)
+ This function returns the contents of the (I,J)-th bin of the
+ histogram H. If (I,J) lies outside the valid range of indices for
+ the histogram then the error handler is called with an error code
+ of `GSL_EDOM' and the function returns 0.
+
+ -- Function: int gsl_histogram2d_get_xrange (const gsl_histogram2d *
+ H, size_t I, double * XLOWER, double * XUPPER)
+ -- Function: int gsl_histogram2d_get_yrange (const gsl_histogram2d *
+ H, size_t J, double * YLOWER, double * YUPPER)
+ These functions find the upper and lower range limits of the I-th
+ and J-th bins in the x and y directions of the histogram H. The
+ range limits are stored in XLOWER and XUPPER or YLOWER and YUPPER.
+ The lower limits are inclusive (i.e. events with these
+ coordinates are included in the bin) and the upper limits are
+ exclusive (i.e. events with the value of the upper limit are not
+ included and fall in the neighboring higher bin, if it exists).
+ The functions return 0 to indicate success. If I or J lies
+ outside the valid range of indices for the histogram then the
+ error handler is called with an error code of `GSL_EDOM'.
+
+ -- Function: double gsl_histogram2d_xmax (const gsl_histogram2d * H)
+ -- Function: double gsl_histogram2d_xmin (const gsl_histogram2d * H)
+ -- Function: size_t gsl_histogram2d_nx (const gsl_histogram2d * H)
+ -- Function: double gsl_histogram2d_ymax (const gsl_histogram2d * H)
+ -- Function: double gsl_histogram2d_ymin (const gsl_histogram2d * H)
+ -- Function: size_t gsl_histogram2d_ny (const gsl_histogram2d * H)
+ These functions return the maximum upper and minimum lower range
+ limits and the number of bins for the x and y directions of the
+ histogram H. They provide a way of determining these values
+ without accessing the `gsl_histogram2d' struct directly.
+
+ -- Function: void gsl_histogram2d_reset (gsl_histogram2d * H)
+ This function resets all the bins of the histogram H to zero.
+
+
+File: gsl-ref.info, Node: Searching 2D histogram ranges, Next: 2D Histogram Statistics, Prev: Updating and accessing 2D histogram elements, Up: Histograms
+
+21.17 Searching 2D histogram ranges
+===================================
+
+The following functions are used by the access and update routines to
+locate the bin which corresponds to a given (x,y) coordinate.
+
+ -- Function: int gsl_histogram2d_find (const gsl_histogram2d * H,
+ double X, double Y, size_t * I, size_t * J)
+ This function finds and sets the indices I and J to the to the bin
+ which covers the coordinates (X,Y). The bin is located using a
+ binary search. The search includes an optimization for histograms
+ with uniform ranges, and will return the correct bin immediately
+ in this case. If (x,y) is found then the function sets the indices
+ (I,J) and returns `GSL_SUCCESS'. If (x,y) lies outside the valid
+ range of the histogram then the function returns `GSL_EDOM' and
+ the error handler is invoked.
+
+
+File: gsl-ref.info, Node: 2D Histogram Statistics, Next: 2D Histogram Operations, Prev: Searching 2D histogram ranges, Up: Histograms
+
+21.18 2D Histogram Statistics
+=============================
+
+ -- Function: double gsl_histogram2d_max_val (const gsl_histogram2d * H)
+ This function returns the maximum value contained in the histogram
+ bins.
+
+ -- Function: void gsl_histogram2d_max_bin (const gsl_histogram2d * H,
+ size_t * I, size_t * J)
+ This function finds the indices of the bin containing the maximum
+ value in the histogram H and stores the result in (I,J). In the
+ case where several bins contain the same maximum value the first
+ bin found is returned.
+
+ -- Function: double gsl_histogram2d_min_val (const gsl_histogram2d * H)
+ This function returns the minimum value contained in the histogram
+ bins.
+
+ -- Function: void gsl_histogram2d_min_bin (const gsl_histogram2d * H,
+ size_t * I, size_t * J)
+ This function finds the indices of the bin containing the minimum
+ value in the histogram H and stores the result in (I,J). In the
+ case where several bins contain the same maximum value the first
+ bin found is returned.
+
+ -- Function: double gsl_histogram2d_xmean (const gsl_histogram2d * H)
+ This function returns the mean of the histogrammed x variable,
+ where the histogram is regarded as a probability distribution.
+ Negative bin values are ignored for the purposes of this
+ calculation.
+
+ -- Function: double gsl_histogram2d_ymean (const gsl_histogram2d * H)
+ This function returns the mean of the histogrammed y variable,
+ where the histogram is regarded as a probability distribution.
+ Negative bin values are ignored for the purposes of this
+ calculation.
+
+ -- Function: double gsl_histogram2d_xsigma (const gsl_histogram2d * H)
+ This function returns the standard deviation of the histogrammed x
+ variable, where the histogram is regarded as a probability
+ distribution. Negative bin values are ignored for the purposes of
+ this calculation.
+
+ -- Function: double gsl_histogram2d_ysigma (const gsl_histogram2d * H)
+ This function returns the standard deviation of the histogrammed y
+ variable, where the histogram is regarded as a probability
+ distribution. Negative bin values are ignored for the purposes of
+ this calculation.
+
+ -- Function: double gsl_histogram2d_cov (const gsl_histogram2d * H)
+ This function returns the covariance of the histogrammed x and y
+ variables, where the histogram is regarded as a probability
+ distribution. Negative bin values are ignored for the purposes of
+ this calculation.
+
+ -- Function: double gsl_histogram2d_sum (const gsl_histogram2d * H)
+ This function returns the sum of all bin values. Negative bin
+ values are included in the sum.
+
+
+File: gsl-ref.info, Node: 2D Histogram Operations, Next: Reading and writing 2D histograms, Prev: 2D Histogram Statistics, Up: Histograms
+
+21.19 2D Histogram Operations
+=============================
+
+ -- Function: int gsl_histogram2d_equal_bins_p (const gsl_histogram2d *
+ H1, const gsl_histogram2d * H2)
+ This function returns 1 if all the individual bin ranges of the two
+ histograms are identical, and 0 otherwise.
+
+ -- Function: int gsl_histogram2d_add (gsl_histogram2d * H1, const
+ gsl_histogram2d * H2)
+ This function adds the contents of the bins in histogram H2 to the
+ corresponding bins of histogram H1, i.e. h'_1(i,j) = h_1(i,j) +
+ h_2(i,j). The two histograms must have identical bin ranges.
+
+ -- Function: int gsl_histogram2d_sub (gsl_histogram2d * H1, const
+ gsl_histogram2d * H2)
+ This function subtracts the contents of the bins in histogram H2
+ from the corresponding bins of histogram H1, i.e. h'_1(i,j) =
+ h_1(i,j) - h_2(i,j). The two histograms must have identical bin
+ ranges.
+
+ -- Function: int gsl_histogram2d_mul (gsl_histogram2d * H1, const
+ gsl_histogram2d * H2)
+ This function multiplies the contents of the bins of histogram H1
+ by the contents of the corresponding bins in histogram H2, i.e.
+ h'_1(i,j) = h_1(i,j) * h_2(i,j). The two histograms must have
+ identical bin ranges.
+
+ -- Function: int gsl_histogram2d_div (gsl_histogram2d * H1, const
+ gsl_histogram2d * H2)
+ This function divides the contents of the bins of histogram H1 by
+ the contents of the corresponding bins in histogram H2, i.e.
+ h'_1(i,j) = h_1(i,j) / h_2(i,j). The two histograms must have
+ identical bin ranges.
+
+ -- Function: int gsl_histogram2d_scale (gsl_histogram2d * H, double
+ SCALE)
+ This function multiplies the contents of the bins of histogram H
+ by the constant SCALE, i.e. h'_1(i,j) = h_1(i,j) scale.
+
+ -- Function: int gsl_histogram2d_shift (gsl_histogram2d * H, double
+ OFFSET)
+ This function shifts the contents of the bins of histogram H by
+ the constant OFFSET, i.e. h'_1(i,j) = h_1(i,j) + offset.
+
+
+File: gsl-ref.info, Node: Reading and writing 2D histograms, Next: Resampling from 2D histograms, Prev: 2D Histogram Operations, Up: Histograms
+
+21.20 Reading and writing 2D histograms
+=======================================
+
+The library provides functions for reading and writing two dimensional
+histograms to a file as binary data or formatted text.
+
+ -- Function: int gsl_histogram2d_fwrite (FILE * STREAM, const
+ gsl_histogram2d * H)
+ This function writes the ranges and bins of the histogram H to the
+ stream STREAM in binary format. The return value is 0 for success
+ and `GSL_EFAILED' if there was a problem writing to the file.
+ Since the data is written in the native binary format it may not
+ be portable between different architectures.
+
+ -- Function: int gsl_histogram2d_fread (FILE * STREAM, gsl_histogram2d
+ * H)
+ This function reads into the histogram H from the stream STREAM in
+ binary format. The histogram H must be preallocated with the
+ correct size since the function uses the number of x and y bins in
+ H to determine how many bytes to read. The return value is 0 for
+ success and `GSL_EFAILED' if there was a problem reading from the
+ file. The data is assumed to have been written in the native
+ binary format on the same architecture.
+
+ -- Function: int gsl_histogram2d_fprintf (FILE * STREAM, const
+ gsl_histogram2d * H, const char * RANGE_FORMAT, const char *
+ BIN_FORMAT)
+ This function writes the ranges and bins of the histogram H
+ line-by-line to the stream STREAM using the format specifiers
+ RANGE_FORMAT and BIN_FORMAT. These should be one of the `%g',
+ `%e' or `%f' formats for floating point numbers. The function
+ returns 0 for success and `GSL_EFAILED' if there was a problem
+ writing to the file. The histogram output is formatted in five
+ columns, and the columns are separated by spaces, like this,
+
+ xrange[0] xrange[1] yrange[0] yrange[1] bin(0,0)
+ xrange[0] xrange[1] yrange[1] yrange[2] bin(0,1)
+ xrange[0] xrange[1] yrange[2] yrange[3] bin(0,2)
+ ....
+ xrange[0] xrange[1] yrange[ny-1] yrange[ny] bin(0,ny-1)
+
+ xrange[1] xrange[2] yrange[0] yrange[1] bin(1,0)
+ xrange[1] xrange[2] yrange[1] yrange[2] bin(1,1)
+ xrange[1] xrange[2] yrange[1] yrange[2] bin(1,2)
+ ....
+ xrange[1] xrange[2] yrange[ny-1] yrange[ny] bin(1,ny-1)
+
+ ....
+
+ xrange[nx-1] xrange[nx] yrange[0] yrange[1] bin(nx-1,0)
+ xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,1)
+ xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,2)
+ ....
+ xrange[nx-1] xrange[nx] yrange[ny-1] yrange[ny] bin(nx-1,ny-1)
+
+ Each line contains the lower and upper limits of the bin and the
+ contents of the bin. Since the upper limits of the each bin are
+ the lower limits of the neighboring bins there is duplication of
+ these values but this allows the histogram to be manipulated with
+ line-oriented tools.
+
+ -- Function: int gsl_histogram2d_fscanf (FILE * STREAM,
+ gsl_histogram2d * H)
+ This function reads formatted data from the stream STREAM into the
+ histogram H. The data is assumed to be in the five-column format
+ used by `gsl_histogram_fprintf'. The histogram H must be
+ preallocated with the correct lengths since the function uses the
+ sizes of H to determine how many numbers to read. The function
+ returns 0 for success and `GSL_EFAILED' if there was a problem
+ reading from the file.
+
+
+File: gsl-ref.info, Node: Resampling from 2D histograms, Next: Example programs for 2D histograms, Prev: Reading and writing 2D histograms, Up: Histograms
+
+21.21 Resampling from 2D histograms
+===================================
+
+As in the one-dimensional case, a two-dimensional histogram made by
+counting events can be regarded as a measurement of a probability
+distribution. Allowing for statistical error, the height of each bin
+represents the probability of an event where (x,y) falls in the range
+of that bin. For a two-dimensional histogram the probability
+distribution takes the form p(x,y) dx dy where,
+
+ p(x,y) = n_{ij}/ (N A_{ij})
+
+In this equation n_{ij} is the number of events in the bin which
+contains (x,y), A_{ij} is the area of the bin and N is the total number
+of events. The distribution of events within each bin is assumed to be
+uniform.
+
+ -- Data Type: gsl_histogram2d_pdf
+ `size_t nx, ny'
+ This is the number of histogram bins used to approximate the
+ probability distribution function in the x and y directions.
+
+ `double * xrange'
+ The ranges of the bins in the x-direction are stored in an
+ array of NX + 1 elements pointed to by XRANGE.
+
+ `double * yrange'
+ The ranges of the bins in the y-direction are stored in an
+ array of NY + 1 pointed to by YRANGE.
+
+ `double * sum'
+ The cumulative probability for the bins is stored in an array
+ of NX*NY elements pointed to by SUM.
+
+The following functions allow you to create a `gsl_histogram2d_pdf'
+struct which represents a two dimensional probability distribution and
+generate random samples from it.
+
+ -- Function: gsl_histogram2d_pdf * gsl_histogram2d_pdf_alloc (size_t
+ NX, size_t NY)
+ This function allocates memory for a two-dimensional probability
+ distribution of size NX-by-NY and returns a pointer to a newly
+ initialized `gsl_histogram2d_pdf' struct. If insufficient memory
+ is available a null pointer is returned and the error handler is
+ invoked with an error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * P,
+ const gsl_histogram2d * H)
+ This function initializes the two-dimensional probability
+ distribution calculated P from the histogram H. If any of the
+ bins of H are negative then the error handler is invoked with an
+ error code of `GSL_EDOM' because a probability distribution cannot
+ contain negative values.
+
+ -- Function: void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * P)
+ This function frees the two-dimensional probability distribution
+ function P and all of the memory associated with it.
+
+ -- Function: int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf
+ * P, double R1, double R2, double * X, double * Y)
+ This function uses two uniform random numbers between zero and one,
+ R1 and R2, to compute a single random sample from the
+ two-dimensional probability distribution P.
+
+
+File: gsl-ref.info, Node: Example programs for 2D histograms, Prev: Resampling from 2D histograms, Up: Histograms
+
+21.22 Example programs for 2D histograms
+========================================
+
+This program demonstrates two features of two-dimensional histograms.
+First a 10-by-10 two-dimensional histogram is created with x and y
+running from 0 to 1. Then a few sample points are added to the
+histogram, at (0.3,0.3) with a height of 1, at (0.8,0.1) with a height
+of 5 and at (0.7,0.9) with a height of 0.5. This histogram with three
+events is used to generate a random sample of 1000 simulated events,
+which are printed out.
+
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_histogram2d.h>
+
+ int
+ main (void)
+ {
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_histogram2d * h = gsl_histogram2d_alloc (10, 10);
+
+ gsl_histogram2d_set_ranges_uniform (h,
+ 0.0, 1.0,
+ 0.0, 1.0);
+
+ gsl_histogram2d_accumulate (h, 0.3, 0.3, 1);
+ gsl_histogram2d_accumulate (h, 0.8, 0.1, 5);
+ gsl_histogram2d_accumulate (h, 0.7, 0.9, 0.5);
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ {
+ int i;
+ gsl_histogram2d_pdf * p
+ = gsl_histogram2d_pdf_alloc (h->nx, h->ny);
+
+ gsl_histogram2d_pdf_init (p, h);
+
+ for (i = 0; i < 1000; i++) {
+ double x, y;
+ double u = gsl_rng_uniform (r);
+ double v = gsl_rng_uniform (r);
+
+ gsl_histogram2d_pdf_sample (p, u, v, &x, &y);
+
+ printf ("%g %g\n", x, y);
+ }
+
+ gsl_histogram2d_pdf_free (p);
+ }
+
+ gsl_histogram2d_free (h);
+ gsl_rng_free (r);
+
+ return 0;
+ }
+
+
+
+File: gsl-ref.info, Node: N-tuples, Next: Monte Carlo Integration, Prev: Histograms, Up: Top
+
+22 N-tuples
+***********
+
+This chapter describes functions for creating and manipulating
+"ntuples", sets of values associated with events. The ntuples are
+stored in files. Their values can be extracted in any combination and
+"booked" in a histogram using a selection function.
+
+ The values to be stored are held in a user-defined data structure,
+and an ntuple is created associating this data structure with a file.
+The values are then written to the file (normally inside a loop) using
+the ntuple functions described below.
+
+ A histogram can be created from ntuple data by providing a selection
+function and a value function. The selection function specifies whether
+an event should be included in the subset to be analyzed or not. The
+value function computes the entry to be added to the histogram for each
+event.
+
+ All the ntuple functions are defined in the header file
+`gsl_ntuple.h'
+
+* Menu:
+
+* The ntuple struct::
+* Creating ntuples::
+* Opening an existing ntuple file::
+* Writing ntuples::
+* Reading ntuples ::
+* Closing an ntuple file::
+* Histogramming ntuple values::
+* Example ntuple programs::
+* Ntuple References and Further Reading::
+
+
+File: gsl-ref.info, Node: The ntuple struct, Next: Creating ntuples, Up: N-tuples
+
+22.1 The ntuple struct
+======================
+
+Ntuples are manipulated using the `gsl_ntuple' struct. This struct
+contains information on the file where the ntuple data is stored, a
+pointer to the current ntuple data row and the size of the user-defined
+ntuple data struct.
+
+ typedef struct {
+ FILE * file;
+ void * ntuple_data;
+ size_t size;
+ } gsl_ntuple;
+
+
+File: gsl-ref.info, Node: Creating ntuples, Next: Opening an existing ntuple file, Prev: The ntuple struct, Up: N-tuples
+
+22.2 Creating ntuples
+=====================
+
+ -- Function: gsl_ntuple * gsl_ntuple_create (char * FILENAME, void *
+ NTUPLE_DATA, size_t SIZE)
+ This function creates a new write-only ntuple file FILENAME for
+ ntuples of size SIZE and returns a pointer to the newly created
+ ntuple struct. Any existing file with the same name is truncated
+ to zero length and overwritten. A pointer to memory for the
+ current ntuple row NTUPLE_DATA must be supplied--this is used to
+ copy ntuples in and out of the file.
+
+
+File: gsl-ref.info, Node: Opening an existing ntuple file, Next: Writing ntuples, Prev: Creating ntuples, Up: N-tuples
+
+22.3 Opening an existing ntuple file
+====================================
+
+ -- Function: gsl_ntuple * gsl_ntuple_open (char * FILENAME, void *
+ NTUPLE_DATA, size_t SIZE)
+ This function opens an existing ntuple file FILENAME for reading
+ and returns a pointer to a corresponding ntuple struct. The
+ ntuples in the file must have size SIZE. A pointer to memory for
+ the current ntuple row NTUPLE_DATA must be supplied--this is used
+ to copy ntuples in and out of the file.
+
+
+File: gsl-ref.info, Node: Writing ntuples, Next: Reading ntuples, Prev: Opening an existing ntuple file, Up: N-tuples
+
+22.4 Writing ntuples
+====================
+
+ -- Function: int gsl_ntuple_write (gsl_ntuple * NTUPLE)
+ This function writes the current ntuple NTUPLE->NTUPLE_DATA of
+ size NTUPLE->SIZE to the corresponding file.
+
+ -- Function: int gsl_ntuple_bookdata (gsl_ntuple * NTUPLE)
+ This function is a synonym for `gsl_ntuple_write'.
+
+
+File: gsl-ref.info, Node: Reading ntuples, Next: Closing an ntuple file, Prev: Writing ntuples, Up: N-tuples
+
+22.5 Reading ntuples
+====================
+
+ -- Function: int gsl_ntuple_read (gsl_ntuple * NTUPLE)
+ This function reads the current row of the ntuple file for NTUPLE
+ and stores the values in NTUPLE->DATA.
+
+
+File: gsl-ref.info, Node: Closing an ntuple file, Next: Histogramming ntuple values, Prev: Reading ntuples, Up: N-tuples
+
+22.6 Closing an ntuple file
+===========================
+
+ -- Function: int gsl_ntuple_close (gsl_ntuple * NTUPLE)
+ This function closes the ntuple file NTUPLE and frees its
+ associated allocated memory.
+
+
+File: gsl-ref.info, Node: Histogramming ntuple values, Next: Example ntuple programs, Prev: Closing an ntuple file, Up: N-tuples
+
+22.7 Histogramming ntuple values
+================================
+
+Once an ntuple has been created its contents can be histogrammed in
+various ways using the function `gsl_ntuple_project'. Two user-defined
+functions must be provided, a function to select events and a function
+to compute scalar values. The selection function and the value function
+both accept the ntuple row as a first argument and other parameters as
+a second argument.
+
+ The "selection function" determines which ntuple rows are selected
+for histogramming. It is defined by the following struct,
+ typedef struct {
+ int (* function) (void * ntuple_data, void * params);
+ void * params;
+ } gsl_ntuple_select_fn;
+
+The struct component FUNCTION should return a non-zero value for each
+ntuple row that is to be included in the histogram.
+
+ The "value function" computes scalar values for those ntuple rows
+selected by the selection function,
+ typedef struct {
+ double (* function) (void * ntuple_data, void * params);
+ void * params;
+ } gsl_ntuple_value_fn;
+
+In this case the struct component FUNCTION should return the value to
+be added to the histogram for the ntuple row.
+
+ -- Function: int gsl_ntuple_project (gsl_histogram * H, gsl_ntuple *
+ NTUPLE, gsl_ntuple_value_fn * VALUE_FUNC,
+ gsl_ntuple_select_fn * SELECT_FUNC)
+ This function updates the histogram H from the ntuple NTUPLE using
+ the functions VALUE_FUNC and SELECT_FUNC. For each ntuple row
+ where the selection function SELECT_FUNC is non-zero the
+ corresponding value of that row is computed using the function
+ VALUE_FUNC and added to the histogram. Those ntuple rows where
+ SELECT_FUNC returns zero are ignored. New entries are added to
+ the histogram, so subsequent calls can be used to accumulate
+ further data in the same histogram.
+
+
+File: gsl-ref.info, Node: Example ntuple programs, Next: Ntuple References and Further Reading, Prev: Histogramming ntuple values, Up: N-tuples
+
+22.8 Examples
+=============
+
+The following example programs demonstrate the use of ntuples in
+managing a large dataset. The first program creates a set of 10,000
+simulated "events", each with 3 associated values (x,y,z). These are
+generated from a gaussian distribution with unit variance, for
+demonstration purposes, and written to the ntuple file `test.dat'.
+
+ #include <gsl/gsl_ntuple.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_randist.h>
+
+ struct data
+ {
+ double x;
+ double y;
+ double z;
+ };
+
+ int
+ main (void)
+ {
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ struct data ntuple_row;
+ int i;
+
+ gsl_ntuple *ntuple
+ = gsl_ntuple_create ("test.dat", &ntuple_row,
+ sizeof (ntuple_row));
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (i = 0; i < 10000; i++)
+ {
+ ntuple_row.x = gsl_ran_ugaussian (r);
+ ntuple_row.y = gsl_ran_ugaussian (r);
+ ntuple_row.z = gsl_ran_ugaussian (r);
+
+ gsl_ntuple_write (ntuple);
+ }
+
+ gsl_ntuple_close (ntuple);
+ gsl_rng_free (r);
+
+ return 0;
+ }
+
+The next program analyses the ntuple data in the file `test.dat'. The
+analysis procedure is to compute the squared-magnitude of each event,
+E^2=x^2+y^2+z^2, and select only those which exceed a lower limit of
+1.5. The selected events are then histogrammed using their E^2 values.
+
+ #include <math.h>
+ #include <gsl/gsl_ntuple.h>
+ #include <gsl/gsl_histogram.h>
+
+ struct data
+ {
+ double x;
+ double y;
+ double z;
+ };
+
+ int sel_func (void *ntuple_data, void *params);
+ double val_func (void *ntuple_data, void *params);
+
+ int
+ main (void)
+ {
+ struct data ntuple_row;
+
+ gsl_ntuple *ntuple
+ = gsl_ntuple_open ("test.dat", &ntuple_row,
+ sizeof (ntuple_row));
+ double lower = 1.5;
+
+ gsl_ntuple_select_fn S;
+ gsl_ntuple_value_fn V;
+
+ gsl_histogram *h = gsl_histogram_alloc (100);
+ gsl_histogram_set_ranges_uniform(h, 0.0, 10.0);
+
+ S.function = &sel_func;
+ S.params = &lower;
+
+ V.function = &val_func;
+ V.params = 0;
+
+ gsl_ntuple_project (h, ntuple, &V, &S);
+ gsl_histogram_fprintf (stdout, h, "%f", "%f");
+ gsl_histogram_free (h);
+ gsl_ntuple_close (ntuple);
+
+ return 0;
+ }
+
+ int
+ sel_func (void *ntuple_data, void *params)
+ {
+ struct data * data = (struct data *) ntuple_data;
+ double x, y, z, E2, scale;
+ scale = *(double *) params;
+
+ x = data->x;
+ y = data->y;
+ z = data->z;
+
+ E2 = x * x + y * y + z * z;
+
+ return E2 > scale;
+ }
+
+ double
+ val_func (void *ntuple_data, void *params)
+ {
+ struct data * data = (struct data *) ntuple_data;
+ double x, y, z;
+
+ x = data->x;
+ y = data->y;
+ z = data->z;
+
+ return x * x + y * y + z * z;
+ }
+
+ The following plot shows the distribution of the selected events.
+Note the cut-off at the lower bound.
+
+
+File: gsl-ref.info, Node: Ntuple References and Further Reading, Prev: Example ntuple programs, Up: N-tuples
+
+22.9 References and Further Reading
+===================================
+
+Further information on the use of ntuples can be found in the
+documentation for the CERN packages PAW and HBOOK (available online).
+
+
+File: gsl-ref.info, Node: Monte Carlo Integration, Next: Simulated Annealing, Prev: N-tuples, Up: Top
+
+23 Monte Carlo Integration
+**************************
+
+This chapter describes routines for multidimensional Monte Carlo
+integration. These include the traditional Monte Carlo method and
+adaptive algorithms such as VEGAS and MISER which use importance
+sampling and stratified sampling techniques. Each algorithm computes an
+estimate of a multidimensional definite integral of the form,
+
+ I = \int_xl^xu dx \int_yl^yu dy ... f(x, y, ...)
+
+over a hypercubic region ((x_l,x_u), (y_l,y_u), ...) using a fixed
+number of function calls. The routines also provide a statistical
+estimate of the error on the result. This error estimate should be
+taken as a guide rather than as a strict error bound--random sampling
+of the region may not uncover all the important features of the
+function, resulting in an underestimate of the error.
+
+ The functions are defined in separate header files for each routine,
+`gsl_monte_plain.h', `gsl_monte_miser.h' and `gsl_monte_vegas.h'.
+
+* Menu:
+
+* Monte Carlo Interface::
+* PLAIN Monte Carlo::
+* MISER::
+* VEGAS::
+* Monte Carlo Examples::
+* Monte Carlo Integration References and Further Reading::
+
+
+File: gsl-ref.info, Node: Monte Carlo Interface, Next: PLAIN Monte Carlo, Up: Monte Carlo Integration
+
+23.1 Interface
+==============
+
+All of the Monte Carlo integration routines use the same general form of
+interface. There is an allocator to allocate memory for control
+variables and workspace, a routine to initialize those control
+variables, the integrator itself, and a function to free the space when
+done.
+
+ Each integration function requires a random number generator to be
+supplied, and returns an estimate of the integral and its standard
+deviation. The accuracy of the result is determined by the number of
+function calls specified by the user. If a known level of accuracy is
+required this can be achieved by calling the integrator several times
+and averaging the individual results until the desired accuracy is
+obtained.
+
+ Random sample points used within the Monte Carlo routines are always
+chosen strictly within the integration region, so that endpoint
+singularities are automatically avoided.
+
+ The function to be integrated has its own datatype, defined in the
+header file `gsl_monte.h'.
+
+ -- Data Type: gsl_monte_function
+ This data type defines a general function with parameters for Monte
+ Carlo integration.
+
+ `double (* f) (double * X, size_t DIM, void * PARAMS)'
+ this function should return the value f(x,params) for the
+ argument X and parameters PARAMS, where X is an array of size
+ DIM giving the coordinates of the point where the function is
+ to be evaluated.
+
+ `size_t dim'
+ the number of dimensions for X.
+
+ `void * params'
+ a pointer to the parameters of the function.
+
+Here is an example for a quadratic function in two dimensions,
+
+ f(x,y) = a x^2 + b x y + c y^2
+
+with a = 3, b = 2, c = 1. The following code defines a
+`gsl_monte_function' `F' which you could pass to an integrator:
+
+ struct my_f_params { double a; double b; double c; };
+
+ double
+ my_f (double x[], size_t dim, void * p) {
+ struct my_f_params * fp = (struct my_f_params *)p;
+
+ if (dim != 2)
+ {
+ fprintf (stderr, "error: dim != 2");
+ abort ();
+ }
+
+ return fp->a * x[0] * x[0]
+ + fp->b * x[0] * x[1]
+ + fp->c * x[1] * x[1];
+ }
+
+ gsl_monte_function F;
+ struct my_f_params params = { 3.0, 2.0, 1.0 };
+
+ F.f = &my_f;
+ F.dim = 2;
+ F.params = &params;
+
+The function f(x) can be evaluated using the following macro,
+
+ #define GSL_MONTE_FN_EVAL(F,x)
+ (*((F)->f))(x,(F)->dim,(F)->params)
+
+
+File: gsl-ref.info, Node: PLAIN Monte Carlo, Next: MISER, Prev: Monte Carlo Interface, Up: Monte Carlo Integration
+
+23.2 PLAIN Monte Carlo
+======================
+
+The plain Monte Carlo algorithm samples points randomly from the
+integration region to estimate the integral and its error. Using this
+algorithm the estimate of the integral E(f; N) for N randomly
+distributed points x_i is given by,
+
+ E(f; N) = = V <f> = (V / N) \sum_i^N f(x_i)
+
+where V is the volume of the integration region. The error on this
+estimate \sigma(E;N) is calculated from the estimated variance of the
+mean,
+
+ \sigma^2 (E; N) = (V / N) \sum_i^N (f(x_i) - <f>)^2.
+
+For large N this variance decreases asymptotically as \Var(f)/N, where
+\Var(f) is the true variance of the function over the integration
+region. The error estimate itself should decrease as
+\sigma(f)/\sqrt{N}. The familiar law of errors decreasing as
+1/\sqrt{N} applies--to reduce the error by a factor of 10 requires a
+100-fold increase in the number of sample points.
+
+ The functions described in this section are declared in the header
+file `gsl_monte_plain.h'.
+
+ -- Function: gsl_monte_plain_state * gsl_monte_plain_alloc (size_t DIM)
+ This function allocates and initializes a workspace for Monte Carlo
+ integration in DIM dimensions.
+
+ -- Function: int gsl_monte_plain_init (gsl_monte_plain_state* S)
+ This function initializes a previously allocated integration state.
+ This allows an existing workspace to be reused for different
+ integrations.
+
+ -- Function: int gsl_monte_plain_integrate (gsl_monte_function * F,
+ double * XL, double * XU, size_t DIM, size_t CALLS, gsl_rng *
+ R, gsl_monte_plain_state * S, double * RESULT, double *
+ ABSERR)
+ This routines uses the plain Monte Carlo algorithm to integrate the
+ function F over the DIM-dimensional hypercubic region defined by
+ the lower and upper limits in the arrays XL and XU, each of size
+ DIM. The integration uses a fixed number of function calls CALLS,
+ and obtains random sampling points using the random number
+ generator R. A previously allocated workspace S must be supplied.
+ The result of the integration is returned in RESULT, with an
+ estimated absolute error ABSERR.
+
+ -- Function: void gsl_monte_plain_free (gsl_monte_plain_state * S)
+ This function frees the memory associated with the integrator state
+ S.
+
+
+File: gsl-ref.info, Node: MISER, Next: VEGAS, Prev: PLAIN Monte Carlo, Up: Monte Carlo Integration
+
+23.3 MISER
+==========
+
+The MISER algorithm of Press and Farrar is based on recursive
+stratified sampling. This technique aims to reduce the overall
+integration error by concentrating integration points in the regions of
+highest variance.
+
+ The idea of stratified sampling begins with the observation that for
+two disjoint regions a and b with Monte Carlo estimates of the integral
+E_a(f) and E_b(f) and variances \sigma_a^2(f) and \sigma_b^2(f), the
+variance \Var(f) of the combined estimate E(f) = (1/2) (E_a(f) + E_b(f))
+is given by,
+
+ \Var(f) = (\sigma_a^2(f) / 4 N_a) + (\sigma_b^2(f) / 4 N_b).
+
+It can be shown that this variance is minimized by distributing the
+points such that,
+
+ N_a / (N_a + N_b) = \sigma_a / (\sigma_a + \sigma_b).
+
+Hence the smallest error estimate is obtained by allocating sample
+points in proportion to the standard deviation of the function in each
+sub-region.
+
+ The MISER algorithm proceeds by bisecting the integration region
+along one coordinate axis to give two sub-regions at each step. The
+direction is chosen by examining all d possible bisections and
+selecting the one which will minimize the combined variance of the two
+sub-regions. The variance in the sub-regions is estimated by sampling
+with a fraction of the total number of points available to the current
+step. The same procedure is then repeated recursively for each of the
+two half-spaces from the best bisection. The remaining sample points are
+allocated to the sub-regions using the formula for N_a and N_b. This
+recursive allocation of integration points continues down to a
+user-specified depth where each sub-region is integrated using a plain
+Monte Carlo estimate. These individual values and their error
+estimates are then combined upwards to give an overall result and an
+estimate of its error.
+
+ The functions described in this section are declared in the header
+file `gsl_monte_miser.h'.
+
+ -- Function: gsl_monte_miser_state * gsl_monte_miser_alloc (size_t DIM)
+ This function allocates and initializes a workspace for Monte Carlo
+ integration in DIM dimensions. The workspace is used to maintain
+ the state of the integration.
+
+ -- Function: int gsl_monte_miser_init (gsl_monte_miser_state* S)
+ This function initializes a previously allocated integration state.
+ This allows an existing workspace to be reused for different
+ integrations.
+
+ -- Function: int gsl_monte_miser_integrate (gsl_monte_function * F,
+ double * XL, double * XU, size_t DIM, size_t CALLS, gsl_rng *
+ R, gsl_monte_miser_state * S, double * RESULT, double *
+ ABSERR)
+ This routines uses the MISER Monte Carlo algorithm to integrate the
+ function F over the DIM-dimensional hypercubic region defined by
+ the lower and upper limits in the arrays XL and XU, each of size
+ DIM. The integration uses a fixed number of function calls CALLS,
+ and obtains random sampling points using the random number
+ generator R. A previously allocated workspace S must be supplied.
+ The result of the integration is returned in RESULT, with an
+ estimated absolute error ABSERR.
+
+ -- Function: void gsl_monte_miser_free (gsl_monte_miser_state * S)
+ This function frees the memory associated with the integrator state
+ S.
+
+ The MISER algorithm has several configurable parameters. The
+following variables can be accessed through the `gsl_monte_miser_state'
+struct,
+
+ -- Variable: double estimate_frac
+ This parameter specifies the fraction of the currently available
+ number of function calls which are allocated to estimating the
+ variance at each recursive step. The default value is 0.1.
+
+ -- Variable: size_t min_calls
+ This parameter specifies the minimum number of function calls
+ required for each estimate of the variance. If the number of
+ function calls allocated to the estimate using ESTIMATE_FRAC falls
+ below MIN_CALLS then MIN_CALLS are used instead. This ensures
+ that each estimate maintains a reasonable level of accuracy. The
+ default value of MIN_CALLS is `16 * dim'.
+
+ -- Variable: size_t min_calls_per_bisection
+ This parameter specifies the minimum number of function calls
+ required to proceed with a bisection step. When a recursive step
+ has fewer calls available than MIN_CALLS_PER_BISECTION it performs
+ a plain Monte Carlo estimate of the current sub-region and
+ terminates its branch of the recursion. The default value of this
+ parameter is `32 * min_calls'.
+
+ -- Variable: double alpha
+ This parameter controls how the estimated variances for the two
+ sub-regions of a bisection are combined when allocating points.
+ With recursive sampling the overall variance should scale better
+ than 1/N, since the values from the sub-regions will be obtained
+ using a procedure which explicitly minimizes their variance. To
+ accommodate this behavior the MISER algorithm allows the total
+ variance to depend on a scaling parameter \alpha,
+
+ \Var(f) = {\sigma_a \over N_a^\alpha} + {\sigma_b \over N_b^\alpha}.
+
+ The authors of the original paper describing MISER recommend the
+ value \alpha = 2 as a good choice, obtained from numerical
+ experiments, and this is used as the default value in this
+ implementation.
+
+ -- Variable: double dither
+ This parameter introduces a random fractional variation of size
+ DITHER into each bisection, which can be used to break the
+ symmetry of integrands which are concentrated near the exact
+ center of the hypercubic integration region. The default value of
+ dither is zero, so no variation is introduced. If needed, a
+ typical value of DITHER is 0.1.
+
+
+File: gsl-ref.info, Node: VEGAS, Next: Monte Carlo Examples, Prev: MISER, Up: Monte Carlo Integration
+
+23.4 VEGAS
+==========
+
+The VEGAS algorithm of Lepage is based on importance sampling. It
+samples points from the probability distribution described by the
+function |f|, so that the points are concentrated in the regions that
+make the largest contribution to the integral.
+
+ In general, if the Monte Carlo integral of f is sampled with points
+distributed according to a probability distribution described by the
+function g, we obtain an estimate E_g(f; N),
+
+ E_g(f; N) = E(f/g; N)
+
+with a corresponding variance,
+
+ \Var_g(f; N) = \Var(f/g; N).
+
+If the probability distribution is chosen as g = |f|/I(|f|) then it can
+be shown that the variance V_g(f; N) vanishes, and the error in the
+estimate will be zero. In practice it is not possible to sample from
+the exact distribution g for an arbitrary function, so importance
+sampling algorithms aim to produce efficient approximations to the
+desired distribution.
+
+ The VEGAS algorithm approximates the exact distribution by making a
+number of passes over the integration region while histogramming the
+function f. Each histogram is used to define a sampling distribution
+for the next pass. Asymptotically this procedure converges to the
+desired distribution. In order to avoid the number of histogram bins
+growing like K^d the probability distribution is approximated by a
+separable function: g(x_1, x_2, ...) = g_1(x_1) g_2(x_2) ... so that
+the number of bins required is only Kd. This is equivalent to locating
+the peaks of the function from the projections of the integrand onto
+the coordinate axes. The efficiency of VEGAS depends on the validity
+of this assumption. It is most efficient when the peaks of the
+integrand are well-localized. If an integrand can be rewritten in a
+form which is approximately separable this will increase the efficiency
+of integration with VEGAS.
+
+ VEGAS incorporates a number of additional features, and combines both
+stratified sampling and importance sampling. The integration region is
+divided into a number of "boxes", with each box getting a fixed number
+of points (the goal is 2). Each box can then have a fractional number
+of bins, but if the ratio of bins-per-box is less than two, Vegas
+switches to a kind variance reduction (rather than importance sampling).
+
+ -- Function: gsl_monte_vegas_state * gsl_monte_vegas_alloc (size_t DIM)
+ This function allocates and initializes a workspace for Monte Carlo
+ integration in DIM dimensions. The workspace is used to maintain
+ the state of the integration.
+
+ -- Function: int gsl_monte_vegas_init (gsl_monte_vegas_state* S)
+ This function initializes a previously allocated integration state.
+ This allows an existing workspace to be reused for different
+ integrations.
+
+ -- Function: int gsl_monte_vegas_integrate (gsl_monte_function * F,
+ double * XL, double * XU, size_t DIM, size_t CALLS, gsl_rng *
+ R, gsl_monte_vegas_state * S, double * RESULT, double *
+ ABSERR)
+ This routines uses the VEGAS Monte Carlo algorithm to integrate the
+ function F over the DIM-dimensional hypercubic region defined by
+ the lower and upper limits in the arrays XL and XU, each of size
+ DIM. The integration uses a fixed number of function calls CALLS,
+ and obtains random sampling points using the random number
+ generator R. A previously allocated workspace S must be supplied.
+ The result of the integration is returned in RESULT, with an
+ estimated absolute error ABSERR. The result and its error
+ estimate are based on a weighted average of independent samples.
+ The chi-squared per degree of freedom for the weighted average is
+ returned via the state struct component, S->CHISQ, and must be
+ consistent with 1 for the weighted average to be reliable.
+
+ -- Function: void gsl_monte_vegas_free (gsl_monte_vegas_state * S)
+ This function frees the memory associated with the integrator state
+ S.
+
+ The VEGAS algorithm computes a number of independent estimates of the
+integral internally, according to the `iterations' parameter described
+below, and returns their weighted average. Random sampling of the
+integrand can occasionally produce an estimate where the error is zero,
+particularly if the function is constant in some regions. An estimate
+with zero error causes the weighted average to break down and must be
+handled separately. In the original Fortran implementations of VEGAS
+the error estimate is made non-zero by substituting a small value
+(typically `1e-30'). The implementation in GSL differs from this and
+avoids the use of an arbitrary constant--it either assigns the value a
+weight which is the average weight of the preceding estimates or
+discards it according to the following procedure,
+
+current estimate has zero error, weighted average has finite error
+ The current estimate is assigned a weight which is the average
+ weight of the preceding estimates.
+
+current estimate has finite error, previous estimates had zero error
+ The previous estimates are discarded and the weighted averaging
+ procedure begins with the current estimate.
+
+current estimate has zero error, previous estimates had zero error
+ The estimates are averaged using the arithmetic mean, but no error
+ is computed.
+
+ The VEGAS algorithm is highly configurable. The following variables
+can be accessed through the `gsl_monte_vegas_state' struct,
+
+ -- Variable: double result
+ -- Variable: double sigma
+ These parameters contain the raw value of the integral RESULT and
+ its error SIGMA from the last iteration of the algorithm.
+
+ -- Variable: double chisq
+ This parameter gives the chi-squared per degree of freedom for the
+ weighted estimate of the integral. The value of CHISQ should be
+ close to 1. A value of CHISQ which differs significantly from 1
+ indicates that the values from different iterations are
+ inconsistent. In this case the weighted error will be
+ under-estimated, and further iterations of the algorithm are
+ needed to obtain reliable results.
+
+ -- Variable: double alpha
+ The parameter `alpha' controls the stiffness of the rebinning
+ algorithm. It is typically set between one and two. A value of
+ zero prevents rebinning of the grid. The default value is 1.5.
+
+ -- Variable: size_t iterations
+ The number of iterations to perform for each call to the routine.
+ The default value is 5 iterations.
+
+ -- Variable: int stage
+ Setting this determines the "stage" of the calculation. Normally,
+ `stage = 0' which begins with a new uniform grid and empty weighted
+ average. Calling vegas with `stage = 1' retains the grid from the
+ previous run but discards the weighted average, so that one can
+ "tune" the grid using a relatively small number of points and then
+ do a large run with `stage = 1' on the optimized grid. Setting
+ `stage = 2' keeps the grid and the weighted average from the
+ previous run, but may increase (or decrease) the number of
+ histogram bins in the grid depending on the number of calls
+ available. Choosing `stage = 3' enters at the main loop, so that
+ nothing is changed, and is equivalent to performing additional
+ iterations in a previous call.
+
+ -- Variable: int mode
+ The possible choices are `GSL_VEGAS_MODE_IMPORTANCE',
+ `GSL_VEGAS_MODE_STRATIFIED', `GSL_VEGAS_MODE_IMPORTANCE_ONLY'.
+ This determines whether VEGAS will use importance sampling or
+ stratified sampling, or whether it can pick on its own. In low
+ dimensions VEGAS uses strict stratified sampling (more precisely,
+ stratified sampling is chosen if there are fewer than 2 bins per
+ box).
+
+ -- Variable: int verbose
+ -- Variable: FILE * ostream
+ These parameters set the level of information printed by VEGAS. All
+ information is written to the stream OSTREAM. The default setting
+ of VERBOSE is `-1', which turns off all output. A VERBOSE value
+ of `0' prints summary information about the weighted average and
+ final result, while a value of `1' also displays the grid
+ coordinates. A value of `2' prints information from the rebinning
+ procedure for each iteration.
+
+
+File: gsl-ref.info, Node: Monte Carlo Examples, Next: Monte Carlo Integration References and Further Reading, Prev: VEGAS, Up: Monte Carlo Integration
+
+23.5 Examples
+=============
+
+The example program below uses the Monte Carlo routines to estimate the
+value of the following 3-dimensional integral from the theory of random
+walks,
+
+ I = \int_{-pi}^{+pi} {dk_x/(2 pi)}
+ \int_{-pi}^{+pi} {dk_y/(2 pi)}
+ \int_{-pi}^{+pi} {dk_z/(2 pi)}
+ 1 / (1 - cos(k_x)cos(k_y)cos(k_z)).
+
+The analytic value of this integral can be shown to be I =
+\Gamma(1/4)^4/(4 \pi^3) = 1.393203929685676859.... The integral gives
+the mean time spent at the origin by a random walk on a body-centered
+cubic lattice in three dimensions.
+
+ For simplicity we will compute the integral over the region (0,0,0)
+to (\pi,\pi,\pi) and multiply by 8 to obtain the full result. The
+integral is slowly varying in the middle of the region but has
+integrable singularities at the corners (0,0,0), (0,\pi,\pi),
+(\pi,0,\pi) and (\pi,\pi,0). The Monte Carlo routines only select
+points which are strictly within the integration region and so no
+special measures are needed to avoid these singularities.
+
+ #include <stdlib.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_monte.h>
+ #include <gsl/gsl_monte_plain.h>
+ #include <gsl/gsl_monte_miser.h>
+ #include <gsl/gsl_monte_vegas.h>
+
+ /* Computation of the integral,
+
+ I = int (dx dy dz)/(2pi)^3 1/(1-cos(x)cos(y)cos(z))
+
+ over (-pi,-pi,-pi) to (+pi, +pi, +pi). The exact answer
+ is Gamma(1/4)^4/(4 pi^3). This example is taken from
+ C.Itzykson, J.M.Drouffe, "Statistical Field Theory -
+ Volume 1", Section 1.1, p21, which cites the original
+ paper M.L.Glasser, I.J.Zucker, Proc.Natl.Acad.Sci.USA 74
+ 1800 (1977) */
+
+ /* For simplicity we compute the integral over the region
+ (0,0,0) -> (pi,pi,pi) and multiply by 8 */
+
+ double exact = 1.3932039296856768591842462603255;
+
+ double
+ g (double *k, size_t dim, void *params)
+ {
+ double A = 1.0 / (M_PI * M_PI * M_PI);
+ return A / (1.0 - cos (k[0]) * cos (k[1]) * cos (k[2]));
+ }
+
+ void
+ display_results (char *title, double result, double error)
+ {
+ printf ("%s ==================\n", title);
+ printf ("result = % .6f\n", result);
+ printf ("sigma = % .6f\n", error);
+ printf ("exact = % .6f\n", exact);
+ printf ("error = % .6f = %.1g sigma\n", result - exact,
+ fabs (result - exact) / error);
+ }
+
+ int
+ main (void)
+ {
+ double res, err;
+
+ double xl[3] = { 0, 0, 0 };
+ double xu[3] = { M_PI, M_PI, M_PI };
+
+ const gsl_rng_type *T;
+ gsl_rng *r;
+
+ gsl_monte_function G = { &g, 3, 0 };
+
+ size_t calls = 500000;
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ {
+ gsl_monte_plain_state *s = gsl_monte_plain_alloc (3);
+ gsl_monte_plain_integrate (&G, xl, xu, 3, calls, r, s,
+ &res, &err);
+ gsl_monte_plain_free (s);
+
+ display_results ("plain", res, err);
+ }
+
+ {
+ gsl_monte_miser_state *s = gsl_monte_miser_alloc (3);
+ gsl_monte_miser_integrate (&G, xl, xu, 3, calls, r, s,
+ &res, &err);
+ gsl_monte_miser_free (s);
+
+ display_results ("miser", res, err);
+ }
+
+ {
+ gsl_monte_vegas_state *s = gsl_monte_vegas_alloc (3);
+
+ gsl_monte_vegas_integrate (&G, xl, xu, 3, 10000, r, s,
+ &res, &err);
+ display_results ("vegas warm-up", res, err);
+
+ printf ("converging...\n");
+
+ do
+ {
+ gsl_monte_vegas_integrate (&G, xl, xu, 3, calls/5, r, s,
+ &res, &err);
+ printf ("result = % .6f sigma = % .6f "
+ "chisq/dof = %.1f\n", res, err, s->chisq);
+ }
+ while (fabs (s->chisq - 1.0) > 0.5);
+
+ display_results ("vegas final", res, err);
+
+ gsl_monte_vegas_free (s);
+ }
+
+ gsl_rng_free (r);
+
+ return 0;
+ }
+
+With 500,000 function calls the plain Monte Carlo algorithm achieves a
+fractional error of 0.6%. The estimated error `sigma' is consistent
+with the actual error, and the computed result differs from the true
+result by about one standard deviation,
+
+ plain ==================
+ result = 1.385867
+ sigma = 0.007938
+ exact = 1.393204
+ error = -0.007337 = 0.9 sigma
+
+The MISER algorithm reduces the error by a factor of two, and also
+correctly estimates the error,
+
+ miser ==================
+ result = 1.390656
+ sigma = 0.003743
+ exact = 1.393204
+ error = -0.002548 = 0.7 sigma
+
+In the case of the VEGAS algorithm the program uses an initial warm-up
+run of 10,000 function calls to prepare, or "warm up", the grid. This
+is followed by a main run with five iterations of 100,000 function
+calls. The chi-squared per degree of freedom for the five iterations are
+checked for consistency with 1, and the run is repeated if the results
+have not converged. In this case the estimates are consistent on the
+first pass.
+
+ vegas warm-up ==================
+ result = 1.386925
+ sigma = 0.002651
+ exact = 1.393204
+ error = -0.006278 = 2 sigma
+ converging...
+ result = 1.392957 sigma = 0.000452 chisq/dof = 1.1
+ vegas final ==================
+ result = 1.392957
+ sigma = 0.000452
+ exact = 1.393204
+ error = -0.000247 = 0.5 sigma
+
+If the value of `chisq' had differed significantly from 1 it would
+indicate inconsistent results, with a correspondingly underestimated
+error. The final estimate from VEGAS (using a similar number of
+function calls) is significantly more accurate than the other two
+algorithms.
+
+
+File: gsl-ref.info, Node: Monte Carlo Integration References and Further Reading, Prev: Monte Carlo Examples, Up: Monte Carlo Integration
+
+23.6 References and Further Reading
+===================================
+
+The MISER algorithm is described in the following article by Press and
+Farrar,
+
+ W.H. Press, G.R. Farrar, `Recursive Stratified Sampling for
+ Multidimensional Monte Carlo Integration', Computers in Physics,
+ v4 (1990), pp190-195.
+
+The VEGAS algorithm is described in the following papers,
+
+ G.P. Lepage, `A New Algorithm for Adaptive Multidimensional
+ Integration', Journal of Computational Physics 27, 192-203, (1978)
+
+ G.P. Lepage, `VEGAS: An Adaptive Multi-dimensional Integration
+ Program', Cornell preprint CLNS 80-447, March 1980
+
+
+File: gsl-ref.info, Node: Simulated Annealing, Next: Ordinary Differential Equations, Prev: Monte Carlo Integration, Up: Top
+
+24 Simulated Annealing
+**********************
+
+Stochastic search techniques are used when the structure of a space is
+not well understood or is not smooth, so that techniques like Newton's
+method (which requires calculating Jacobian derivative matrices) cannot
+be used. In particular, these techniques are frequently used to solve
+combinatorial optimization problems, such as the traveling salesman
+problem.
+
+ The goal is to find a point in the space at which a real valued
+"energy function" (or "cost function") is minimized. Simulated
+annealing is a minimization technique which has given good results in
+avoiding local minima; it is based on the idea of taking a random walk
+through the space at successively lower temperatures, where the
+probability of taking a step is given by a Boltzmann distribution.
+
+ The functions described in this chapter are declared in the header
+file `gsl_siman.h'.
+
+* Menu:
+
+* Simulated Annealing algorithm::
+* Simulated Annealing functions::
+* Examples with Simulated Annealing::
+* Simulated Annealing References and Further Reading::
+
+
+File: gsl-ref.info, Node: Simulated Annealing algorithm, Next: Simulated Annealing functions, Up: Simulated Annealing
+
+24.1 Simulated Annealing algorithm
+==================================
+
+The simulated annealing algorithm takes random walks through the problem
+space, looking for points with low energies; in these random walks, the
+probability of taking a step is determined by the Boltzmann
+distribution,
+
+ p = e^{-(E_{i+1} - E_i)/(kT)}
+
+if E_{i+1} > E_i, and p = 1 when E_{i+1} <= E_i.
+
+ In other words, a step will occur if the new energy is lower. If
+the new energy is higher, the transition can still occur, and its
+likelihood is proportional to the temperature T and inversely
+proportional to the energy difference E_{i+1} - E_i.
+
+ The temperature T is initially set to a high value, and a random
+walk is carried out at that temperature. Then the temperature is
+lowered very slightly according to a "cooling schedule", for example: T
+-> T/mu_T where \mu_T is slightly greater than 1.
+
+ The slight probability of taking a step that gives higher energy is
+what allows simulated annealing to frequently get out of local minima.
+
+
+File: gsl-ref.info, Node: Simulated Annealing functions, Next: Examples with Simulated Annealing, Prev: Simulated Annealing algorithm, Up: Simulated Annealing
+
+24.2 Simulated Annealing functions
+==================================
+
+ -- Function: void gsl_siman_solve (const gsl_rng * R, void * X0_P,
+ gsl_siman_Efunc_t EF, gsl_siman_step_t TAKE_STEP,
+ gsl_siman_metric_t DISTANCE, gsl_siman_print_t
+ PRINT_POSITION, gsl_siman_copy_t COPYFUNC,
+ gsl_siman_copy_construct_t COPY_CONSTRUCTOR,
+ gsl_siman_destroy_t DESTRUCTOR, size_t ELEMENT_SIZE,
+ gsl_siman_params_t PARAMS)
+ This function performs a simulated annealing search through a given
+ space. The space is specified by providing the functions EF and
+ DISTANCE. The simulated annealing steps are generated using the
+ random number generator R and the function TAKE_STEP.
+
+ The starting configuration of the system should be given by X0_P.
+ The routine offers two modes for updating configurations, a
+ fixed-size mode and a variable-size mode. In the fixed-size mode
+ the configuration is stored as a single block of memory of size
+ ELEMENT_SIZE. Copies of this configuration are created, copied
+ and destroyed internally using the standard library functions
+ `malloc', `memcpy' and `free'. The function pointers COPYFUNC,
+ COPY_CONSTRUCTOR and DESTRUCTOR should be null pointers in
+ fixed-size mode. In the variable-size mode the functions
+ COPYFUNC, COPY_CONSTRUCTOR and DESTRUCTOR are used to create, copy
+ and destroy configurations internally. The variable ELEMENT_SIZE
+ should be zero in the variable-size mode.
+
+ The PARAMS structure (described below) controls the run by
+ providing the temperature schedule and other tunable parameters to
+ the algorithm.
+
+ On exit the best result achieved during the search is placed in
+ `*X0_P'. If the annealing process has been successful this should
+ be a good approximation to the optimal point in the space.
+
+ If the function pointer PRINT_POSITION is not null, a debugging
+ log will be printed to `stdout' with the following columns:
+
+ number_of_iterations temperature x x-(*x0_p) Ef(x)
+
+ and the output of the function PRINT_POSITION itself. If
+ PRINT_POSITION is null then no information is printed.
+
+The simulated annealing routines require several user-specified
+functions to define the configuration space and energy function. The
+prototypes for these functions are given below.
+
+ -- Data Type: gsl_siman_Efunc_t
+ This function type should return the energy of a configuration XP.
+
+ double (*gsl_siman_Efunc_t) (void *xp)
+
+ -- Data Type: gsl_siman_step_t
+ This function type should modify the configuration XP using a
+ random step taken from the generator R, up to a maximum distance of
+ STEP_SIZE.
+
+ void (*gsl_siman_step_t) (const gsl_rng *r, void *xp,
+ double step_size)
+
+ -- Data Type: gsl_siman_metric_t
+ This function type should return the distance between two
+ configurations XP and YP.
+
+ double (*gsl_siman_metric_t) (void *xp, void *yp)
+
+ -- Data Type: gsl_siman_print_t
+ This function type should print the contents of the configuration
+ XP.
+
+ void (*gsl_siman_print_t) (void *xp)
+
+ -- Data Type: gsl_siman_copy_t
+ This function type should copy the configuration SOURCE into DEST.
+
+ void (*gsl_siman_copy_t) (void *source, void *dest)
+
+ -- Data Type: gsl_siman_copy_construct_t
+ This function type should create a new copy of the configuration
+ XP.
+
+ void * (*gsl_siman_copy_construct_t) (void *xp)
+
+ -- Data Type: gsl_siman_destroy_t
+ This function type should destroy the configuration XP, freeing its
+ memory.
+
+ void (*gsl_siman_destroy_t) (void *xp)
+
+ -- Data Type: gsl_siman_params_t
+ These are the parameters that control a run of `gsl_siman_solve'.
+ This structure contains all the information needed to control the
+ search, beyond the energy function, the step function and the
+ initial guess.
+
+ `int n_tries'
+ The number of points to try for each step.
+
+ `int iters_fixed_T'
+ The number of iterations at each temperature.
+
+ `double step_size'
+ The maximum step size in the random walk.
+
+ `double k, t_initial, mu_t, t_min'
+ The parameters of the Boltzmann distribution and cooling
+ schedule.
+
+
+File: gsl-ref.info, Node: Examples with Simulated Annealing, Next: Simulated Annealing References and Further Reading, Prev: Simulated Annealing functions, Up: Simulated Annealing
+
+24.3 Examples
+=============
+
+The simulated annealing package is clumsy, and it has to be because it
+is written in C, for C callers, and tries to be polymorphic at the same
+time. But here we provide some examples which can be pasted into your
+application with little change and should make things easier.
+
+* Menu:
+
+* Trivial example::
+* Traveling Salesman Problem::
+
+
+File: gsl-ref.info, Node: Trivial example, Next: Traveling Salesman Problem, Up: Examples with Simulated Annealing
+
+24.3.1 Trivial example
+----------------------
+
+The first example, in one dimensional cartesian space, sets up an energy
+function which is a damped sine wave; this has many local minima, but
+only one global minimum, somewhere between 1.0 and 1.5. The initial
+guess given is 15.5, which is several local minima away from the global
+minimum.
+
+ #include <math.h>
+ #include <stdlib.h>
+ #include <string.h>
+ #include <gsl/gsl_siman.h>
+
+ /* set up parameters for this simulated annealing run */
+
+ /* how many points do we try before stepping */
+ #define N_TRIES 200
+
+ /* how many iterations for each T? */
+ #define ITERS_FIXED_T 1000
+
+ /* max step size in random walk */
+ #define STEP_SIZE 1.0
+
+ /* Boltzmann constant */
+ #define K 1.0
+
+ /* initial temperature */
+ #define T_INITIAL 0.008
+
+ /* damping factor for temperature */
+ #define MU_T 1.003
+ #define T_MIN 2.0e-6
+
+ gsl_siman_params_t params
+ = {N_TRIES, ITERS_FIXED_T, STEP_SIZE,
+ K, T_INITIAL, MU_T, T_MIN};
+
+ /* now some functions to test in one dimension */
+ double E1(void *xp)
+ {
+ double x = * ((double *) xp);
+
+ return exp(-pow((x-1.0),2.0))*sin(8*x);
+ }
+
+ double M1(void *xp, void *yp)
+ {
+ double x = *((double *) xp);
+ double y = *((double *) yp);
+
+ return fabs(x - y);
+ }
+
+ void S1(const gsl_rng * r, void *xp, double step_size)
+ {
+ double old_x = *((double *) xp);
+ double new_x;
+
+ double u = gsl_rng_uniform(r);
+ new_x = u * 2 * step_size - step_size + old_x;
+
+ memcpy(xp, &new_x, sizeof(new_x));
+ }
+
+ void P1(void *xp)
+ {
+ printf ("%12g", *((double *) xp));
+ }
+
+ int
+ main(int argc, char *argv[])
+ {
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ double x_initial = 15.5;
+
+ gsl_rng_env_setup();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc(T);
+
+ gsl_siman_solve(r, &x_initial, E1, S1, M1, P1,
+ NULL, NULL, NULL,
+ sizeof(double), params);
+
+ gsl_rng_free (r);
+ return 0;
+ }
+
+ Here are a couple of plots that are generated by running
+`siman_test' in the following way:
+
+ $ ./siman_test | awk '!/^#/ {print $1, $4}'
+ | graph -y 1.34 1.4 -W0 -X generation -Y position
+ | plot -Tps > siman-test.eps
+ $ ./siman_test | awk '!/^#/ {print $1, $4}'
+ | graph -y -0.88 -0.83 -W0 -X generation -Y energy
+ | plot -Tps > siman-energy.eps
+
+
+File: gsl-ref.info, Node: Traveling Salesman Problem, Prev: Trivial example, Up: Examples with Simulated Annealing
+
+24.3.2 Traveling Salesman Problem
+---------------------------------
+
+The TSP ("Traveling Salesman Problem") is the classic combinatorial
+optimization problem. I have provided a very simple version of it,
+based on the coordinates of twelve cities in the southwestern United
+States. This should maybe be called the "Flying Salesman Problem",
+since I am using the great-circle distance between cities, rather than
+the driving distance. Also: I assume the earth is a sphere, so I don't
+use geoid distances.
+
+ The `gsl_siman_solve' routine finds a route which is 3490.62
+Kilometers long; this is confirmed by an exhaustive search of all
+possible routes with the same initial city.
+
+ The full code can be found in `siman/siman_tsp.c', but I include
+here some plots generated in the following way:
+
+ $ ./siman_tsp > tsp.output
+ $ grep -v "^#" tsp.output
+ | awk '{print $1, $NF}'
+ | graph -y 3300 6500 -W0 -X generation -Y distance
+ -L "TSP - 12 southwest cities"
+ | plot -Tps > 12-cities.eps
+ $ grep initial_city_coord tsp.output
+ | awk '{print $2, $3}'
+ | graph -X "longitude (- means west)" -Y "latitude"
+ -L "TSP - initial-order" -f 0.03 -S 1 0.1
+ | plot -Tps > initial-route.eps
+ $ grep final_city_coord tsp.output
+ | awk '{print $2, $3}'
+ | graph -X "longitude (- means west)" -Y "latitude"
+ -L "TSP - final-order" -f 0.03 -S 1 0.1
+ | plot -Tps > final-route.eps
+
+This is the output showing the initial order of the cities; longitude is
+negative, since it is west and I want the plot to look like a map.
+
+ # initial coordinates of cities (longitude and latitude)
+ ###initial_city_coord: -105.95 35.68 Santa Fe
+ ###initial_city_coord: -112.07 33.54 Phoenix
+ ###initial_city_coord: -106.62 35.12 Albuquerque
+ ###initial_city_coord: -103.2 34.41 Clovis
+ ###initial_city_coord: -107.87 37.29 Durango
+ ###initial_city_coord: -96.77 32.79 Dallas
+ ###initial_city_coord: -105.92 35.77 Tesuque
+ ###initial_city_coord: -107.84 35.15 Grants
+ ###initial_city_coord: -106.28 35.89 Los Alamos
+ ###initial_city_coord: -106.76 32.34 Las Cruces
+ ###initial_city_coord: -108.58 37.35 Cortez
+ ###initial_city_coord: -108.74 35.52 Gallup
+ ###initial_city_coord: -105.95 35.68 Santa Fe
+
+ The optimal route turns out to be:
+
+ # final coordinates of cities (longitude and latitude)
+ ###final_city_coord: -105.95 35.68 Santa Fe
+ ###final_city_coord: -106.28 35.89 Los Alamos
+ ###final_city_coord: -106.62 35.12 Albuquerque
+ ###final_city_coord: -107.84 35.15 Grants
+ ###final_city_coord: -107.87 37.29 Durango
+ ###final_city_coord: -108.58 37.35 Cortez
+ ###final_city_coord: -108.74 35.52 Gallup
+ ###final_city_coord: -112.07 33.54 Phoenix
+ ###final_city_coord: -106.76 32.34 Las Cruces
+ ###final_city_coord: -96.77 32.79 Dallas
+ ###final_city_coord: -103.2 34.41 Clovis
+ ###final_city_coord: -105.92 35.77 Tesuque
+ ###final_city_coord: -105.95 35.68 Santa Fe
+
+Here's a plot of the cost function (energy) versus generation (point in
+the calculation at which a new temperature is set) for this problem:
+
+
+File: gsl-ref.info, Node: Simulated Annealing References and Further Reading, Prev: Examples with Simulated Annealing, Up: Simulated Annealing
+
+24.4 References and Further Reading
+===================================
+
+Further information is available in the following book,
+
+ `Modern Heuristic Techniques for Combinatorial Problems', Colin R.
+ Reeves (ed.), McGraw-Hill, 1995 (ISBN 0-07-709239-2).
+
+
+File: gsl-ref.info, Node: Ordinary Differential Equations, Next: Interpolation, Prev: Simulated Annealing, Up: Top
+
+25 Ordinary Differential Equations
+**********************************
+
+This chapter describes functions for solving ordinary differential
+equation (ODE) initial value problems. The library provides a variety
+of low-level methods, such as Runge-Kutta and Bulirsch-Stoer routines,
+and higher-level components for adaptive step-size control. The
+components can be combined by the user to achieve the desired solution,
+with full access to any intermediate steps.
+
+ These functions are declared in the header file `gsl_odeiv.h'.
+
+* Menu:
+
+* Defining the ODE System::
+* Stepping Functions::
+* Adaptive Step-size Control::
+* Evolution::
+* ODE Example programs::
+* ODE References and Further Reading::
+
+
+File: gsl-ref.info, Node: Defining the ODE System, Next: Stepping Functions, Up: Ordinary Differential Equations
+
+25.1 Defining the ODE System
+============================
+
+The routines solve the general n-dimensional first-order system,
+
+ dy_i(t)/dt = f_i(t, y_1(t), ..., y_n(t))
+
+for i = 1, \dots, n. The stepping functions rely on the vector of
+derivatives f_i and the Jacobian matrix, J_{ij} = df_i(t,y(t)) / dy_j.
+A system of equations is defined using the `gsl_odeiv_system' datatype.
+
+ -- Data Type: gsl_odeiv_system
+ This data type defines a general ODE system with arbitrary
+ parameters.
+
+ `int (* function) (double t, const double y[], double dydt[], void * params)'
+ This function should store the vector elements
+ f_i(t,y,params) in the array DYDT, for arguments (T,Y) and
+ parameters PARAMS. The function should return `GSL_SUCCESS'
+ if the calculation was completed successfully. Any other
+ return value indicates an error.
+
+ `int (* jacobian) (double t, const double y[], double * dfdy, double dfdt[], void * params);'
+ This function should store the vector of derivative elements
+ df_i(t,y,params)/dt in the array DFDT and the Jacobian matrix
+ J_{ij} in the array DFDY, regarded as a row-ordered matrix
+ `J(i,j) = dfdy[i * dimension + j]' where `dimension' is the
+ dimension of the system. The function should return
+ `GSL_SUCCESS' if the calculation was completed successfully.
+ Any other return value indicates an error.
+
+ Some of the simpler solver algorithms do not make use of the
+ Jacobian matrix, so it is not always strictly necessary to
+ provide it (the `jacobian' element of the struct can be
+ replaced by a null pointer for those algorithms). However,
+ it is useful to provide the Jacobian to allow the solver
+ algorithms to be interchanged--the best algorithms make use
+ of the Jacobian.
+
+ `size_t dimension;'
+ This is the dimension of the system of equations.
+
+ `void * params'
+ This is a pointer to the arbitrary parameters of the system.
+
+
+File: gsl-ref.info, Node: Stepping Functions, Next: Adaptive Step-size Control, Prev: Defining the ODE System, Up: Ordinary Differential Equations
+
+25.2 Stepping Functions
+=======================
+
+The lowest level components are the "stepping functions" which advance
+a solution from time t to t+h for a fixed step-size h and estimate the
+resulting local error.
+
+ -- Function: gsl_odeiv_step * gsl_odeiv_step_alloc (const
+ gsl_odeiv_step_type * T, size_t DIM)
+ This function returns a pointer to a newly allocated instance of a
+ stepping function of type T for a system of DIM dimensions.
+
+ -- Function: int gsl_odeiv_step_reset (gsl_odeiv_step * S)
+ This function resets the stepping function S. It should be used
+ whenever the next use of S will not be a continuation of a
+ previous step.
+
+ -- Function: void gsl_odeiv_step_free (gsl_odeiv_step * S)
+ This function frees all the memory associated with the stepping
+ function S.
+
+ -- Function: const char * gsl_odeiv_step_name (const gsl_odeiv_step *
+ S)
+ This function returns a pointer to the name of the stepping
+ function. For example,
+
+ printf ("step method is '%s'\n",
+ gsl_odeiv_step_name (s));
+
+ would print something like `step method is 'rk4''.
+
+ -- Function: unsigned int gsl_odeiv_step_order (const gsl_odeiv_step *
+ S)
+ This function returns the order of the stepping function on the
+ previous step. This order can vary if the stepping function
+ itself is adaptive.
+
+ -- Function: int gsl_odeiv_step_apply (gsl_odeiv_step * S, double T,
+ double H, double Y[], double YERR[], const double DYDT_IN[],
+ double DYDT_OUT[], const gsl_odeiv_system * DYDT)
+ This function applies the stepping function S to the system of
+ equations defined by DYDT, using the step size H to advance the
+ system from time T and state Y to time T+H. The new state of the
+ system is stored in Y on output, with an estimate of the absolute
+ error in each component stored in YERR. If the argument DYDT_IN
+ is not null it should point an array containing the derivatives
+ for the system at time T on input. This is optional as the
+ derivatives will be computed internally if they are not provided,
+ but allows the reuse of existing derivative information. On
+ output the new derivatives of the system at time T+H will be
+ stored in DYDT_OUT if it is not null.
+
+ If the user-supplied functions defined in the system DYDT return a
+ status other than `GSL_SUCCESS' the step will be aborted. In this
+ case, the elements of Y will be restored to their pre-step values
+ and the error code from the user-supplied function will be
+ returned. The step-size H will be set to the step-size which
+ caused the error. If the function is called again with a smaller
+ step-size, e.g. H/10, it should be possible to get closer to any
+ singularity. To distinguish between error codes from the
+ user-supplied functions and those from `gsl_odeiv_step_apply'
+ itself, any user-defined return values should be distinct from the
+ standard GSL error codes.
+
+ The following algorithms are available,
+
+ -- Step Type: gsl_odeiv_step_rk2
+ Embedded Runge-Kutta (2, 3) method.
+
+ -- Step Type: gsl_odeiv_step_rk4
+ 4th order (classical) Runge-Kutta.
+
+ -- Step Type: gsl_odeiv_step_rkf45
+ Embedded Runge-Kutta-Fehlberg (4, 5) method. This method is a good
+ general-purpose integrator.
+
+ -- Step Type: gsl_odeiv_step_rkck
+ Embedded Runge-Kutta Cash-Karp (4, 5) method.
+
+ -- Step Type: gsl_odeiv_step_rk8pd
+ Embedded Runge-Kutta Prince-Dormand (8,9) method.
+
+ -- Step Type: gsl_odeiv_step_rk2imp
+ Implicit 2nd order Runge-Kutta at Gaussian points.
+
+ -- Step Type: gsl_odeiv_step_rk4imp
+ Implicit 4th order Runge-Kutta at Gaussian points.
+
+ -- Step Type: gsl_odeiv_step_bsimp
+ Implicit Bulirsch-Stoer method of Bader and Deuflhard. This
+ algorithm requires the Jacobian.
+
+ -- Step Type: gsl_odeiv_step_gear1
+ M=1 implicit Gear method.
+
+ -- Step Type: gsl_odeiv_step_gear2
+ M=2 implicit Gear method.
+
+
+File: gsl-ref.info, Node: Adaptive Step-size Control, Next: Evolution, Prev: Stepping Functions, Up: Ordinary Differential Equations
+
+25.3 Adaptive Step-size Control
+===============================
+
+The control function examines the proposed change to the solution
+produced by a stepping function and attempts to determine the optimal
+step-size for a user-specified level of error.
+
+ -- Function: gsl_odeiv_control * gsl_odeiv_control_standard_new
+ (double EPS_ABS, double EPS_REL, double A_Y, double A_DYDT)
+ The standard control object is a four parameter heuristic based on
+ absolute and relative errors EPS_ABS and EPS_REL, and scaling
+ factors A_Y and A_DYDT for the system state y(t) and derivatives
+ y'(t) respectively.
+
+ The step-size adjustment procedure for this method begins by
+ computing the desired error level D_i for each component,
+
+ D_i = eps_abs + eps_rel * (a_y |y_i| + a_dydt h |y'_i|)
+
+ and comparing it with the observed error E_i = |yerr_i|. If the
+ observed error E exceeds the desired error level D by more than
+ 10% for any component then the method reduces the step-size by an
+ appropriate factor,
+
+ h_new = h_old * S * (E/D)^(-1/q)
+
+ where q is the consistency order of the method (e.g. q=4 for 4(5)
+ embedded RK), and S is a safety factor of 0.9. The ratio E/D is
+ taken to be the maximum of the ratios E_i/D_i.
+
+ If the observed error E is less than 50% of the desired error
+ level D for the maximum ratio E_i/D_i then the algorithm takes the
+ opportunity to increase the step-size to bring the error in line
+ with the desired level,
+
+ h_new = h_old * S * (E/D)^(-1/(q+1))
+
+ This encompasses all the standard error scaling methods. To avoid
+ uncontrolled changes in the stepsize, the overall scaling factor is
+ limited to the range 1/5 to 5.
+
+ -- Function: gsl_odeiv_control * gsl_odeiv_control_y_new (double
+ EPS_ABS, double EPS_REL)
+ This function creates a new control object which will keep the
+ local error on each step within an absolute error of EPS_ABS and
+ relative error of EPS_REL with respect to the solution y_i(t).
+ This is equivalent to the standard control object with A_Y=1 and
+ A_DYDT=0.
+
+ -- Function: gsl_odeiv_control * gsl_odeiv_control_yp_new (double
+ EPS_ABS, double EPS_REL)
+ This function creates a new control object which will keep the
+ local error on each step within an absolute error of EPS_ABS and
+ relative error of EPS_REL with respect to the derivatives of the
+ solution y'_i(t). This is equivalent to the standard control
+ object with A_Y=0 and A_DYDT=1.
+
+ -- Function: gsl_odeiv_control * gsl_odeiv_control_scaled_new (double
+ EPS_ABS, double EPS_REL, double A_Y, double A_DYDT, const
+ double SCALE_ABS[], size_t DIM)
+ This function creates a new control object which uses the same
+ algorithm as `gsl_odeiv_control_standard_new' but with an absolute
+ error which is scaled for each component by the array SCALE_ABS.
+ The formula for D_i for this control object is,
+
+ D_i = eps_abs * s_i + eps_rel * (a_y |y_i| + a_dydt h |y'_i|)
+
+ where s_i is the i-th component of the array SCALE_ABS. The same
+ error control heuristic is used by the Matlab ODE suite.
+
+ -- Function: gsl_odeiv_control * gsl_odeiv_control_alloc (const
+ gsl_odeiv_control_type * T)
+ This function returns a pointer to a newly allocated instance of a
+ control function of type T. This function is only needed for
+ defining new types of control functions. For most purposes the
+ standard control functions described above should be sufficient.
+
+ -- Function: int gsl_odeiv_control_init (gsl_odeiv_control * C, double
+ EPS_ABS, double EPS_REL, double A_Y, double A_DYDT)
+ This function initializes the control function C with the
+ parameters EPS_ABS (absolute error), EPS_REL (relative error), A_Y
+ (scaling factor for y) and A_DYDT (scaling factor for derivatives).
+
+ -- Function: void gsl_odeiv_control_free (gsl_odeiv_control * C)
+ This function frees all the memory associated with the control
+ function C.
+
+ -- Function: int gsl_odeiv_control_hadjust (gsl_odeiv_control * C,
+ gsl_odeiv_step * S, const double Y[], const double YERR[],
+ const double DYDT[], double * H)
+ This function adjusts the step-size H using the control function
+ C, and the current values of Y, YERR and DYDT. The stepping
+ function STEP is also needed to determine the order of the method.
+ If the error in the y-values YERR is found to be too large then
+ the step-size H is reduced and the function returns
+ `GSL_ODEIV_HADJ_DEC'. If the error is sufficiently small then H
+ may be increased and `GSL_ODEIV_HADJ_INC' is returned. The
+ function returns `GSL_ODEIV_HADJ_NIL' if the step-size is
+ unchanged. The goal of the function is to estimate the largest
+ step-size which satisfies the user-specified accuracy requirements
+ for the current point.
+
+ -- Function: const char * gsl_odeiv_control_name (const
+ gsl_odeiv_control * C)
+ This function returns a pointer to the name of the control
+ function. For example,
+
+ printf ("control method is '%s'\n",
+ gsl_odeiv_control_name (c));
+
+ would print something like `control method is 'standard''
+
+
+File: gsl-ref.info, Node: Evolution, Next: ODE Example programs, Prev: Adaptive Step-size Control, Up: Ordinary Differential Equations
+
+25.4 Evolution
+==============
+
+The highest level of the system is the evolution function which combines
+the results of a stepping function and control function to reliably
+advance the solution forward over an interval (t_0, t_1). If the
+control function signals that the step-size should be decreased the
+evolution function backs out of the current step and tries the proposed
+smaller step-size. This process is continued until an acceptable
+step-size is found.
+
+ -- Function: gsl_odeiv_evolve * gsl_odeiv_evolve_alloc (size_t DIM)
+ This function returns a pointer to a newly allocated instance of an
+ evolution function for a system of DIM dimensions.
+
+ -- Function: int gsl_odeiv_evolve_apply (gsl_odeiv_evolve * E,
+ gsl_odeiv_control * CON, gsl_odeiv_step * STEP, const
+ gsl_odeiv_system * DYDT, double * T, double T1, double * H,
+ double Y[])
+ This function advances the system (E, DYDT) from time T and
+ position Y using the stepping function STEP. The new time and
+ position are stored in T and Y on output. The initial step-size
+ is taken as H, but this will be modified using the control
+ function C to achieve the appropriate error bound if necessary.
+ The routine may make several calls to STEP in order to determine
+ the optimum step-size. An estimate of the local error for the step
+ can be obtained from the components of the array `E->yerr[]'. If
+ the step-size has been changed the value of H will be modified on
+ output. The maximum time T1 is guaranteed not to be exceeded by
+ the time-step. On the final time-step the value of T will be set
+ to T1 exactly.
+
+ If the user-supplied functions defined in the system DYDT return a
+ status other than `GSL_SUCCESS' the step will be aborted. In this
+ case, T and Y will be restored to their pre-step values and the
+ error code from the user-supplied function will be returned. To
+ distinguish between error codes from the user-supplied functions
+ and those from `gsl_odeiv_evolve_apply' itself, any user-defined
+ return values should be distinct from the standard GSL error codes.
+
+ -- Function: int gsl_odeiv_evolve_reset (gsl_odeiv_evolve * E)
+ This function resets the evolution function E. It should be used
+ whenever the next use of E will not be a continuation of a
+ previous step.
+
+ -- Function: void gsl_odeiv_evolve_free (gsl_odeiv_evolve * E)
+ This function frees all the memory associated with the evolution
+ function E.
+
+
+File: gsl-ref.info, Node: ODE Example programs, Next: ODE References and Further Reading, Prev: Evolution, Up: Ordinary Differential Equations
+
+25.5 Examples
+=============
+
+The following program solves the second-order nonlinear Van der Pol
+oscillator equation,
+
+ x''(t) + \mu x'(t) (x(t)^2 - 1) + x(t) = 0
+
+This can be converted into a first order system suitable for use with
+the routines described in this chapter by introducing a separate
+variable for the velocity, y = x'(t),
+
+ x' = y
+ y' = -x + \mu y (1-x^2)
+
+The program begins by defining functions for these derivatives and
+their Jacobian,
+
+ #include <stdio.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_matrix.h>
+ #include <gsl/gsl_odeiv.h>
+
+ int
+ func (double t, const double y[], double f[],
+ void *params)
+ {
+ double mu = *(double *)params;
+ f[0] = y[1];
+ f[1] = -y[0] - mu*y[1]*(y[0]*y[0] - 1);
+ return GSL_SUCCESS;
+ }
+
+ int
+ jac (double t, const double y[], double *dfdy,
+ double dfdt[], void *params)
+ {
+ double mu = *(double *)params;
+ gsl_matrix_view dfdy_mat
+ = gsl_matrix_view_array (dfdy, 2, 2);
+ gsl_matrix * m = &dfdy_mat.matrix;
+ gsl_matrix_set (m, 0, 0, 0.0);
+ gsl_matrix_set (m, 0, 1, 1.0);
+ gsl_matrix_set (m, 1, 0, -2.0*mu*y[0]*y[1] - 1.0);
+ gsl_matrix_set (m, 1, 1, -mu*(y[0]*y[0] - 1.0));
+ dfdt[0] = 0.0;
+ dfdt[1] = 0.0;
+ return GSL_SUCCESS;
+ }
+
+ int
+ main (void)
+ {
+ const gsl_odeiv_step_type * T
+ = gsl_odeiv_step_rk8pd;
+
+ gsl_odeiv_step * s
+ = gsl_odeiv_step_alloc (T, 2);
+ gsl_odeiv_control * c
+ = gsl_odeiv_control_y_new (1e-6, 0.0);
+ gsl_odeiv_evolve * e
+ = gsl_odeiv_evolve_alloc (2);
+
+ double mu = 10;
+ gsl_odeiv_system sys = {func, jac, 2, &mu};
+
+ double t = 0.0, t1 = 100.0;
+ double h = 1e-6;
+ double y[2] = { 1.0, 0.0 };
+
+ while (t < t1)
+ {
+ int status = gsl_odeiv_evolve_apply (e, c, s,
+ &sys,
+ &t, t1,
+ &h, y);
+
+ if (status != GSL_SUCCESS)
+ break;
+
+ printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
+ }
+
+ gsl_odeiv_evolve_free (e);
+ gsl_odeiv_control_free (c);
+ gsl_odeiv_step_free (s);
+ return 0;
+ }
+
+For functions with multiple parameters, the appropriate information can
+be passed in through the PARAMS argument using a pointer to a struct.
+
+ The main loop of the program evolves the solution from (y, y') = (1,
+0) at t=0 to t=100. The step-size h is automatically adjusted by the
+controller to maintain an absolute accuracy of 10^{-6} in the function
+values Y.
+
+To obtain the values at regular intervals, rather than the variable
+spacings chosen by the control function, the main loop can be modified
+to advance the solution from one point to the next. For example, the
+following main loop prints the solution at the fixed points t = 0, 1,
+2, \dots, 100,
+
+ for (i = 1; i <= 100; i++)
+ {
+ double ti = i * t1 / 100.0;
+
+ while (t < ti)
+ {
+ gsl_odeiv_evolve_apply (e, c, s,
+ &sys,
+ &t, ti, &h,
+ y);
+ }
+
+ printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
+ }
+
+It is also possible to work with a non-adaptive integrator, using only
+the stepping function itself. The following program uses the `rk4'
+fourth-order Runge-Kutta stepping function with a fixed stepsize of
+0.01,
+
+ int
+ main (void)
+ {
+ const gsl_odeiv_step_type * T
+ = gsl_odeiv_step_rk4;
+
+ gsl_odeiv_step * s
+ = gsl_odeiv_step_alloc (T, 2);
+
+ double mu = 10;
+ gsl_odeiv_system sys = {func, jac, 2, &mu};
+
+ double t = 0.0, t1 = 100.0;
+ double h = 1e-2;
+ double y[2] = { 1.0, 0.0 }, y_err[2];
+ double dydt_in[2], dydt_out[2];
+
+ /* initialise dydt_in from system parameters */
+ GSL_ODEIV_FN_EVAL(&sys, t, y, dydt_in);
+
+ while (t < t1)
+ {
+ int status = gsl_odeiv_step_apply (s, t, h,
+ y, y_err,
+ dydt_in,
+ dydt_out,
+ &sys);
+
+ if (status != GSL_SUCCESS)
+ break;
+
+ dydt_in[0] = dydt_out[0];
+ dydt_in[1] = dydt_out[1];
+
+ t += h;
+
+ printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
+ }
+
+ gsl_odeiv_step_free (s);
+ return 0;
+ }
+
+The derivatives must be initialized for the starting point t=0 before
+the first step is taken. Subsequent steps use the output derivatives
+DYDT_OUT as inputs to the next step by copying their values into
+DYDT_IN.
+
+
+File: gsl-ref.info, Node: ODE References and Further Reading, Prev: ODE Example programs, Up: Ordinary Differential Equations
+
+25.6 References and Further Reading
+===================================
+
+Many of the basic Runge-Kutta formulas can be found in the Handbook of
+Mathematical Functions,
+
+ Abramowitz & Stegun (eds.), `Handbook of Mathematical Functions',
+ Section 25.5.
+
+The implicit Bulirsch-Stoer algorithm `bsimp' is described in the
+following paper,
+
+ G. Bader and P. Deuflhard, "A Semi-Implicit Mid-Point Rule for
+ Stiff Systems of Ordinary Differential Equations.", Numer. Math.
+ 41, 373-398, 1983.
+
+
+File: gsl-ref.info, Node: Interpolation, Next: Numerical Differentiation, Prev: Ordinary Differential Equations, Up: Top
+
+26 Interpolation
+****************
+
+This chapter describes functions for performing interpolation. The
+library provides a variety of interpolation methods, including Cubic
+splines and Akima splines. The interpolation types are interchangeable,
+allowing different methods to be used without recompiling.
+Interpolations can be defined for both normal and periodic boundary
+conditions. Additional functions are available for computing
+derivatives and integrals of interpolating functions.
+
+ The functions described in this section are declared in the header
+files `gsl_interp.h' and `gsl_spline.h'.
+
+* Menu:
+
+* Introduction to Interpolation::
+* Interpolation Functions::
+* Interpolation Types::
+* Index Look-up and Acceleration::
+* Evaluation of Interpolating Functions::
+* Higher-level Interface::
+* Interpolation Example programs::
+* Interpolation References and Further Reading::
+
+
+File: gsl-ref.info, Node: Introduction to Interpolation, Next: Interpolation Functions, Up: Interpolation
+
+26.1 Introduction
+=================
+
+Given a set of data points (x_1, y_1) \dots (x_n, y_n) the routines
+described in this section compute a continuous interpolating function
+y(x) such that y(x_i) = y_i. The interpolation is piecewise smooth,
+and its behavior at the end-points is determined by the type of
+interpolation used.
+
+
+File: gsl-ref.info, Node: Interpolation Functions, Next: Interpolation Types, Prev: Introduction to Interpolation, Up: Interpolation
+
+26.2 Interpolation Functions
+============================
+
+The interpolation function for a given dataset is stored in a
+`gsl_interp' object. These are created by the following functions.
+
+ -- Function: gsl_interp * gsl_interp_alloc (const gsl_interp_type * T,
+ size_t SIZE)
+ This function returns a pointer to a newly allocated interpolation
+ object of type T for SIZE data-points.
+
+ -- Function: int gsl_interp_init (gsl_interp * INTERP, const double
+ XA[], const double YA[], size_t SIZE)
+ This function initializes the interpolation object INTERP for the
+ data (XA,YA) where XA and YA are arrays of size SIZE. The
+ interpolation object (`gsl_interp') does not save the data arrays
+ XA and YA and only stores the static state computed from the data.
+ The XA data array is always assumed to be strictly ordered; the
+ behavior for other arrangements is not defined.
+
+ -- Function: void gsl_interp_free (gsl_interp * INTERP)
+ This function frees the interpolation object INTERP.
+
+
+File: gsl-ref.info, Node: Interpolation Types, Next: Index Look-up and Acceleration, Prev: Interpolation Functions, Up: Interpolation
+
+26.3 Interpolation Types
+========================
+
+The interpolation library provides five interpolation types:
+
+ -- Interpolation Type: gsl_interp_linear
+ Linear interpolation. This interpolation method does not require
+ any additional memory.
+
+ -- Interpolation Type: gsl_interp_polynomial
+ Polynomial interpolation. This method should only be used for
+ interpolating small numbers of points because polynomial
+ interpolation introduces large oscillations, even for well-behaved
+ datasets. The number of terms in the interpolating polynomial is
+ equal to the number of points.
+
+ -- Interpolation Type: gsl_interp_cspline
+ Cubic spline with natural boundary conditions. The resulting
+ curve is piecewise cubic on each interval, with matching first and
+ second derivatives at the supplied data-points. The second
+ derivative is chosen to be zero at the first point and last point.
+
+ -- Interpolation Type: gsl_interp_cspline_periodic
+ Cubic spline with periodic boundary conditions. The resulting
+ curve is piecewise cubic on each interval, with matching first and
+ second derivatives at the supplied data-points. The derivatives
+ at the first and last points are also matched. Note that the last
+ point in the data must have the same y-value as the first point,
+ otherwise the resulting periodic interpolation will have a
+ discontinuity at the boundary.
+
+
+ -- Interpolation Type: gsl_interp_akima
+ Non-rounded Akima spline with natural boundary conditions. This
+ method uses the non-rounded corner algorithm of Wodicka.
+
+ -- Interpolation Type: gsl_interp_akima_periodic
+ Non-rounded Akima spline with periodic boundary conditions. This
+ method uses the non-rounded corner algorithm of Wodicka.
+
+ The following related functions are available:
+
+ -- Function: const char * gsl_interp_name (const gsl_interp * INTERP)
+ This function returns the name of the interpolation type used by
+ INTERP. For example,
+
+ printf ("interp uses '%s' interpolation.\n",
+ gsl_interp_name (interp));
+
+ would print something like,
+
+ interp uses 'cspline' interpolation.
+
+ -- Function: unsigned int gsl_interp_min_size (const gsl_interp *
+ INTERP)
+ This function returns the minimum number of points required by the
+ interpolation type of INTERP. For example, Akima spline
+ interpolation requires a minimum of 5 points.
+
+
+File: gsl-ref.info, Node: Index Look-up and Acceleration, Next: Evaluation of Interpolating Functions, Prev: Interpolation Types, Up: Interpolation
+
+26.4 Index Look-up and Acceleration
+===================================
+
+The state of searches can be stored in a `gsl_interp_accel' object,
+which is a kind of iterator for interpolation lookups. It caches the
+previous value of an index lookup. When the subsequent interpolation
+point falls in the same interval its index value can be returned
+immediately.
+
+ -- Function: size_t gsl_interp_bsearch (const double X_ARRAY[], double
+ X, size_t INDEX_LO, size_t INDEX_HI)
+ This function returns the index i of the array X_ARRAY such that
+ `x_array[i] <= x < x_array[i+1]'. The index is searched for in
+ the range [INDEX_LO,INDEX_HI].
+
+ -- Function: gsl_interp_accel * gsl_interp_accel_alloc (void)
+ This function returns a pointer to an accelerator object, which is
+ a kind of iterator for interpolation lookups. It tracks the state
+ of lookups, thus allowing for application of various acceleration
+ strategies.
+
+ -- Function: size_t gsl_interp_accel_find (gsl_interp_accel * A, const
+ double X_ARRAY[], size_t SIZE, double X)
+ This function performs a lookup action on the data array X_ARRAY
+ of size SIZE, using the given accelerator A. This is how lookups
+ are performed during evaluation of an interpolation. The function
+ returns an index i such that `x_array[i] <= x < x_array[i+1]'.
+
+ -- Function: void gsl_interp_accel_free (gsl_interp_accel* ACC)
+ This function frees the accelerator object ACC.
+
+
+File: gsl-ref.info, Node: Evaluation of Interpolating Functions, Next: Higher-level Interface, Prev: Index Look-up and Acceleration, Up: Interpolation
+
+26.5 Evaluation of Interpolating Functions
+==========================================
+
+ -- Function: double gsl_interp_eval (const gsl_interp * INTERP, const
+ double XA[], const double YA[], double X, gsl_interp_accel *
+ ACC)
+ -- Function: int gsl_interp_eval_e (const gsl_interp * INTERP, const
+ double XA[], const double YA[], double X, gsl_interp_accel *
+ ACC, double * Y)
+ These functions return the interpolated value of Y for a given
+ point X, using the interpolation object INTERP, data arrays XA and
+ YA and the accelerator ACC.
+
+ -- Function: double gsl_interp_eval_deriv (const gsl_interp * INTERP,
+ const double XA[], const double YA[], double X,
+ gsl_interp_accel * ACC)
+ -- Function: int gsl_interp_eval_deriv_e (const gsl_interp * INTERP,
+ const double XA[], const double YA[], double X,
+ gsl_interp_accel * ACC, double * D)
+ These functions return the derivative D of an interpolated
+ function for a given point X, using the interpolation object
+ INTERP, data arrays XA and YA and the accelerator ACC.
+
+ -- Function: double gsl_interp_eval_deriv2 (const gsl_interp * INTERP,
+ const double XA[], const double YA[], double X,
+ gsl_interp_accel * ACC)
+ -- Function: int gsl_interp_eval_deriv2_e (const gsl_interp * INTERP,
+ const double XA[], const double YA[], double X,
+ gsl_interp_accel * ACC, double * D2)
+ These functions return the second derivative D2 of an interpolated
+ function for a given point X, using the interpolation object
+ INTERP, data arrays XA and YA and the accelerator ACC.
+
+ -- Function: double gsl_interp_eval_integ (const gsl_interp * INTERP,
+ const double XA[], const double YA[], double A, double B,
+ gsl_interp_accel * ACC)
+ -- Function: int gsl_interp_eval_integ_e (const gsl_interp * INTERP,
+ const double XA[], const double YA[], double A, double B,
+ gsl_interp_accel * ACC, double * RESULT)
+ These functions return the numerical integral RESULT of an
+ interpolated function over the range [A, B], using the
+ interpolation object INTERP, data arrays XA and YA and the
+ accelerator ACC.
+
+
+File: gsl-ref.info, Node: Higher-level Interface, Next: Interpolation Example programs, Prev: Evaluation of Interpolating Functions, Up: Interpolation
+
+26.6 Higher-level Interface
+===========================
+
+The functions described in the previous sections required the user to
+supply pointers to the x and y arrays on each call. The following
+functions are equivalent to the corresponding `gsl_interp' functions
+but maintain a copy of this data in the `gsl_spline' object. This
+removes the need to pass both XA and YA as arguments on each
+evaluation. These functions are defined in the header file
+`gsl_spline.h'.
+
+ -- Function: gsl_spline * gsl_spline_alloc (const gsl_interp_type * T,
+ size_t SIZE)
+
+ -- Function: int gsl_spline_init (gsl_spline * SPLINE, const double
+ XA[], const double YA[], size_t SIZE)
+
+ -- Function: void gsl_spline_free (gsl_spline * SPLINE)
+
+ -- Function: const char * gsl_spline_name (const gsl_spline * SPLINE)
+
+ -- Function: unsigned int gsl_spline_min_size (const gsl_spline *
+ SPLINE)
+
+ -- Function: double gsl_spline_eval (const gsl_spline * SPLINE, double
+ X, gsl_interp_accel * ACC)
+ -- Function: int gsl_spline_eval_e (const gsl_spline * SPLINE, double
+ X, gsl_interp_accel * ACC, double * Y)
+
+ -- Function: double gsl_spline_eval_deriv (const gsl_spline * SPLINE,
+ double X, gsl_interp_accel * ACC)
+ -- Function: int gsl_spline_eval_deriv_e (const gsl_spline * SPLINE,
+ double X, gsl_interp_accel * ACC, double * D)
+
+ -- Function: double gsl_spline_eval_deriv2 (const gsl_spline * SPLINE,
+ double X, gsl_interp_accel * ACC)
+ -- Function: int gsl_spline_eval_deriv2_e (const gsl_spline * SPLINE,
+ double X, gsl_interp_accel * ACC, double * D2)
+
+ -- Function: double gsl_spline_eval_integ (const gsl_spline * SPLINE,
+ double A, double B, gsl_interp_accel * ACC)
+ -- Function: int gsl_spline_eval_integ_e (const gsl_spline * SPLINE,
+ double A, double B, gsl_interp_accel * ACC, double * RESULT)
+
+
+File: gsl-ref.info, Node: Interpolation Example programs, Next: Interpolation References and Further Reading, Prev: Higher-level Interface, Up: Interpolation
+
+26.7 Examples
+=============
+
+The following program demonstrates the use of the interpolation and
+spline functions. It computes a cubic spline interpolation of the
+10-point dataset (x_i, y_i) where x_i = i + \sin(i)/2 and y_i = i +
+\cos(i^2) for i = 0 \dots 9.
+
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_spline.h>
+
+ int
+ main (void)
+ {
+ int i;
+ double xi, yi, x[10], y[10];
+
+ printf ("#m=0,S=2\n");
+
+ for (i = 0; i < 10; i++)
+ {
+ x[i] = i + 0.5 * sin (i);
+ y[i] = i + cos (i * i);
+ printf ("%g %g\n", x[i], y[i]);
+ }
+
+ printf ("#m=1,S=0\n");
+
+ {
+ gsl_interp_accel *acc
+ = gsl_interp_accel_alloc ();
+ gsl_spline *spline
+ = gsl_spline_alloc (gsl_interp_cspline, 10);
+
+ gsl_spline_init (spline, x, y, 10);
+
+ for (xi = x[0]; xi < x[9]; xi += 0.01)
+ {
+ yi = gsl_spline_eval (spline, xi, acc);
+ printf ("%g %g\n", xi, yi);
+ }
+ gsl_spline_free (spline);
+ gsl_interp_accel_free (acc);
+ }
+ return 0;
+ }
+
+The output is designed to be used with the GNU plotutils `graph'
+program,
+
+ $ ./a.out > interp.dat
+ $ graph -T ps < interp.dat > interp.ps
+
+The result shows a smooth interpolation of the original points. The
+interpolation method can changed simply by varying the first argument of
+`gsl_spline_alloc'.
+
+ The next program demonstrates a periodic cubic spline with 4 data
+points. Note that the first and last points must be supplied with the
+same y-value for a periodic spline.
+
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_spline.h>
+
+ int
+ main (void)
+ {
+ int N = 4;
+ double x[4] = {0.00, 0.10, 0.27, 0.30};
+ double y[4] = {0.15, 0.70, -0.10, 0.15}; /* Note: first = last
+ for periodic data */
+
+ gsl_interp_accel *acc = gsl_interp_accel_alloc ();
+ const gsl_interp_type *t = gsl_interp_cspline_periodic;
+ gsl_spline *spline = gsl_spline_alloc (t, N);
+
+ int i; double xi, yi;
+
+ printf ("#m=0,S=5\n");
+ for (i = 0; i < N; i++)
+ {
+ printf ("%g %g\n", x[i], y[i]);
+ }
+
+ printf ("#m=1,S=0\n");
+ gsl_spline_init (spline, x, y, N);
+
+ for (i = 0; i <= 100; i++)
+ {
+ xi = (1 - i / 100.0) * x[0] + (i / 100.0) * x[N-1];
+ yi = gsl_spline_eval (spline, xi, acc);
+ printf ("%g %g\n", xi, yi);
+ }
+
+ gsl_spline_free (spline);
+ gsl_interp_accel_free (acc);
+ return 0;
+ }
+
+The output can be plotted with GNU `graph'.
+
+ $ ./a.out > interp.dat
+ $ graph -T ps < interp.dat > interp.ps
+
+The result shows a periodic interpolation of the original points. The
+slope of the fitted curve is the same at the beginning and end of the
+data, and the second derivative is also.
+
+
+File: gsl-ref.info, Node: Interpolation References and Further Reading, Prev: Interpolation Example programs, Up: Interpolation
+
+26.8 References and Further Reading
+===================================
+
+Descriptions of the interpolation algorithms and further references can
+be found in the following books:
+
+ C.W. Ueberhuber, `Numerical Computation (Volume 1), Chapter 9
+ "Interpolation"', Springer (1997), ISBN 3-540-62058-3.
+
+ D.M. Young, R.T. Gregory `A Survey of Numerical Mathematics
+ (Volume 1), Chapter 6.8', Dover (1988), ISBN 0-486-65691-8.
+
+
+
+File: gsl-ref.info, Node: Numerical Differentiation, Next: Chebyshev Approximations, Prev: Interpolation, Up: Top
+
+27 Numerical Differentiation
+****************************
+
+The functions described in this chapter compute numerical derivatives by
+finite differencing. An adaptive algorithm is used to find the best
+choice of finite difference and to estimate the error in the derivative.
+These functions are declared in the header file `gsl_deriv.h'.
+
+* Menu:
+
+* Numerical Differentiation functions::
+* Numerical Differentiation Examples::
+* Numerical Differentiation References::
+
+
+File: gsl-ref.info, Node: Numerical Differentiation functions, Next: Numerical Differentiation Examples, Up: Numerical Differentiation
+
+27.1 Functions
+==============
+
+ -- Function: int gsl_deriv_central (const gsl_function * F, double X,
+ double H, double * RESULT, double * ABSERR)
+ This function computes the numerical derivative of the function F
+ at the point X using an adaptive central difference algorithm with
+ a step-size of H. The derivative is returned in RESULT and an
+ estimate of its absolute error is returned in ABSERR.
+
+ The initial value of H is used to estimate an optimal step-size,
+ based on the scaling of the truncation error and round-off error
+ in the derivative calculation. The derivative is computed using a
+ 5-point rule for equally spaced abscissae at x-h, x-h/2, x, x+h/2,
+ x+h, with an error estimate taken from the difference between the
+ 5-point rule and the corresponding 3-point rule x-h, x, x+h. Note
+ that the value of the function at x does not contribute to the
+ derivative calculation, so only 4-points are actually used.
+
+ -- Function: int gsl_deriv_forward (const gsl_function * F, double X,
+ double H, double * RESULT, double * ABSERR)
+ This function computes the numerical derivative of the function F
+ at the point X using an adaptive forward difference algorithm with
+ a step-size of H. The function is evaluated only at points greater
+ than X, and never at X itself. The derivative is returned in
+ RESULT and an estimate of its absolute error is returned in
+ ABSERR. This function should be used if f(x) has a discontinuity
+ at X, or is undefined for values less than X.
+
+ The initial value of H is used to estimate an optimal step-size,
+ based on the scaling of the truncation error and round-off error
+ in the derivative calculation. The derivative at x is computed
+ using an "open" 4-point rule for equally spaced abscissae at x+h/4,
+ x+h/2, x+3h/4, x+h, with an error estimate taken from the
+ difference between the 4-point rule and the corresponding 2-point
+ rule x+h/2, x+h.
+
+ -- Function: int gsl_deriv_backward (const gsl_function * F, double X,
+ double H, double * RESULT, double * ABSERR)
+ This function computes the numerical derivative of the function F
+ at the point X using an adaptive backward difference algorithm
+ with a step-size of H. The function is evaluated only at points
+ less than X, and never at X itself. The derivative is returned in
+ RESULT and an estimate of its absolute error is returned in
+ ABSERR. This function should be used if f(x) has a discontinuity
+ at X, or is undefined for values greater than X.
+
+ This function is equivalent to calling `gsl_deriv_forward' with a
+ negative step-size.
+
+
+File: gsl-ref.info, Node: Numerical Differentiation Examples, Next: Numerical Differentiation References, Prev: Numerical Differentiation functions, Up: Numerical Differentiation
+
+27.2 Examples
+=============
+
+The following code estimates the derivative of the function f(x) =
+x^{3/2} at x=2 and at x=0. The function f(x) is undefined for x<0 so
+the derivative at x=0 is computed using `gsl_deriv_forward'.
+
+ #include <stdio.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_deriv.h>
+
+ double f (double x, void * params)
+ {
+ return pow (x, 1.5);
+ }
+
+ int
+ main (void)
+ {
+ gsl_function F;
+ double result, abserr;
+
+ F.function = &f;
+ F.params = 0;
+
+ printf ("f(x) = x^(3/2)\n");
+
+ gsl_deriv_central (&F, 2.0, 1e-8, &result, &abserr);
+ printf ("x = 2.0\n");
+ printf ("f'(x) = %.10f +/- %.10f\n", result, abserr);
+ printf ("exact = %.10f\n\n", 1.5 * sqrt(2.0));
+
+ gsl_deriv_forward (&F, 0.0, 1e-8, &result, &abserr);
+ printf ("x = 0.0\n");
+ printf ("f'(x) = %.10f +/- %.10f\n", result, abserr);
+ printf ("exact = %.10f\n", 0.0);
+
+ return 0;
+ }
+
+Here is the output of the program,
+
+ $ ./a.out
+ f(x) = x^(3/2)
+ x = 2.0
+ f'(x) = 2.1213203120 +/- 0.0000004064
+ exact = 2.1213203436
+
+ x = 0.0
+ f'(x) = 0.0000000160 +/- 0.0000000339
+ exact = 0.0000000000
+
+
+File: gsl-ref.info, Node: Numerical Differentiation References, Prev: Numerical Differentiation Examples, Up: Numerical Differentiation
+
+27.3 References and Further Reading
+===================================
+
+The algorithms used by these functions are described in the following
+sources:
+
+ Abramowitz and Stegun, `Handbook of Mathematical Functions',
+ Section 25.3.4, and Table 25.5 (Coefficients for Differentiation).
+
+ S.D. Conte and Carl de Boor, `Elementary Numerical Analysis: An
+ Algorithmic Approach', McGraw-Hill, 1972.
+
+
+File: gsl-ref.info, Node: Chebyshev Approximations, Next: Series Acceleration, Prev: Numerical Differentiation, Up: Top
+
+28 Chebyshev Approximations
+***************************
+
+This chapter describes routines for computing Chebyshev approximations
+to univariate functions. A Chebyshev approximation is a truncation of
+the series f(x) = \sum c_n T_n(x), where the Chebyshev polynomials
+T_n(x) = \cos(n \arccos x) provide an orthogonal basis of polynomials
+on the interval [-1,1] with the weight function 1 / \sqrt{1-x^2}. The
+first few Chebyshev polynomials are, T_0(x) = 1, T_1(x) = x, T_2(x) = 2
+x^2 - 1. For further information see Abramowitz & Stegun, Chapter 22.
+
+ The functions described in this chapter are declared in the header
+file `gsl_chebyshev.h'.
+
+* Menu:
+
+* Chebyshev Definitions::
+* Creation and Calculation of Chebyshev Series::
+* Chebyshev Series Evaluation::
+* Derivatives and Integrals::
+* Chebyshev Approximation examples::
+* Chebyshev Approximation References and Further Reading::
+
+
+File: gsl-ref.info, Node: Chebyshev Definitions, Next: Creation and Calculation of Chebyshev Series, Up: Chebyshev Approximations
+
+28.1 Definitions
+================
+
+A Chebyshev series is stored using the following structure,
+
+ typedef struct
+ {
+ double * c; /* coefficients c[0] .. c[order] */
+ int order; /* order of expansion */
+ double a; /* lower interval point */
+ double b; /* upper interval point */
+ ...
+ } gsl_cheb_series
+
+The approximation is made over the range [a,b] using ORDER+1 terms,
+including the coefficient c[0]. The series is computed using the
+following convention,
+
+ f(x) = (c_0 / 2) + \sum_{n=1} c_n T_n(x)
+
+which is needed when accessing the coefficients directly.
+
+
+File: gsl-ref.info, Node: Creation and Calculation of Chebyshev Series, Next: Chebyshev Series Evaluation, Prev: Chebyshev Definitions, Up: Chebyshev Approximations
+
+28.2 Creation and Calculation of Chebyshev Series
+=================================================
+
+ -- Function: gsl_cheb_series * gsl_cheb_alloc (const size_t N)
+ This function allocates space for a Chebyshev series of order N
+ and returns a pointer to a new `gsl_cheb_series' struct.
+
+ -- Function: void gsl_cheb_free (gsl_cheb_series * CS)
+ This function frees a previously allocated Chebyshev series CS.
+
+ -- Function: int gsl_cheb_init (gsl_cheb_series * CS, const
+ gsl_function * F, const double A, const double B)
+ This function computes the Chebyshev approximation CS for the
+ function F over the range (a,b) to the previously specified order.
+ The computation of the Chebyshev approximation is an O(n^2)
+ process, and requires n function evaluations.
+
+
+File: gsl-ref.info, Node: Chebyshev Series Evaluation, Next: Derivatives and Integrals, Prev: Creation and Calculation of Chebyshev Series, Up: Chebyshev Approximations
+
+28.3 Chebyshev Series Evaluation
+================================
+
+ -- Function: double gsl_cheb_eval (const gsl_cheb_series * CS, double
+ X)
+ This function evaluates the Chebyshev series CS at a given point X.
+
+ -- Function: int gsl_cheb_eval_err (const gsl_cheb_series * CS, const
+ double X, double * RESULT, double * ABSERR)
+ This function computes the Chebyshev series CS at a given point X,
+ estimating both the series RESULT and its absolute error ABSERR.
+ The error estimate is made from the first neglected term in the
+ series.
+
+ -- Function: double gsl_cheb_eval_n (const gsl_cheb_series * CS,
+ size_t ORDER, double X)
+ This function evaluates the Chebyshev series CS at a given point
+ N, to (at most) the given order ORDER.
+
+ -- Function: int gsl_cheb_eval_n_err (const gsl_cheb_series * CS,
+ const size_t ORDER, const double X, double * RESULT, double *
+ ABSERR)
+ This function evaluates a Chebyshev series CS at a given point X,
+ estimating both the series RESULT and its absolute error ABSERR,
+ to (at most) the given order ORDER. The error estimate is made
+ from the first neglected term in the series.
+
+
+File: gsl-ref.info, Node: Derivatives and Integrals, Next: Chebyshev Approximation examples, Prev: Chebyshev Series Evaluation, Up: Chebyshev Approximations
+
+28.4 Derivatives and Integrals
+==============================
+
+The following functions allow a Chebyshev series to be differentiated or
+integrated, producing a new Chebyshev series. Note that the error
+estimate produced by evaluating the derivative series will be
+underestimated due to the contribution of higher order terms being
+neglected.
+
+ -- Function: int gsl_cheb_calc_deriv (gsl_cheb_series * DERIV, const
+ gsl_cheb_series * CS)
+ This function computes the derivative of the series CS, storing
+ the derivative coefficients in the previously allocated DERIV.
+ The two series CS and DERIV must have been allocated with the same
+ order.
+
+ -- Function: int gsl_cheb_calc_integ (gsl_cheb_series * INTEG, const
+ gsl_cheb_series * CS)
+ This function computes the integral of the series CS, storing the
+ integral coefficients in the previously allocated INTEG. The two
+ series CS and INTEG must have been allocated with the same order.
+ The lower limit of the integration is taken to be the left hand
+ end of the range A.
+
+
+File: gsl-ref.info, Node: Chebyshev Approximation examples, Next: Chebyshev Approximation References and Further Reading, Prev: Derivatives and Integrals, Up: Chebyshev Approximations
+
+28.5 Examples
+=============
+
+The following example program computes Chebyshev approximations to a
+step function. This is an extremely difficult approximation to make,
+due to the discontinuity, and was chosen as an example where
+approximation error is visible. For smooth functions the Chebyshev
+approximation converges extremely rapidly and errors would not be
+visible.
+
+ #include <stdio.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_chebyshev.h>
+
+ double
+ f (double x, void *p)
+ {
+ if (x < 0.5)
+ return 0.25;
+ else
+ return 0.75;
+ }
+
+ int
+ main (void)
+ {
+ int i, n = 10000;
+
+ gsl_cheb_series *cs = gsl_cheb_alloc (40);
+
+ gsl_function F;
+
+ F.function = f;
+ F.params = 0;
+
+ gsl_cheb_init (cs, &F, 0.0, 1.0);
+
+ for (i = 0; i < n; i++)
+ {
+ double x = i / (double)n;
+ double r10 = gsl_cheb_eval_n (cs, 10, x);
+ double r40 = gsl_cheb_eval (cs, x);
+ printf ("%g %g %g %g\n",
+ x, GSL_FN_EVAL (&F, x), r10, r40);
+ }
+
+ gsl_cheb_free (cs);
+
+ return 0;
+ }
+
+The output from the program gives the original function, 10-th order
+approximation and 40-th order approximation, all sampled at intervals of
+0.001 in x.
+
+
+File: gsl-ref.info, Node: Chebyshev Approximation References and Further Reading, Prev: Chebyshev Approximation examples, Up: Chebyshev Approximations
+
+28.6 References and Further Reading
+===================================
+
+The following paper describes the use of Chebyshev series,
+
+ R. Broucke, "Ten Subroutines for the Manipulation of Chebyshev
+ Series [C1] (Algorithm 446)". `Communications of the ACM' 16(4),
+ 254-256 (1973)
+
+
+File: gsl-ref.info, Node: Series Acceleration, Next: Wavelet Transforms, Prev: Chebyshev Approximations, Up: Top
+
+29 Series Acceleration
+**********************
+
+The functions described in this chapter accelerate the convergence of a
+series using the Levin u-transform. This method takes a small number of
+terms from the start of a series and uses a systematic approximation to
+compute an extrapolated value and an estimate of its error. The
+u-transform works for both convergent and divergent series, including
+asymptotic series.
+
+ These functions are declared in the header file `gsl_sum.h'.
+
+* Menu:
+
+* Acceleration functions::
+* Acceleration functions without error estimation::
+* Example of accelerating a series::
+* Series Acceleration References::
+
+
+File: gsl-ref.info, Node: Acceleration functions, Next: Acceleration functions without error estimation, Up: Series Acceleration
+
+29.1 Acceleration functions
+===========================
+
+The following functions compute the full Levin u-transform of a series
+with its error estimate. The error estimate is computed by propagating
+rounding errors from each term through to the final extrapolation.
+
+ These functions are intended for summing analytic series where each
+term is known to high accuracy, and the rounding errors are assumed to
+originate from finite precision. They are taken to be relative errors of
+order `GSL_DBL_EPSILON' for each term.
+
+ The calculation of the error in the extrapolated value is an O(N^2)
+process, which is expensive in time and memory. A faster but less
+reliable method which estimates the error from the convergence of the
+extrapolated value is described in the next section. For the method
+described here a full table of intermediate values and derivatives
+through to O(N) must be computed and stored, but this does give a
+reliable error estimate.
+
+ -- Function: gsl_sum_levin_u_workspace * gsl_sum_levin_u_alloc (size_t
+ N)
+ This function allocates a workspace for a Levin u-transform of N
+ terms. The size of the workspace is O(2n^2 + 3n).
+
+ -- Function: void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_sum_levin_u_accel (const double * ARRAY, size_t
+ ARRAY_SIZE, gsl_sum_levin_u_workspace * W, double *
+ SUM_ACCEL, double * ABSERR)
+ This function takes the terms of a series in ARRAY of size
+ ARRAY_SIZE and computes the extrapolated limit of the series using
+ a Levin u-transform. Additional working space must be provided in
+ W. The extrapolated sum is stored in SUM_ACCEL, with an estimate
+ of the absolute error stored in ABSERR. The actual term-by-term
+ sum is returned in `w->sum_plain'. The algorithm calculates the
+ truncation error (the difference between two successive
+ extrapolations) and round-off error (propagated from the individual
+ terms) to choose an optimal number of terms for the extrapolation.
+ All the terms of the series passed in through ARRAY should be
+ non-zero.
+
+
+File: gsl-ref.info, Node: Acceleration functions without error estimation, Next: Example of accelerating a series, Prev: Acceleration functions, Up: Series Acceleration
+
+29.2 Acceleration functions without error estimation
+====================================================
+
+The functions described in this section compute the Levin u-transform of
+series and attempt to estimate the error from the "truncation error" in
+the extrapolation, the difference between the final two approximations.
+Using this method avoids the need to compute an intermediate table of
+derivatives because the error is estimated from the behavior of the
+extrapolated value itself. Consequently this algorithm is an O(N)
+process and only requires O(N) terms of storage. If the series
+converges sufficiently fast then this procedure can be acceptable. It
+is appropriate to use this method when there is a need to compute many
+extrapolations of series with similar convergence properties at
+high-speed. For example, when numerically integrating a function
+defined by a parameterized series where the parameter varies only
+slightly. A reliable error estimate should be computed first using the
+full algorithm described above in order to verify the consistency of the
+results.
+
+ -- Function: gsl_sum_levin_utrunc_workspace *
+gsl_sum_levin_utrunc_alloc (size_t N)
+ This function allocates a workspace for a Levin u-transform of N
+ terms, without error estimation. The size of the workspace is
+ O(3n).
+
+ -- Function: void gsl_sum_levin_utrunc_free
+ (gsl_sum_levin_utrunc_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_sum_levin_utrunc_accel (const double * ARRAY,
+ size_t ARRAY_SIZE, gsl_sum_levin_utrunc_workspace * W, double
+ * SUM_ACCEL, double * ABSERR_TRUNC)
+ This function takes the terms of a series in ARRAY of size
+ ARRAY_SIZE and computes the extrapolated limit of the series using
+ a Levin u-transform. Additional working space must be provided in
+ W. The extrapolated sum is stored in SUM_ACCEL. The actual
+ term-by-term sum is returned in `w->sum_plain'. The algorithm
+ terminates when the difference between two successive
+ extrapolations reaches a minimum or is sufficiently small. The
+ difference between these two values is used as estimate of the
+ error and is stored in ABSERR_TRUNC. To improve the reliability
+ of the algorithm the extrapolated values are replaced by moving
+ averages when calculating the truncation error, smoothing out any
+ fluctuations.
+
+
+File: gsl-ref.info, Node: Example of accelerating a series, Next: Series Acceleration References, Prev: Acceleration functions without error estimation, Up: Series Acceleration
+
+29.3 Examples
+=============
+
+The following code calculates an estimate of \zeta(2) = \pi^2 / 6 using
+the series,
+
+ \zeta(2) = 1 + 1/2^2 + 1/3^2 + 1/4^2 + ...
+
+After N terms the error in the sum is O(1/N), making direct summation
+of the series converge slowly.
+
+ #include <stdio.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_sum.h>
+
+ #define N 20
+
+ int
+ main (void)
+ {
+ double t[N];
+ double sum_accel, err;
+ double sum = 0;
+ int n;
+
+ gsl_sum_levin_u_workspace * w
+ = gsl_sum_levin_u_alloc (N);
+
+ const double zeta_2 = M_PI * M_PI / 6.0;
+
+ /* terms for zeta(2) = \sum_{n=1}^{\infty} 1/n^2 */
+
+ for (n = 0; n < N; n++)
+ {
+ double np1 = n + 1.0;
+ t[n] = 1.0 / (np1 * np1);
+ sum += t[n];
+ }
+
+ gsl_sum_levin_u_accel (t, N, w, &sum_accel, &err);
+
+ printf ("term-by-term sum = % .16f using %d terms\n",
+ sum, N);
+
+ printf ("term-by-term sum = % .16f using %d terms\n",
+ w->sum_plain, w->terms_used);
+
+ printf ("exact value = % .16f\n", zeta_2);
+ printf ("accelerated sum = % .16f using %d terms\n",
+ sum_accel, w->terms_used);
+
+ printf ("estimated error = % .16f\n", err);
+ printf ("actual error = % .16f\n",
+ sum_accel - zeta_2);
+
+ gsl_sum_levin_u_free (w);
+ return 0;
+ }
+
+The output below shows that the Levin u-transform is able to obtain an
+estimate of the sum to 1 part in 10^10 using the first eleven terms of
+the series. The error estimate returned by the function is also
+accurate, giving the correct number of significant digits.
+
+ $ ./a.out
+ term-by-term sum = 1.5961632439130233 using 20 terms
+ term-by-term sum = 1.5759958390005426 using 13 terms
+ exact value = 1.6449340668482264
+ accelerated sum = 1.6449340668166479 using 13 terms
+ estimated error = 0.0000000000508580
+ actual error = -0.0000000000315785
+
+Note that a direct summation of this series would require 10^10 terms
+to achieve the same precision as the accelerated sum does in 13 terms.
+
+
+File: gsl-ref.info, Node: Series Acceleration References, Prev: Example of accelerating a series, Up: Series Acceleration
+
+29.4 References and Further Reading
+===================================
+
+The algorithms used by these functions are described in the following
+papers,
+
+ T. Fessler, W.F. Ford, D.A. Smith, HURRY: An acceleration
+ algorithm for scalar sequences and series `ACM Transactions on
+ Mathematical Software', 9(3):346-354, 1983. and Algorithm 602
+ 9(3):355-357, 1983.
+
+The theory of the u-transform was presented by Levin,
+
+ D. Levin, Development of Non-Linear Transformations for Improving
+ Convergence of Sequences, `Intern. J. Computer Math.' B3:371-388,
+ 1973.
+
+A review paper on the Levin Transform is available online,
+ Herbert H. H. Homeier, Scalar Levin-Type Sequence Transformations,
+ `http://arxiv.org/abs/math/0005209'.
+
+
+File: gsl-ref.info, Node: Wavelet Transforms, Next: Discrete Hankel Transforms, Prev: Series Acceleration, Up: Top
+
+30 Wavelet Transforms
+*********************
+
+This chapter describes functions for performing Discrete Wavelet
+Transforms (DWTs). The library includes wavelets for real data in both
+one and two dimensions. The wavelet functions are declared in the
+header files `gsl_wavelet.h' and `gsl_wavelet2d.h'.
+
+* Menu:
+
+* DWT Definitions::
+* DWT Initialization::
+* DWT Transform Functions::
+* DWT Examples::
+* DWT References::
+
+
+File: gsl-ref.info, Node: DWT Definitions, Next: DWT Initialization, Up: Wavelet Transforms
+
+30.1 Definitions
+================
+
+The continuous wavelet transform and its inverse are defined by the
+relations,
+
+ w(s,\tau) = \int f(t) * \psi^*_{s,\tau}(t) dt
+
+and,
+
+ f(t) = \int \int_{-\infty}^\infty w(s, \tau) * \psi_{s,\tau}(t) d\tau ds
+
+where the basis functions \psi_{s,\tau} are obtained by scaling and
+translation from a single function, referred to as the "mother wavelet".
+
+ The discrete version of the wavelet transform acts on equally-spaced
+samples, with fixed scaling and translation steps (s, \tau). The
+frequency and time axes are sampled "dyadically" on scales of 2^j
+through a level parameter j. The resulting family of functions
+{\psi_{j,n}} constitutes an orthonormal basis for square-integrable
+signals.
+
+ The discrete wavelet transform is an O(N) algorithm, and is also
+referred to as the "fast wavelet transform".
+
+
+File: gsl-ref.info, Node: DWT Initialization, Next: DWT Transform Functions, Prev: DWT Definitions, Up: Wavelet Transforms
+
+30.2 Initialization
+===================
+
+The `gsl_wavelet' structure contains the filter coefficients defining
+the wavelet and any associated offset parameters.
+
+ -- Function: gsl_wavelet * gsl_wavelet_alloc (const gsl_wavelet_type *
+ T, size_t K)
+ This function allocates and initializes a wavelet object of type
+ T. The parameter K selects the specific member of the wavelet
+ family. A null pointer is returned if insufficient memory is
+ available or if a unsupported member is selected.
+
+ The following wavelet types are implemented:
+
+ -- Wavelet: gsl_wavelet_daubechies
+ -- Wavelet: gsl_wavelet_daubechies_centered
+ The is the Daubechies wavelet family of maximum phase with k/2
+ vanishing moments. The implemented wavelets are k=4, 6, ..., 20,
+ with K even.
+
+ -- Wavelet: gsl_wavelet_haar
+ -- Wavelet: gsl_wavelet_haar_centered
+ This is the Haar wavelet. The only valid choice of k for the Haar
+ wavelet is k=2.
+
+ -- Wavelet: gsl_wavelet_bspline
+ -- Wavelet: gsl_wavelet_bspline_centered
+ This is the biorthogonal B-spline wavelet family of order (i,j).
+ The implemented values of k = 100*i + j are 103, 105, 202, 204,
+ 206, 208, 301, 303, 305 307, 309.
+
+The centered forms of the wavelets align the coefficients of the various
+sub-bands on edges. Thus the resulting visualization of the
+coefficients of the wavelet transform in the phase plane is easier to
+understand.
+
+ -- Function: const char * gsl_wavelet_name (const gsl_wavelet * W)
+ This function returns a pointer to the name of the wavelet family
+ for W.
+
+ -- Function: void gsl_wavelet_free (gsl_wavelet * W)
+ This function frees the wavelet object W.
+
+ The `gsl_wavelet_workspace' structure contains scratch space of the
+same size as the input data and is used to hold intermediate results
+during the transform.
+
+ -- Function: gsl_wavelet_workspace * gsl_wavelet_workspace_alloc
+ (size_t N)
+ This function allocates a workspace for the discrete wavelet
+ transform. To perform a one-dimensional transform on N elements,
+ a workspace of size N must be provided. For two-dimensional
+ transforms of N-by-N matrices it is sufficient to allocate a
+ workspace of size N, since the transform operates on individual
+ rows and columns.
+
+ -- Function: void gsl_wavelet_workspace_free (gsl_wavelet_workspace *
+ WORK)
+ This function frees the allocated workspace WORK.
+
+
+File: gsl-ref.info, Node: DWT Transform Functions, Next: DWT Examples, Prev: DWT Initialization, Up: Wavelet Transforms
+
+30.3 Transform Functions
+========================
+
+This sections describes the actual functions performing the discrete
+wavelet transform. Note that the transforms use periodic boundary
+conditions. If the signal is not periodic in the sample length then
+spurious coefficients will appear at the beginning and end of each level
+of the transform.
+
+* Menu:
+
+* DWT in one dimension::
+* DWT in two dimension::
+
+
+File: gsl-ref.info, Node: DWT in one dimension, Next: DWT in two dimension, Up: DWT Transform Functions
+
+30.3.1 Wavelet transforms in one dimension
+------------------------------------------
+
+ -- Function: int gsl_wavelet_transform (const gsl_wavelet * W, double
+ * DATA, size_t STRIDE, size_t N, gsl_wavelet_direction DIR,
+ gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet_transform_forward (const gsl_wavelet * W,
+ double * DATA, size_t STRIDE, size_t N, gsl_wavelet_workspace
+ * WORK)
+ -- Function: int gsl_wavelet_transform_inverse (const gsl_wavelet * W,
+ double * DATA, size_t STRIDE, size_t N, gsl_wavelet_workspace
+ * WORK)
+ These functions compute in-place forward and inverse discrete
+ wavelet transforms of length N with stride STRIDE on the array
+ DATA. The length of the transform N is restricted to powers of
+ two. For the `transform' version of the function the argument DIR
+ can be either `forward' (+1) or `backward' (-1). A workspace WORK
+ of length N must be provided.
+
+ For the forward transform, the elements of the original array are
+ replaced by the discrete wavelet transform f_i -> w_{j,k} in a
+ packed triangular storage layout, where J is the index of the level
+ j = 0 ... J-1 and K is the index of the coefficient within each
+ level, k = 0 ... (2^j)-1. The total number of levels is J =
+ \log_2(n). The output data has the following form,
+
+ (s_{-1,0}, d_{0,0}, d_{1,0}, d_{1,1}, d_{2,0}, ...,
+ d_{j,k}, ..., d_{J-1,2^{J-1}-1})
+
+ where the first element is the smoothing coefficient s_{-1,0},
+ followed by the detail coefficients d_{j,k} for each level j. The
+ backward transform inverts these coefficients to obtain the
+ original data.
+
+ These functions return a status of `GSL_SUCCESS' upon successful
+ completion. `GSL_EINVAL' is returned if N is not an integer power
+ of 2 or if insufficient workspace is provided.
+
+
+File: gsl-ref.info, Node: DWT in two dimension, Prev: DWT in one dimension, Up: DWT Transform Functions
+
+30.3.2 Wavelet transforms in two dimension
+------------------------------------------
+
+The library provides functions to perform two-dimensional discrete
+wavelet transforms on square matrices. The matrix dimensions must be an
+integer power of two. There are two possible orderings of the rows and
+columns in the two-dimensional wavelet transform, referred to as the
+"standard" and "non-standard" forms.
+
+ The "standard" transform performs a complete discrete wavelet
+transform on the rows of the matrix, followed by a separate complete
+discrete wavelet transform on the columns of the resulting
+row-transformed matrix. This procedure uses the same ordering as a
+two-dimensional fourier transform.
+
+ The "non-standard" transform is performed in interleaved passes on
+the rows and columns of the matrix for each level of the transform. The
+first level of the transform is applied to the matrix rows, and then to
+the matrix columns. This procedure is then repeated across the rows and
+columns of the data for the subsequent levels of the transform, until
+the full discrete wavelet transform is complete. The non-standard form
+of the discrete wavelet transform is typically used in image analysis.
+
+ The functions described in this section are declared in the header
+file `gsl_wavelet2d.h'.
+
+ -- Function: int gsl_wavelet2d_transform (const gsl_wavelet * W,
+ double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2,
+ gsl_wavelet_direction DIR, gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_transform_forward (const gsl_wavelet *
+ W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2,
+ gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_transform_inverse (const gsl_wavelet *
+ W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2,
+ gsl_wavelet_workspace * WORK)
+ These functions compute two-dimensional in-place forward and
+ inverse discrete wavelet transforms in standard and non-standard
+ forms on the array DATA stored in row-major form with dimensions
+ SIZE1 and SIZE2 and physical row length TDA. The dimensions must
+ be equal (square matrix) and are restricted to powers of two. For
+ the `transform' version of the function the argument DIR can be
+ either `forward' (+1) or `backward' (-1). A workspace WORK of the
+ appropriate size must be provided. On exit, the appropriate
+ elements of the array DATA are replaced by their two-dimensional
+ wavelet transform.
+
+ The functions return a status of `GSL_SUCCESS' upon successful
+ completion. `GSL_EINVAL' is returned if SIZE1 and SIZE2 are not
+ equal and integer powers of 2, or if insufficient workspace is
+ provided.
+
+ -- Function: int gsl_wavelet2d_transform_matrix (const gsl_wavelet *
+ W, gsl_matrix * M, gsl_wavelet_direction DIR,
+ gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_transform_matrix_forward (const
+ gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_transform_matrix_inverse (const
+ gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK)
+ These functions compute the two-dimensional in-place wavelet
+ transform on a matrix A.
+
+ -- Function: int gsl_wavelet2d_nstransform (const gsl_wavelet * W,
+ double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2,
+ gsl_wavelet_direction DIR, gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_nstransform_forward (const gsl_wavelet
+ * W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2,
+ gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_nstransform_inverse (const gsl_wavelet
+ * W, double * DATA, size_t TDA, size_t SIZE1, size_t SIZE2,
+ gsl_wavelet_workspace * WORK)
+ These functions compute the two-dimensional wavelet transform in
+ non-standard form.
+
+ -- Function: int gsl_wavelet2d_nstransform_matrix (const gsl_wavelet *
+ W, gsl_matrix * M, gsl_wavelet_direction DIR,
+ gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_nstransform_matrix_forward (const
+ gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK)
+ -- Function: int gsl_wavelet2d_nstransform_matrix_inverse (const
+ gsl_wavelet * W, gsl_matrix * M, gsl_wavelet_workspace * WORK)
+ These functions compute the non-standard form of the
+ two-dimensional in-place wavelet transform on a matrix A.
+
+
+File: gsl-ref.info, Node: DWT Examples, Next: DWT References, Prev: DWT Transform Functions, Up: Wavelet Transforms
+
+30.4 Examples
+=============
+
+The following program demonstrates the use of the one-dimensional
+wavelet transform functions. It computes an approximation to an input
+signal (of length 256) using the 20 largest components of the wavelet
+transform, while setting the others to zero.
+
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_sort.h>
+ #include <gsl/gsl_wavelet.h>
+
+ int
+ main (int argc, char **argv)
+ {
+ int i, n = 256, nc = 20;
+ double *data = malloc (n * sizeof (double));
+ double *abscoeff = malloc (n * sizeof (double));
+ size_t *p = malloc (n * sizeof (size_t));
+
+ FILE * f;
+ gsl_wavelet *w;
+ gsl_wavelet_workspace *work;
+
+ w = gsl_wavelet_alloc (gsl_wavelet_daubechies, 4);
+ work = gsl_wavelet_workspace_alloc (n);
+
+ f = fopen (argv[1], "r");
+ for (i = 0; i < n; i++)
+ {
+ fscanf (f, "%lg", &data[i]);
+ }
+ fclose (f);
+
+ gsl_wavelet_transform_forward (w, data, 1, n, work);
+
+ for (i = 0; i < n; i++)
+ {
+ abscoeff[i] = fabs (data[i]);
+ }
+
+ gsl_sort_index (p, abscoeff, 1, n);
+
+ for (i = 0; (i + nc) < n; i++)
+ data[p[i]] = 0;
+
+ gsl_wavelet_transform_inverse (w, data, 1, n, work);
+
+ for (i = 0; i < n; i++)
+ {
+ printf ("%g\n", data[i]);
+ }
+
+ gsl_wavelet_free (w);
+ gsl_wavelet_workspace_free (work);
+
+ free (data);
+ free (abscoeff);
+ free (p);
+ return 0;
+ }
+
+The output can be used with the GNU plotutils `graph' program,
+
+ $ ./a.out ecg.dat > dwt.dat
+ $ graph -T ps -x 0 256 32 -h 0.3 -a dwt.dat > dwt.ps
+
+
+File: gsl-ref.info, Node: DWT References, Prev: DWT Examples, Up: Wavelet Transforms
+
+30.5 References and Further Reading
+===================================
+
+The mathematical background to wavelet transforms is covered in the
+original lectures by Daubechies,
+
+ Ingrid Daubechies. Ten Lectures on Wavelets. `CBMS-NSF Regional
+ Conference Series in Applied Mathematics' (1992), SIAM, ISBN
+ 0898712742.
+
+An easy to read introduction to the subject with an emphasis on the
+application of the wavelet transform in various branches of science is,
+
+ Paul S. Addison. `The Illustrated Wavelet Transform Handbook'.
+ Institute of Physics Publishing (2002), ISBN 0750306920.
+
+For extensive coverage of signal analysis by wavelets, wavelet packets
+and local cosine bases see,
+
+ S. G. Mallat. `A wavelet tour of signal processing' (Second
+ edition). Academic Press (1999), ISBN 012466606X.
+
+The concept of multiresolution analysis underlying the wavelet transform
+is described in,
+
+ S. G. Mallat. Multiresolution Approximations and Wavelet
+ Orthonormal Bases of L^2(R). `Transactions of the American
+ Mathematical Society', 315(1), 1989, 69-87.
+
+ S. G. Mallat. A Theory for Multiresolution Signal
+ Decomposition--The Wavelet Representation. `IEEE Transactions on
+ Pattern Analysis and Machine Intelligence', 11, 1989, 674-693.
+
+The coefficients for the individual wavelet families implemented by the
+library can be found in the following papers,
+
+ I. Daubechies. Orthonormal Bases of Compactly Supported Wavelets.
+ `Communications on Pure and Applied Mathematics', 41 (1988)
+ 909-996.
+
+ A. Cohen, I. Daubechies, and J.-C. Feauveau. Biorthogonal Bases
+ of Compactly Supported Wavelets. `Communications on Pure and
+ Applied Mathematics', 45 (1992) 485-560.
+
+The PhysioNet archive of physiological datasets can be found online at
+`http://www.physionet.org/' and is described in the following paper,
+
+ Goldberger et al. PhysioBank, PhysioToolkit, and PhysioNet:
+ Components of a New Research Resource for Complex Physiologic
+ Signals. `Circulation' 101(23):e215-e220 2000.
+
+
+File: gsl-ref.info, Node: Discrete Hankel Transforms, Next: One dimensional Root-Finding, Prev: Wavelet Transforms, Up: Top
+
+31 Discrete Hankel Transforms
+*****************************
+
+This chapter describes functions for performing Discrete Hankel
+Transforms (DHTs). The functions are declared in the header file
+`gsl_dht.h'.
+
+* Menu:
+
+* Discrete Hankel Transform Definition::
+* Discrete Hankel Transform Functions::
+* Discrete Hankel Transform References::
+
+
+File: gsl-ref.info, Node: Discrete Hankel Transform Definition, Next: Discrete Hankel Transform Functions, Up: Discrete Hankel Transforms
+
+31.1 Definitions
+================
+
+The discrete Hankel transform acts on a vector of sampled data, where
+the samples are assumed to have been taken at points related to the
+zeroes of a Bessel function of fixed order; compare this to the case of
+the discrete Fourier transform, where samples are taken at points
+related to the zeroes of the sine or cosine function.
+
+ Specifically, let f(t) be a function on the unit interval. Then the
+finite \nu-Hankel transform of f(t) is defined to be the set of numbers
+g_m given by,
+ g_m = \int_0^1 t dt J_\nu(j_(\nu,m)t) f(t),
+
+so that,
+ f(t) = \sum_{m=1}^\infty (2 J_\nu(j_(\nu,m)x) / J_(\nu+1)(j_(\nu,m))^2) g_m.
+
+Suppose that f is band-limited in the sense that g_m=0 for m > M. Then
+we have the following fundamental sampling theorem.
+ g_m = (2 / j_(\nu,M)^2)
+ \sum_{k=1}^{M-1} f(j_(\nu,k)/j_(\nu,M))
+ (J_\nu(j_(\nu,m) j_(\nu,k) / j_(\nu,M)) / J_(\nu+1)(j_(\nu,k))^2).
+
+It is this discrete expression which defines the discrete Hankel
+transform. The kernel in the summation above defines the matrix of the
+\nu-Hankel transform of size M-1. The coefficients of this matrix,
+being dependent on \nu and M, must be precomputed and stored; the
+`gsl_dht' object encapsulates this data. The allocation function
+`gsl_dht_alloc' returns a `gsl_dht' object which must be properly
+initialized with `gsl_dht_init' before it can be used to perform
+transforms on data sample vectors, for fixed \nu and M, using the
+`gsl_dht_apply' function. The implementation allows a scaling of the
+fundamental interval, for convenience, so that one can assume the
+function is defined on the interval [0,X], rather than the unit
+interval.
+
+ Notice that by assumption f(t) vanishes at the endpoints of the
+interval, consistent with the inversion formula and the sampling
+formula given above. Therefore, this transform corresponds to an
+orthogonal expansion in eigenfunctions of the Dirichlet problem for the
+Bessel differential equation.
+
+
+File: gsl-ref.info, Node: Discrete Hankel Transform Functions, Next: Discrete Hankel Transform References, Prev: Discrete Hankel Transform Definition, Up: Discrete Hankel Transforms
+
+31.2 Functions
+==============
+
+ -- Function: gsl_dht * gsl_dht_alloc (size_t SIZE)
+ This function allocates a Discrete Hankel transform object of size
+ SIZE.
+
+ -- Function: int gsl_dht_init (gsl_dht * T, double NU, double XMAX)
+ This function initializes the transform T for the given values of
+ NU and X.
+
+ -- Function: gsl_dht * gsl_dht_new (size_t SIZE, double NU, double
+ XMAX)
+ This function allocates a Discrete Hankel transform object of size
+ SIZE and initializes it for the given values of NU and X.
+
+ -- Function: void gsl_dht_free (gsl_dht * T)
+ This function frees the transform T.
+
+ -- Function: int gsl_dht_apply (const gsl_dht * T, double * F_IN,
+ double * F_OUT)
+ This function applies the transform T to the array F_IN whose size
+ is equal to the size of the transform. The result is stored in
+ the array F_OUT which must be of the same length.
+
+ -- Function: double gsl_dht_x_sample (const gsl_dht * T, int N)
+ This function returns the value of the N-th sample point in the
+ unit interval, (j_{\nu,n+1}/j_{\nu,M}) X. These are the points
+ where the function f(t) is assumed to be sampled.
+
+ -- Function: double gsl_dht_k_sample (const gsl_dht * T, int N)
+ This function returns the value of the N-th sample point in
+ "k-space", j_{\nu,n+1}/X.
+
+
+File: gsl-ref.info, Node: Discrete Hankel Transform References, Prev: Discrete Hankel Transform Functions, Up: Discrete Hankel Transforms
+
+31.3 References and Further Reading
+===================================
+
+The algorithms used by these functions are described in the following
+papers,
+
+ H. Fisk Johnson, Comp. Phys. Comm. 43, 181 (1987).
+
+ D. Lemoine, J. Chem. Phys. 101, 3936 (1994).
+
+
+File: gsl-ref.info, Node: One dimensional Root-Finding, Next: One dimensional Minimization, Prev: Discrete Hankel Transforms, Up: Top
+
+32 One dimensional Root-Finding
+*******************************
+
+This chapter describes routines for finding roots of arbitrary
+one-dimensional functions. The library provides low level components
+for a variety of iterative solvers and convergence tests. These can be
+combined by the user to achieve the desired solution, with full access
+to the intermediate steps of the iteration. Each class of methods uses
+the same framework, so that you can switch between solvers at runtime
+without needing to recompile your program. Each instance of a solver
+keeps track of its own state, allowing the solvers to be used in
+multi-threaded programs.
+
+ The header file `gsl_roots.h' contains prototypes for the root
+finding functions and related declarations.
+
+* Menu:
+
+* Root Finding Overview::
+* Root Finding Caveats::
+* Initializing the Solver::
+* Providing the function to solve::
+* Search Bounds and Guesses::
+* Root Finding Iteration::
+* Search Stopping Parameters::
+* Root Bracketing Algorithms::
+* Root Finding Algorithms using Derivatives::
+* Root Finding Examples::
+* Root Finding References and Further Reading::
+
+
+File: gsl-ref.info, Node: Root Finding Overview, Next: Root Finding Caveats, Up: One dimensional Root-Finding
+
+32.1 Overview
+=============
+
+One-dimensional root finding algorithms can be divided into two classes,
+"root bracketing" and "root polishing". Algorithms which proceed by
+bracketing a root are guaranteed to converge. Bracketing algorithms
+begin with a bounded region known to contain a root. The size of this
+bounded region is reduced, iteratively, until it encloses the root to a
+desired tolerance. This provides a rigorous error estimate for the
+location of the root.
+
+ The technique of "root polishing" attempts to improve an initial
+guess to the root. These algorithms converge only if started "close
+enough" to a root, and sacrifice a rigorous error bound for speed. By
+approximating the behavior of a function in the vicinity of a root they
+attempt to find a higher order improvement of an initial guess. When
+the behavior of the function is compatible with the algorithm and a good
+initial guess is available a polishing algorithm can provide rapid
+convergence.
+
+ In GSL both types of algorithm are available in similar frameworks.
+The user provides a high-level driver for the algorithms, and the
+library provides the individual functions necessary for each of the
+steps. There are three main phases of the iteration. The steps are,
+
+ * initialize solver state, S, for algorithm T
+
+ * update S using the iteration T
+
+ * test S for convergence, and repeat iteration if necessary
+
+The state for bracketing solvers is held in a `gsl_root_fsolver'
+struct. The updating procedure uses only function evaluations (not
+derivatives). The state for root polishing solvers is held in a
+`gsl_root_fdfsolver' struct. The updates require both the function and
+its derivative (hence the name `fdf') to be supplied by the user.
+
+
+File: gsl-ref.info, Node: Root Finding Caveats, Next: Initializing the Solver, Prev: Root Finding Overview, Up: One dimensional Root-Finding
+
+32.2 Caveats
+============
+
+Note that root finding functions can only search for one root at a time.
+When there are several roots in the search area, the first root to be
+found will be returned; however it is difficult to predict which of the
+roots this will be. _In most cases, no error will be reported if you
+try to find a root in an area where there is more than one._
+
+ Care must be taken when a function may have a multiple root (such as
+f(x) = (x-x_0)^2 or f(x) = (x-x_0)^3). It is not possible to use
+root-bracketing algorithms on even-multiplicity roots. For these
+algorithms the initial interval must contain a zero-crossing, where the
+function is negative at one end of the interval and positive at the
+other end. Roots with even-multiplicity do not cross zero, but only
+touch it instantaneously. Algorithms based on root bracketing will
+still work for odd-multiplicity roots (e.g. cubic, quintic, ...). Root
+polishing algorithms generally work with higher multiplicity roots, but
+at a reduced rate of convergence. In these cases the "Steffenson
+algorithm" can be used to accelerate the convergence of multiple roots.
+
+ While it is not absolutely required that f have a root within the
+search region, numerical root finding functions should not be used
+haphazardly to check for the _existence_ of roots. There are better
+ways to do this. Because it is easy to create situations where
+numerical root finders can fail, it is a bad idea to throw a root
+finder at a function you do not know much about. In general it is best
+to examine the function visually by plotting before searching for a
+root.
+
+
+File: gsl-ref.info, Node: Initializing the Solver, Next: Providing the function to solve, Prev: Root Finding Caveats, Up: One dimensional Root-Finding
+
+32.3 Initializing the Solver
+============================
+
+ -- Function: gsl_root_fsolver * gsl_root_fsolver_alloc (const
+ gsl_root_fsolver_type * T)
+ This function returns a pointer to a newly allocated instance of a
+ solver of type T. For example, the following code creates an
+ instance of a bisection solver,
+
+ const gsl_root_fsolver_type * T
+ = gsl_root_fsolver_bisection;
+ gsl_root_fsolver * s
+ = gsl_root_fsolver_alloc (T);
+
+ If there is insufficient memory to create the solver then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: gsl_root_fdfsolver * gsl_root_fdfsolver_alloc (const
+ gsl_root_fdfsolver_type * T)
+ This function returns a pointer to a newly allocated instance of a
+ derivative-based solver of type T. For example, the following
+ code creates an instance of a Newton-Raphson solver,
+
+ const gsl_root_fdfsolver_type * T
+ = gsl_root_fdfsolver_newton;
+ gsl_root_fdfsolver * s
+ = gsl_root_fdfsolver_alloc (T);
+
+ If there is insufficient memory to create the solver then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_root_fsolver_set (gsl_root_fsolver * S,
+ gsl_function * F, double X_LOWER, double X_UPPER)
+ This function initializes, or reinitializes, an existing solver S
+ to use the function F and the initial search interval [X_LOWER,
+ X_UPPER].
+
+ -- Function: int gsl_root_fdfsolver_set (gsl_root_fdfsolver * S,
+ gsl_function_fdf * FDF, double ROOT)
+ This function initializes, or reinitializes, an existing solver S
+ to use the function and derivative FDF and the initial guess ROOT.
+
+ -- Function: void gsl_root_fsolver_free (gsl_root_fsolver * S)
+ -- Function: void gsl_root_fdfsolver_free (gsl_root_fdfsolver * S)
+ These functions free all the memory associated with the solver S.
+
+ -- Function: const char * gsl_root_fsolver_name (const
+ gsl_root_fsolver * S)
+ -- Function: const char * gsl_root_fdfsolver_name (const
+ gsl_root_fdfsolver * S)
+ These functions return a pointer to the name of the solver. For
+ example,
+
+ printf ("s is a '%s' solver\n",
+ gsl_root_fsolver_name (s));
+
+ would print something like `s is a 'bisection' solver'.
+
+
+File: gsl-ref.info, Node: Providing the function to solve, Next: Search Bounds and Guesses, Prev: Initializing the Solver, Up: One dimensional Root-Finding
+
+32.4 Providing the function to solve
+====================================
+
+You must provide a continuous function of one variable for the root
+finders to operate on, and, sometimes, its first derivative. In order
+to allow for general parameters the functions are defined by the
+following data types:
+
+ -- Data Type: gsl_function
+ This data type defines a general function with parameters.
+
+ `double (* function) (double X, void * PARAMS)'
+ this function should return the value f(x,params) for
+ argument X and parameters PARAMS
+
+ `void * params'
+ a pointer to the parameters of the function
+
+ Here is an example for the general quadratic function,
+
+ f(x) = a x^2 + b x + c
+
+with a = 3, b = 2, c = 1. The following code defines a `gsl_function'
+`F' which you could pass to a root finder:
+
+ struct my_f_params { double a; double b; double c; };
+
+ double
+ my_f (double x, void * p) {
+ struct my_f_params * params
+ = (struct my_f_params *)p;
+ double a = (params->a);
+ double b = (params->b);
+ double c = (params->c);
+
+ return (a * x + b) * x + c;
+ }
+
+ gsl_function F;
+ struct my_f_params params = { 3.0, 2.0, 1.0 };
+
+ F.function = &my_f;
+ F.params = &params;
+
+The function f(x) can be evaluated using the following macro,
+
+ #define GSL_FN_EVAL(F,x)
+ (*((F)->function))(x,(F)->params)
+
+ -- Data Type: gsl_function_fdf
+ This data type defines a general function with parameters and its
+ first derivative.
+
+ `double (* f) (double X, void * PARAMS)'
+ this function should return the value of f(x,params) for
+ argument X and parameters PARAMS
+
+ `double (* df) (double X, void * PARAMS)'
+ this function should return the value of the derivative of F
+ with respect to X, f'(x,params), for argument X and
+ parameters PARAMS
+
+ `void (* fdf) (double X, void * PARAMS, double * F, double * Df)'
+ this function should set the values of the function F to
+ f(x,params) and its derivative DF to f'(x,params) for
+ argument X and parameters PARAMS. This function provides an
+ optimization of the separate functions for f(x) and f'(x)--it
+ is always faster to compute the function and its derivative
+ at the same time.
+
+ `void * params'
+ a pointer to the parameters of the function
+
+ Here is an example where f(x) = 2\exp(2x):
+
+ double
+ my_f (double x, void * params)
+ {
+ return exp (2 * x);
+ }
+
+ double
+ my_df (double x, void * params)
+ {
+ return 2 * exp (2 * x);
+ }
+
+ void
+ my_fdf (double x, void * params,
+ double * f, double * df)
+ {
+ double t = exp (2 * x);
+
+ *f = t;
+ *df = 2 * t; /* uses existing value */
+ }
+
+ gsl_function_fdf FDF;
+
+ FDF.f = &my_f;
+ FDF.df = &my_df;
+ FDF.fdf = &my_fdf;
+ FDF.params = 0;
+
+The function f(x) can be evaluated using the following macro,
+
+ #define GSL_FN_FDF_EVAL_F(FDF,x)
+ (*((FDF)->f))(x,(FDF)->params)
+
+The derivative f'(x) can be evaluated using the following macro,
+
+ #define GSL_FN_FDF_EVAL_DF(FDF,x)
+ (*((FDF)->df))(x,(FDF)->params)
+
+and both the function y = f(x) and its derivative dy = f'(x) can be
+evaluated at the same time using the following macro,
+
+ #define GSL_FN_FDF_EVAL_F_DF(FDF,x,y,dy)
+ (*((FDF)->fdf))(x,(FDF)->params,(y),(dy))
+
+The macro stores f(x) in its Y argument and f'(x) in its DY
+argument--both of these should be pointers to `double'.
+
+
+File: gsl-ref.info, Node: Search Bounds and Guesses, Next: Root Finding Iteration, Prev: Providing the function to solve, Up: One dimensional Root-Finding
+
+32.5 Search Bounds and Guesses
+==============================
+
+You provide either search bounds or an initial guess; this section
+explains how search bounds and guesses work and how function arguments
+control them.
+
+ A guess is simply an x value which is iterated until it is within
+the desired precision of a root. It takes the form of a `double'.
+
+ Search bounds are the endpoints of a interval which is iterated until
+the length of the interval is smaller than the requested precision. The
+interval is defined by two values, the lower limit and the upper limit.
+Whether the endpoints are intended to be included in the interval or not
+depends on the context in which the interval is used.
+
+
+File: gsl-ref.info, Node: Root Finding Iteration, Next: Search Stopping Parameters, Prev: Search Bounds and Guesses, Up: One dimensional Root-Finding
+
+32.6 Iteration
+==============
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any solver of the
+corresponding type. The same functions work for all solvers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+ -- Function: int gsl_root_fsolver_iterate (gsl_root_fsolver * S)
+ -- Function: int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver * S)
+ These functions perform a single iteration of the solver S. If the
+ iteration encounters an unexpected problem then an error code will
+ be returned,
+
+ `GSL_EBADFUNC'
+ the iteration encountered a singular point where the function
+ or its derivative evaluated to `Inf' or `NaN'.
+
+ `GSL_EZERODIV'
+ the derivative of the function vanished at the iteration
+ point, preventing the algorithm from continuing without a
+ division by zero.
+
+ The solver maintains a current best estimate of the root at all
+times. The bracketing solvers also keep track of the current best
+interval bounding the root. This information can be accessed with the
+following auxiliary functions,
+
+ -- Function: double gsl_root_fsolver_root (const gsl_root_fsolver * S)
+ -- Function: double gsl_root_fdfsolver_root (const gsl_root_fdfsolver
+ * S)
+ These functions return the current estimate of the root for the
+ solver S.
+
+ -- Function: double gsl_root_fsolver_x_lower (const gsl_root_fsolver *
+ S)
+ -- Function: double gsl_root_fsolver_x_upper (const gsl_root_fsolver *
+ S)
+ These functions return the current bracketing interval for the
+ solver S.
+
+
+File: gsl-ref.info, Node: Search Stopping Parameters, Next: Root Bracketing Algorithms, Prev: Root Finding Iteration, Up: One dimensional Root-Finding
+
+32.7 Search Stopping Parameters
+===============================
+
+A root finding procedure should stop when one of the following
+conditions is true:
+
+ * A root has been found to within the user-specified precision.
+
+ * A user-specified maximum number of iterations has been reached.
+
+ * An error has occurred.
+
+The handling of these conditions is under user control. The functions
+below allow the user to test the precision of the current result in
+several standard ways.
+
+ -- Function: int gsl_root_test_interval (double X_LOWER, double
+ X_UPPER, double EPSABS, double EPSREL)
+ This function tests for the convergence of the interval [X_LOWER,
+ X_UPPER] with absolute error EPSABS and relative error EPSREL.
+ The test returns `GSL_SUCCESS' if the following condition is
+ achieved,
+
+ |a - b| < epsabs + epsrel min(|a|,|b|)
+
+ when the interval x = [a,b] does not include the origin. If the
+ interval includes the origin then \min(|a|,|b|) is replaced by
+ zero (which is the minimum value of |x| over the interval). This
+ ensures that the relative error is accurately estimated for roots
+ close to the origin.
+
+ This condition on the interval also implies that any estimate of
+ the root r in the interval satisfies the same condition with
+ respect to the true root r^*,
+
+ |r - r^*| < epsabs + epsrel r^*
+
+ assuming that the true root r^* is contained within the interval.
+
+ -- Function: int gsl_root_test_delta (double X1, double X0, double
+ EPSABS, double EPSREL)
+ This function tests for the convergence of the sequence ..., X0,
+ X1 with absolute error EPSABS and relative error EPSREL. The test
+ returns `GSL_SUCCESS' if the following condition is achieved,
+
+ |x_1 - x_0| < epsabs + epsrel |x_1|
+
+ and returns `GSL_CONTINUE' otherwise.
+
+ -- Function: int gsl_root_test_residual (double F, double EPSABS)
+ This function tests the residual value F against the absolute
+ error bound EPSABS. The test returns `GSL_SUCCESS' if the
+ following condition is achieved,
+
+ |f| < epsabs
+
+ and returns `GSL_CONTINUE' otherwise. This criterion is suitable
+ for situations where the precise location of the root, x, is
+ unimportant provided a value can be found where the residual,
+ |f(x)|, is small enough.
+
+
+File: gsl-ref.info, Node: Root Bracketing Algorithms, Next: Root Finding Algorithms using Derivatives, Prev: Search Stopping Parameters, Up: One dimensional Root-Finding
+
+32.8 Root Bracketing Algorithms
+===============================
+
+The root bracketing algorithms described in this section require an
+initial interval which is guaranteed to contain a root--if a and b are
+the endpoints of the interval then f(a) must differ in sign from f(b).
+This ensures that the function crosses zero at least once in the
+interval. If a valid initial interval is used then these algorithm
+cannot fail, provided the function is well-behaved.
+
+ Note that a bracketing algorithm cannot find roots of even degree,
+since these do not cross the x-axis.
+
+ -- Solver: gsl_root_fsolver_bisection
+ The "bisection algorithm" is the simplest method of bracketing the
+ roots of a function. It is the slowest algorithm provided by the
+ library, with linear convergence.
+
+ On each iteration, the interval is bisected and the value of the
+ function at the midpoint is calculated. The sign of this value is
+ used to determine which half of the interval does not contain a
+ root. That half is discarded to give a new, smaller interval
+ containing the root. This procedure can be continued indefinitely
+ until the interval is sufficiently small.
+
+ At any time the current estimate of the root is taken as the
+ midpoint of the interval.
+
+
+ -- Solver: gsl_root_fsolver_falsepos
+ The "false position algorithm" is a method of finding roots based
+ on linear interpolation. Its convergence is linear, but it is
+ usually faster than bisection.
+
+ On each iteration a line is drawn between the endpoints (a,f(a))
+ and (b,f(b)) and the point where this line crosses the x-axis
+ taken as a "midpoint". The value of the function at this point is
+ calculated and its sign is used to determine which side of the
+ interval does not contain a root. That side is discarded to give a
+ new, smaller interval containing the root. This procedure can be
+ continued indefinitely until the interval is sufficiently small.
+
+ The best estimate of the root is taken from the linear
+ interpolation of the interval on the current iteration.
+
+
+ -- Solver: gsl_root_fsolver_brent
+ The "Brent-Dekker method" (referred to here as "Brent's method")
+ combines an interpolation strategy with the bisection algorithm.
+ This produces a fast algorithm which is still robust.
+
+ On each iteration Brent's method approximates the function using an
+ interpolating curve. On the first iteration this is a linear
+ interpolation of the two endpoints. For subsequent iterations the
+ algorithm uses an inverse quadratic fit to the last three points,
+ for higher accuracy. The intercept of the interpolating curve
+ with the x-axis is taken as a guess for the root. If it lies
+ within the bounds of the current interval then the interpolating
+ point is accepted, and used to generate a smaller interval. If
+ the interpolating point is not accepted then the algorithm falls
+ back to an ordinary bisection step.
+
+ The best estimate of the root is taken from the most recent
+ interpolation or bisection.
+
+
+File: gsl-ref.info, Node: Root Finding Algorithms using Derivatives, Next: Root Finding Examples, Prev: Root Bracketing Algorithms, Up: One dimensional Root-Finding
+
+32.9 Root Finding Algorithms using Derivatives
+==============================================
+
+The root polishing algorithms described in this section require an
+initial guess for the location of the root. There is no absolute
+guarantee of convergence--the function must be suitable for this
+technique and the initial guess must be sufficiently close to the root
+for it to work. When these conditions are satisfied then convergence is
+quadratic.
+
+ These algorithms make use of both the function and its derivative.
+
+ -- Derivative Solver: gsl_root_fdfsolver_newton
+ Newton's Method is the standard root-polishing algorithm. The
+ algorithm begins with an initial guess for the location of the
+ root. On each iteration, a line tangent to the function f is
+ drawn at that position. The point where this line crosses the
+ x-axis becomes the new guess. The iteration is defined by the
+ following sequence,
+
+ x_{i+1} = x_i - f(x_i)/f'(x_i)
+
+ Newton's method converges quadratically for single roots, and
+ linearly for multiple roots.
+
+
+ -- Derivative Solver: gsl_root_fdfsolver_secant
+ The "secant method" is a simplified version of Newton's method
+ which does not require the computation of the derivative on every
+ step.
+
+ On its first iteration the algorithm begins with Newton's method,
+ using the derivative to compute a first step,
+
+ x_1 = x_0 - f(x_0)/f'(x_0)
+
+ Subsequent iterations avoid the evaluation of the derivative by
+ replacing it with a numerical estimate, the slope of the line
+ through the previous two points,
+
+ x_{i+1} = x_i f(x_i) / f'_{est} where
+ f'_{est} = (f(x_i) - f(x_{i-1})/(x_i - x_{i-1})
+
+ When the derivative does not change significantly in the vicinity
+ of the root the secant method gives a useful saving.
+ Asymptotically the secant method is faster than Newton's method
+ whenever the cost of evaluating the derivative is more than 0.44
+ times the cost of evaluating the function itself. As with all
+ methods of computing a numerical derivative the estimate can
+ suffer from cancellation errors if the separation of the points
+ becomes too small.
+
+ On single roots, the method has a convergence of order (1 + \sqrt
+ 5)/2 (approximately 1.62). It converges linearly for multiple
+ roots.
+
+
+ -- Derivative Solver: gsl_root_fdfsolver_steffenson
+ The "Steffenson Method" provides the fastest convergence of all the
+ routines. It combines the basic Newton algorithm with an Aitken
+ "delta-squared" acceleration. If the Newton iterates are x_i then
+ the acceleration procedure generates a new sequence R_i,
+
+ R_i = x_i - (x_{i+1} - x_i)^2 / (x_{i+2} - 2 x_{i+1} + x_{i})
+
+ which converges faster than the original sequence under reasonable
+ conditions. The new sequence requires three terms before it can
+ produce its first value so the method returns accelerated values
+ on the second and subsequent iterations. On the first iteration
+ it returns the ordinary Newton estimate. The Newton iterate is
+ also returned if the denominator of the acceleration term ever
+ becomes zero.
+
+ As with all acceleration procedures this method can become
+ unstable if the function is not well-behaved.
+
+
+File: gsl-ref.info, Node: Root Finding Examples, Next: Root Finding References and Further Reading, Prev: Root Finding Algorithms using Derivatives, Up: One dimensional Root-Finding
+
+32.10 Examples
+==============
+
+For any root finding algorithm we need to prepare the function to be
+solved. For this example we will use the general quadratic equation
+described earlier. We first need a header file (`demo_fn.h') to define
+the function parameters,
+
+ struct quadratic_params
+ {
+ double a, b, c;
+ };
+
+ double quadratic (double x, void *params);
+ double quadratic_deriv (double x, void *params);
+ void quadratic_fdf (double x, void *params,
+ double *y, double *dy);
+
+We place the function definitions in a separate file (`demo_fn.c'),
+
+ double
+ quadratic (double x, void *params)
+ {
+ struct quadratic_params *p
+ = (struct quadratic_params *) params;
+
+ double a = p->a;
+ double b = p->b;
+ double c = p->c;
+
+ return (a * x + b) * x + c;
+ }
+
+ double
+ quadratic_deriv (double x, void *params)
+ {
+ struct quadratic_params *p
+ = (struct quadratic_params *) params;
+
+ double a = p->a;
+ double b = p->b;
+ double c = p->c;
+
+ return 2.0 * a * x + b;
+ }
+
+ void
+ quadratic_fdf (double x, void *params,
+ double *y, double *dy)
+ {
+ struct quadratic_params *p
+ = (struct quadratic_params *) params;
+
+ double a = p->a;
+ double b = p->b;
+ double c = p->c;
+
+ *y = (a * x + b) * x + c;
+ *dy = 2.0 * a * x + b;
+ }
+
+The first program uses the function solver `gsl_root_fsolver_brent' for
+Brent's method and the general quadratic defined above to solve the
+following equation,
+
+ x^2 - 5 = 0
+
+with solution x = \sqrt 5 = 2.236068...
+
+ #include <stdio.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_roots.h>
+
+ #include "demo_fn.h"
+ #include "demo_fn.c"
+
+ int
+ main (void)
+ {
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_root_fsolver_type *T;
+ gsl_root_fsolver *s;
+ double r = 0, r_expected = sqrt (5.0);
+ double x_lo = 0.0, x_hi = 5.0;
+ gsl_function F;
+ struct quadratic_params params = {1.0, 0.0, -5.0};
+
+ F.function = &quadratic;
+ F.params = &params;
+
+ T = gsl_root_fsolver_brent;
+ s = gsl_root_fsolver_alloc (T);
+ gsl_root_fsolver_set (s, &F, x_lo, x_hi);
+
+ printf ("using %s method\n",
+ gsl_root_fsolver_name (s));
+
+ printf ("%5s [%9s, %9s] %9s %10s %9s\n",
+ "iter", "lower", "upper", "root",
+ "err", "err(est)");
+
+ do
+ {
+ iter++;
+ status = gsl_root_fsolver_iterate (s);
+ r = gsl_root_fsolver_root (s);
+ x_lo = gsl_root_fsolver_x_lower (s);
+ x_hi = gsl_root_fsolver_x_upper (s);
+ status = gsl_root_test_interval (x_lo, x_hi,
+ 0, 0.001);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
+ iter, x_lo, x_hi,
+ r, r - r_expected,
+ x_hi - x_lo);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_root_fsolver_free (s);
+
+ return status;
+ }
+
+Here are the results of the iterations,
+
+ $ ./a.out
+ using brent method
+ iter [ lower, upper] root err err(est)
+ 1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000
+ 2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000
+ 3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000
+ 4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000
+ 5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300
+ Converged:
+ 6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666
+
+If the program is modified to use the bisection solver instead of
+Brent's method, by changing `gsl_root_fsolver_brent' to
+`gsl_root_fsolver_bisection' the slower convergence of the Bisection
+method can be observed,
+
+ $ ./a.out
+ using bisection method
+ iter [ lower, upper] root err err(est)
+ 1 [0.0000000, 2.5000000] 1.2500000 -0.9860680 2.5000000
+ 2 [1.2500000, 2.5000000] 1.8750000 -0.3610680 1.2500000
+ 3 [1.8750000, 2.5000000] 2.1875000 -0.0485680 0.6250000
+ 4 [2.1875000, 2.5000000] 2.3437500 +0.1076820 0.3125000
+ 5 [2.1875000, 2.3437500] 2.2656250 +0.0295570 0.1562500
+ 6 [2.1875000, 2.2656250] 2.2265625 -0.0095055 0.0781250
+ 7 [2.2265625, 2.2656250] 2.2460938 +0.0100258 0.0390625
+ 8 [2.2265625, 2.2460938] 2.2363281 +0.0002601 0.0195312
+ 9 [2.2265625, 2.2363281] 2.2314453 -0.0046227 0.0097656
+ 10 [2.2314453, 2.2363281] 2.2338867 -0.0021813 0.0048828
+ 11 [2.2338867, 2.2363281] 2.2351074 -0.0009606 0.0024414
+ Converged:
+ 12 [2.2351074, 2.2363281] 2.2357178 -0.0003502 0.0012207
+
+ The next program solves the same function using a derivative solver
+instead.
+
+ #include <stdio.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_roots.h>
+
+ #include "demo_fn.h"
+ #include "demo_fn.c"
+
+ int
+ main (void)
+ {
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_root_fdfsolver_type *T;
+ gsl_root_fdfsolver *s;
+ double x0, x = 5.0, r_expected = sqrt (5.0);
+ gsl_function_fdf FDF;
+ struct quadratic_params params = {1.0, 0.0, -5.0};
+
+ FDF.f = &quadratic;
+ FDF.df = &quadratic_deriv;
+ FDF.fdf = &quadratic_fdf;
+ FDF.params = &params;
+
+ T = gsl_root_fdfsolver_newton;
+ s = gsl_root_fdfsolver_alloc (T);
+ gsl_root_fdfsolver_set (s, &FDF, x);
+
+ printf ("using %s method\n",
+ gsl_root_fdfsolver_name (s));
+
+ printf ("%-5s %10s %10s %10s\n",
+ "iter", "root", "err", "err(est)");
+ do
+ {
+ iter++;
+ status = gsl_root_fdfsolver_iterate (s);
+ x0 = x;
+ x = gsl_root_fdfsolver_root (s);
+ status = gsl_root_test_delta (x, x0, 0, 1e-3);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d %10.7f %+10.7f %10.7f\n",
+ iter, x, x - r_expected, x - x0);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_root_fdfsolver_free (s);
+ return status;
+ }
+
+Here are the results for Newton's method,
+
+ $ ./a.out
+ using newton method
+ iter root err err(est)
+ 1 3.0000000 +0.7639320 -2.0000000
+ 2 2.3333333 +0.0972654 -0.6666667
+ 3 2.2380952 +0.0020273 -0.0952381
+ Converged:
+ 4 2.2360689 +0.0000009 -0.0020263
+
+Note that the error can be estimated more accurately by taking the
+difference between the current iterate and next iterate rather than the
+previous iterate. The other derivative solvers can be investigated by
+changing `gsl_root_fdfsolver_newton' to `gsl_root_fdfsolver_secant' or
+`gsl_root_fdfsolver_steffenson'.
+
+
+File: gsl-ref.info, Node: Root Finding References and Further Reading, Prev: Root Finding Examples, Up: One dimensional Root-Finding
+
+32.11 References and Further Reading
+====================================
+
+For information on the Brent-Dekker algorithm see the following two
+papers,
+
+ R. P. Brent, "An algorithm with guaranteed convergence for finding
+ a zero of a function", `Computer Journal', 14 (1971) 422-425
+
+ J. C. P. Bus and T. J. Dekker, "Two Efficient Algorithms with
+ Guaranteed Convergence for Finding a Zero of a Function", `ACM
+ Transactions of Mathematical Software', Vol. 1 No. 4 (1975) 330-345
+
+
+File: gsl-ref.info, Node: One dimensional Minimization, Next: Multidimensional Root-Finding, Prev: One dimensional Root-Finding, Up: Top
+
+33 One dimensional Minimization
+*******************************
+
+This chapter describes routines for finding minima of arbitrary
+one-dimensional functions. The library provides low level components
+for a variety of iterative minimizers and convergence tests. These can
+be combined by the user to achieve the desired solution, with full
+access to the intermediate steps of the algorithms. Each class of
+methods uses the same framework, so that you can switch between
+minimizers at runtime without needing to recompile your program. Each
+instance of a minimizer keeps track of its own state, allowing the
+minimizers to be used in multi-threaded programs.
+
+ The header file `gsl_min.h' contains prototypes for the minimization
+functions and related declarations. To use the minimization algorithms
+to find the maximum of a function simply invert its sign.
+
+* Menu:
+
+* Minimization Overview::
+* Minimization Caveats::
+* Initializing the Minimizer::
+* Providing the function to minimize::
+* Minimization Iteration::
+* Minimization Stopping Parameters::
+* Minimization Algorithms::
+* Minimization Examples::
+* Minimization References and Further Reading::
+
+
+File: gsl-ref.info, Node: Minimization Overview, Next: Minimization Caveats, Up: One dimensional Minimization
+
+33.1 Overview
+=============
+
+The minimization algorithms begin with a bounded region known to contain
+a minimum. The region is described by a lower bound a and an upper
+bound b, with an estimate of the location of the minimum x.
+
+The value of the function at x must be less than the value of the
+function at the ends of the interval,
+
+ f(a) > f(x) < f(b)
+
+This condition guarantees that a minimum is contained somewhere within
+the interval. On each iteration a new point x' is selected using one
+of the available algorithms. If the new point is a better estimate of
+the minimum, i.e. where f(x') < f(x), then the current estimate of the
+minimum x is updated. The new point also allows the size of the
+bounded interval to be reduced, by choosing the most compact set of
+points which satisfies the constraint f(a) > f(x) < f(b). The interval
+is reduced until it encloses the true minimum to a desired tolerance.
+This provides a best estimate of the location of the minimum and a
+rigorous error estimate.
+
+ Several bracketing algorithms are available within a single
+framework. The user provides a high-level driver for the algorithm,
+and the library provides the individual functions necessary for each of
+the steps. There are three main phases of the iteration. The steps
+are,
+
+ * initialize minimizer state, S, for algorithm T
+
+ * update S using the iteration T
+
+ * test S for convergence, and repeat iteration if necessary
+
+The state for the minimizers is held in a `gsl_min_fminimizer' struct.
+The updating procedure uses only function evaluations (not derivatives).
+
+
+File: gsl-ref.info, Node: Minimization Caveats, Next: Initializing the Minimizer, Prev: Minimization Overview, Up: One dimensional Minimization
+
+33.2 Caveats
+============
+
+Note that minimization functions can only search for one minimum at a
+time. When there are several minima in the search area, the first
+minimum to be found will be returned; however it is difficult to predict
+which of the minima this will be. _In most cases, no error will be
+reported if you try to find a minimum in an area where there is more
+than one._
+
+ With all minimization algorithms it can be difficult to determine the
+location of the minimum to full numerical precision. The behavior of
+the function in the region of the minimum x^* can be approximated by a
+Taylor expansion,
+
+ y = f(x^*) + (1/2) f''(x^*) (x - x^*)^2
+
+and the second term of this expansion can be lost when added to the
+first term at finite precision. This magnifies the error in locating
+x^*, making it proportional to \sqrt \epsilon (where \epsilon is the
+relative accuracy of the floating point numbers). For functions with
+higher order minima, such as x^4, the magnification of the error is
+correspondingly worse. The best that can be achieved is to converge to
+the limit of numerical accuracy in the function values, rather than the
+location of the minimum itself.
+
+
+File: gsl-ref.info, Node: Initializing the Minimizer, Next: Providing the function to minimize, Prev: Minimization Caveats, Up: One dimensional Minimization
+
+33.3 Initializing the Minimizer
+===============================
+
+ -- Function: gsl_min_fminimizer * gsl_min_fminimizer_alloc (const
+ gsl_min_fminimizer_type * T)
+ This function returns a pointer to a newly allocated instance of a
+ minimizer of type T. For example, the following code creates an
+ instance of a golden section minimizer,
+
+ const gsl_min_fminimizer_type * T
+ = gsl_min_fminimizer_goldensection;
+ gsl_min_fminimizer * s
+ = gsl_min_fminimizer_alloc (T);
+
+ If there is insufficient memory to create the minimizer then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_min_fminimizer_set (gsl_min_fminimizer * S,
+ gsl_function * F, double X_MINIMUM, double X_LOWER, double
+ X_UPPER)
+ This function sets, or resets, an existing minimizer S to use the
+ function F and the initial search interval [X_LOWER, X_UPPER],
+ with a guess for the location of the minimum X_MINIMUM.
+
+ If the interval given does not contain a minimum, then the function
+ returns an error code of `GSL_EINVAL'.
+
+ -- Function: int gsl_min_fminimizer_set_with_values
+ (gsl_min_fminimizer * S, gsl_function * F, double X_MINIMUM,
+ double F_MINIMUM, double X_LOWER, double F_LOWER, double
+ X_UPPER, double F_UPPER)
+ This function is equivalent to `gsl_min_fminimizer_set' but uses
+ the values F_MINIMUM, F_LOWER and F_UPPER instead of computing
+ `f(x_minimum)', `f(x_lower)' and `f(x_upper)'.
+
+ -- Function: void gsl_min_fminimizer_free (gsl_min_fminimizer * S)
+ This function frees all the memory associated with the minimizer S.
+
+ -- Function: const char * gsl_min_fminimizer_name (const
+ gsl_min_fminimizer * S)
+ This function returns a pointer to the name of the minimizer. For
+ example,
+
+ printf ("s is a '%s' minimizer\n",
+ gsl_min_fminimizer_name (s));
+
+ would print something like `s is a 'brent' minimizer'.
+
+
+File: gsl-ref.info, Node: Providing the function to minimize, Next: Minimization Iteration, Prev: Initializing the Minimizer, Up: One dimensional Minimization
+
+33.4 Providing the function to minimize
+=======================================
+
+You must provide a continuous function of one variable for the
+minimizers to operate on. In order to allow for general parameters the
+functions are defined by a `gsl_function' data type (*note Providing
+the function to solve::).
+
+
+File: gsl-ref.info, Node: Minimization Iteration, Next: Minimization Stopping Parameters, Prev: Providing the function to minimize, Up: One dimensional Minimization
+
+33.5 Iteration
+==============
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any minimizer of
+the corresponding type. The same functions work for all minimizers so
+that different methods can be substituted at runtime without
+modifications to the code.
+
+ -- Function: int gsl_min_fminimizer_iterate (gsl_min_fminimizer * S)
+ This function performs a single iteration of the minimizer S. If
+ the iteration encounters an unexpected problem then an error code
+ will be returned,
+
+ `GSL_EBADFUNC'
+ the iteration encountered a singular point where the function
+ evaluated to `Inf' or `NaN'.
+
+ `GSL_FAILURE'
+ the algorithm could not improve the current best
+ approximation or bounding interval.
+
+ The minimizer maintains a current best estimate of the position of
+the minimum at all times, and the current interval bounding the minimum.
+This information can be accessed with the following auxiliary functions,
+
+ -- Function: double gsl_min_fminimizer_x_minimum (const
+ gsl_min_fminimizer * S)
+ This function returns the current estimate of the position of the
+ minimum for the minimizer S.
+
+ -- Function: double gsl_min_fminimizer_x_upper (const
+ gsl_min_fminimizer * S)
+ -- Function: double gsl_min_fminimizer_x_lower (const
+ gsl_min_fminimizer * S)
+ These functions return the current upper and lower bound of the
+ interval for the minimizer S.
+
+ -- Function: double gsl_min_fminimizer_f_minimum (const
+ gsl_min_fminimizer * S)
+ -- Function: double gsl_min_fminimizer_f_upper (const
+ gsl_min_fminimizer * S)
+ -- Function: double gsl_min_fminimizer_f_lower (const
+ gsl_min_fminimizer * S)
+ These functions return the value of the function at the current
+ estimate of the minimum and at the upper and lower bounds of the
+ interval for the minimizer S.
+
+
+File: gsl-ref.info, Node: Minimization Stopping Parameters, Next: Minimization Algorithms, Prev: Minimization Iteration, Up: One dimensional Minimization
+
+33.6 Stopping Parameters
+========================
+
+A minimization procedure should stop when one of the following
+conditions is true:
+
+ * A minimum has been found to within the user-specified precision.
+
+ * A user-specified maximum number of iterations has been reached.
+
+ * An error has occurred.
+
+The handling of these conditions is under user control. The function
+below allows the user to test the precision of the current result.
+
+ -- Function: int gsl_min_test_interval (double X_LOWER, double
+ X_UPPER, double EPSABS, double EPSREL)
+ This function tests for the convergence of the interval [X_LOWER,
+ X_UPPER] with absolute error EPSABS and relative error EPSREL.
+ The test returns `GSL_SUCCESS' if the following condition is
+ achieved,
+
+ |a - b| < epsabs + epsrel min(|a|,|b|)
+
+ when the interval x = [a,b] does not include the origin. If the
+ interval includes the origin then \min(|a|,|b|) is replaced by
+ zero (which is the minimum value of |x| over the interval). This
+ ensures that the relative error is accurately estimated for minima
+ close to the origin.
+
+ This condition on the interval also implies that any estimate of
+ the minimum x_m in the interval satisfies the same condition with
+ respect to the true minimum x_m^*,
+
+ |x_m - x_m^*| < epsabs + epsrel x_m^*
+
+ assuming that the true minimum x_m^* is contained within the
+ interval.
+
+
+File: gsl-ref.info, Node: Minimization Algorithms, Next: Minimization Examples, Prev: Minimization Stopping Parameters, Up: One dimensional Minimization
+
+33.7 Minimization Algorithms
+============================
+
+The minimization algorithms described in this section require an initial
+interval which is guaranteed to contain a minimum--if a and b are the
+endpoints of the interval and x is an estimate of the minimum then f(a)
+> f(x) < f(b). This ensures that the function has at least one minimum
+somewhere in the interval. If a valid initial interval is used then
+these algorithm cannot fail, provided the function is well-behaved.
+
+ -- Minimizer: gsl_min_fminimizer_goldensection
+ The "golden section algorithm" is the simplest method of bracketing
+ the minimum of a function. It is the slowest algorithm provided
+ by the library, with linear convergence.
+
+ On each iteration, the algorithm first compares the subintervals
+ from the endpoints to the current minimum. The larger subinterval
+ is divided in a golden section (using the famous ratio (3-\sqrt
+ 5)/2 = 0.3189660...) and the value of the function at this new
+ point is calculated. The new value is used with the constraint
+ f(a') > f(x') < f(b') to a select new interval containing the
+ minimum, by discarding the least useful point. This procedure can
+ be continued indefinitely until the interval is sufficiently
+ small. Choosing the golden section as the bisection ratio can be
+ shown to provide the fastest convergence for this type of
+ algorithm.
+
+
+ -- Minimizer: gsl_min_fminimizer_brent
+ The "Brent minimization algorithm" combines a parabolic
+ interpolation with the golden section algorithm. This produces a
+ fast algorithm which is still robust.
+
+ The outline of the algorithm can be summarized as follows: on each
+ iteration Brent's method approximates the function using an
+ interpolating parabola through three existing points. The minimum
+ of the parabola is taken as a guess for the minimum. If it lies
+ within the bounds of the current interval then the interpolating
+ point is accepted, and used to generate a smaller interval. If
+ the interpolating point is not accepted then the algorithm falls
+ back to an ordinary golden section step. The full details of
+ Brent's method include some additional checks to improve
+ convergence.
+
+
+File: gsl-ref.info, Node: Minimization Examples, Next: Minimization References and Further Reading, Prev: Minimization Algorithms, Up: One dimensional Minimization
+
+33.8 Examples
+=============
+
+The following program uses the Brent algorithm to find the minimum of
+the function f(x) = \cos(x) + 1, which occurs at x = \pi. The starting
+interval is (0,6), with an initial guess for the minimum of 2.
+
+ #include <stdio.h>
+ #include <gsl/gsl_errno.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_min.h>
+
+ double fn1 (double x, void * params)
+ {
+ return cos(x) + 1.0;
+ }
+
+ int
+ main (void)
+ {
+ int status;
+ int iter = 0, max_iter = 100;
+ const gsl_min_fminimizer_type *T;
+ gsl_min_fminimizer *s;
+ double m = 2.0, m_expected = M_PI;
+ double a = 0.0, b = 6.0;
+ gsl_function F;
+
+ F.function = &fn1;
+ F.params = 0;
+
+ T = gsl_min_fminimizer_brent;
+ s = gsl_min_fminimizer_alloc (T);
+ gsl_min_fminimizer_set (s, &F, m, a, b);
+
+ printf ("using %s method\n",
+ gsl_min_fminimizer_name (s));
+
+ printf ("%5s [%9s, %9s] %9s %10s %9s\n",
+ "iter", "lower", "upper", "min",
+ "err", "err(est)");
+
+ printf ("%5d [%.7f, %.7f] %.7f %+.7f %.7f\n",
+ iter, a, b,
+ m, m - m_expected, b - a);
+
+ do
+ {
+ iter++;
+ status = gsl_min_fminimizer_iterate (s);
+
+ m = gsl_min_fminimizer_x_minimum (s);
+ a = gsl_min_fminimizer_x_lower (s);
+ b = gsl_min_fminimizer_x_upper (s);
+
+ status
+ = gsl_min_test_interval (a, b, 0.001, 0.0);
+
+ if (status == GSL_SUCCESS)
+ printf ("Converged:\n");
+
+ printf ("%5d [%.7f, %.7f] "
+ "%.7f %.7f %+.7f %.7f\n",
+ iter, a, b,
+ m, m_expected, m - m_expected, b - a);
+ }
+ while (status == GSL_CONTINUE && iter < max_iter);
+
+ gsl_min_fminimizer_free (s);
+
+ return status;
+ }
+
+Here are the results of the minimization procedure.
+
+ $ ./a.out
+ 0 [0.0000000, 6.0000000] 2.0000000 -1.1415927 6.0000000
+ 1 [2.0000000, 6.0000000] 3.2758640 +0.1342713 4.0000000
+ 2 [2.0000000, 3.2831929] 3.2758640 +0.1342713 1.2831929
+ 3 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862
+ 4 [2.8689068, 3.2831929] 3.2758640 +0.1342713 0.4142862
+ 5 [2.8689068, 3.2758640] 3.1460585 +0.0044658 0.4069572
+ 6 [3.1346075, 3.2758640] 3.1460585 +0.0044658 0.1412565
+ 7 [3.1346075, 3.1874620] 3.1460585 +0.0044658 0.0528545
+ 8 [3.1346075, 3.1460585] 3.1460585 +0.0044658 0.0114510
+ 9 [3.1346075, 3.1460585] 3.1424060 +0.0008133 0.0114510
+ 10 [3.1346075, 3.1424060] 3.1415885 -0.0000041 0.0077985
+ Converged:
+ 11 [3.1415885, 3.1424060] 3.1415927 -0.0000000 0.0008175
+
+
+File: gsl-ref.info, Node: Minimization References and Further Reading, Prev: Minimization Examples, Up: One dimensional Minimization
+
+33.9 References and Further Reading
+===================================
+
+Further information on Brent's algorithm is available in the following
+book,
+
+ Richard Brent, `Algorithms for minimization without derivatives',
+ Prentice-Hall (1973), republished by Dover in paperback (2002),
+ ISBN 0-486-41998-3.
+
+
+File: gsl-ref.info, Node: Multidimensional Root-Finding, Next: Multidimensional Minimization, Prev: One dimensional Minimization, Up: Top
+
+34 Multidimensional Root-Finding
+********************************
+
+This chapter describes functions for multidimensional root-finding
+(solving nonlinear systems with n equations in n unknowns). The
+library provides low level components for a variety of iterative
+solvers and convergence tests. These can be combined by the user to
+achieve the desired solution, with full access to the intermediate
+steps of the iteration. Each class of methods uses the same framework,
+so that you can switch between solvers at runtime without needing to
+recompile your program. Each instance of a solver keeps track of its
+own state, allowing the solvers to be used in multi-threaded programs.
+The solvers are based on the original Fortran library MINPACK.
+
+ The header file `gsl_multiroots.h' contains prototypes for the
+multidimensional root finding functions and related declarations.
+
+* Menu:
+
+* Overview of Multidimensional Root Finding::
+* Initializing the Multidimensional Solver::
+* Providing the multidimensional system of equations to solve::
+* Iteration of the multidimensional solver::
+* Search Stopping Parameters for the multidimensional solver::
+* Algorithms using Derivatives::
+* Algorithms without Derivatives::
+* Example programs for Multidimensional Root finding::
+* References and Further Reading for Multidimensional Root Finding::
+
+
+File: gsl-ref.info, Node: Overview of Multidimensional Root Finding, Next: Initializing the Multidimensional Solver, Up: Multidimensional Root-Finding
+
+34.1 Overview
+=============
+
+The problem of multidimensional root finding requires the simultaneous
+solution of n equations, f_i, in n variables, x_i,
+
+ f_i (x_1, ..., x_n) = 0 for i = 1 ... n.
+
+In general there are no bracketing methods available for n dimensional
+systems, and no way of knowing whether any solutions exist. All
+algorithms proceed from an initial guess using a variant of the Newton
+iteration,
+
+ x -> x' = x - J^{-1} f(x)
+
+where x, f are vector quantities and J is the Jacobian matrix J_{ij} =
+d f_i / d x_j. Additional strategies can be used to enlarge the region
+of convergence. These include requiring a decrease in the norm |f| on
+each step proposed by Newton's method, or taking steepest-descent steps
+in the direction of the negative gradient of |f|.
+
+ Several root-finding algorithms are available within a single
+framework. The user provides a high-level driver for the algorithms,
+and the library provides the individual functions necessary for each of
+the steps. There are three main phases of the iteration. The steps
+are,
+
+ * initialize solver state, S, for algorithm T
+
+ * update S using the iteration T
+
+ * test S for convergence, and repeat iteration if necessary
+
+The evaluation of the Jacobian matrix can be problematic, either because
+programming the derivatives is intractable or because computation of the
+n^2 terms of the matrix becomes too expensive. For these reasons the
+algorithms provided by the library are divided into two classes
+according to whether the derivatives are available or not.
+
+ The state for solvers with an analytic Jacobian matrix is held in a
+`gsl_multiroot_fdfsolver' struct. The updating procedure requires both
+the function and its derivatives to be supplied by the user.
+
+ The state for solvers which do not use an analytic Jacobian matrix is
+held in a `gsl_multiroot_fsolver' struct. The updating procedure uses
+only function evaluations (not derivatives). The algorithms estimate
+the matrix J or J^{-1} by approximate methods.
+
+
+File: gsl-ref.info, Node: Initializing the Multidimensional Solver, Next: Providing the multidimensional system of equations to solve, Prev: Overview of Multidimensional Root Finding, Up: Multidimensional Root-Finding
+
+34.2 Initializing the Solver
+============================
+
+The following functions initialize a multidimensional solver, either
+with or without derivatives. The solver itself depends only on the
+dimension of the problem and the algorithm and can be reused for
+different problems.
+
+ -- Function: gsl_multiroot_fsolver * gsl_multiroot_fsolver_alloc
+ (const gsl_multiroot_fsolver_type * T, size_t N)
+ This function returns a pointer to a newly allocated instance of a
+ solver of type T for a system of N dimensions. For example, the
+ following code creates an instance of a hybrid solver, to solve a
+ 3-dimensional system of equations.
+
+ const gsl_multiroot_fsolver_type * T
+ = gsl_multiroot_fsolver_hybrid;
+ gsl_multiroot_fsolver * s
+ = gsl_multiroot_fsolver_alloc (T, 3);
+
+ If there is insufficient memory to create the solver then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: gsl_multiroot_fdfsolver * gsl_multiroot_fdfsolver_alloc
+ (const gsl_multiroot_fdfsolver_type * T, size_t N)
+ This function returns a pointer to a newly allocated instance of a
+ derivative solver of type T for a system of N dimensions. For
+ example, the following code creates an instance of a
+ Newton-Raphson solver, for a 2-dimensional system of equations.
+
+ const gsl_multiroot_fdfsolver_type * T
+ = gsl_multiroot_fdfsolver_newton;
+ gsl_multiroot_fdfsolver * s =
+ gsl_multiroot_fdfsolver_alloc (T, 2);
+
+ If there is insufficient memory to create the solver then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver * S,
+ gsl_multiroot_function * F, gsl_vector * X)
+ This function sets, or resets, an existing solver S to use the
+ function F and the initial guess X.
+
+ -- Function: int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver
+ * S, gsl_multiroot_function_fdf * FDF, gsl_vector * X)
+ This function sets, or resets, an existing solver S to use the
+ function and derivative FDF and the initial guess X.
+
+ -- Function: void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver *
+ S)
+ -- Function: void gsl_multiroot_fdfsolver_free
+ (gsl_multiroot_fdfsolver * S)
+ These functions free all the memory associated with the solver S.
+
+ -- Function: const char * gsl_multiroot_fsolver_name (const
+ gsl_multiroot_fsolver * S)
+ -- Function: const char * gsl_multiroot_fdfsolver_name (const
+ gsl_multiroot_fdfsolver * S)
+ These functions return a pointer to the name of the solver. For
+ example,
+
+ printf ("s is a '%s' solver\n",
+ gsl_multiroot_fdfsolver_name (s));
+
+ would print something like `s is a 'newton' solver'.
+
+
+File: gsl-ref.info, Node: Providing the multidimensional system of equations to solve, Next: Iteration of the multidimensional solver, Prev: Initializing the Multidimensional Solver, Up: Multidimensional Root-Finding
+
+34.3 Providing the function to solve
+====================================
+
+You must provide n functions of n variables for the root finders to
+operate on. In order to allow for general parameters the functions are
+defined by the following data types:
+
+ -- Data Type: gsl_multiroot_function
+ This data type defines a general system of functions with
+ parameters.
+
+ `int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)'
+ this function should store the vector result f(x,params) in F
+ for argument X and parameters PARAMS, returning an
+ appropriate error code if the function cannot be computed.
+
+ `size_t n'
+ the dimension of the system, i.e. the number of components of
+ the vectors X and F.
+
+ `void * params'
+ a pointer to the parameters of the function.
+
+Here is an example using Powell's test function,
+
+ f_1(x) = A x_0 x_1 - 1,
+ f_2(x) = exp(-x_0) + exp(-x_1) - (1 + 1/A)
+
+with A = 10^4. The following code defines a `gsl_multiroot_function'
+system `F' which you could pass to a solver:
+
+ struct powell_params { double A; };
+
+ int
+ powell (gsl_vector * x, void * p, gsl_vector * f) {
+ struct powell_params * params
+ = *(struct powell_params *)p;
+ const double A = (params->A);
+ const double x0 = gsl_vector_get(x,0);
+ const double x1 = gsl_vector_get(x,1);
+
+ gsl_vector_set (f, 0, A * x0 * x1 - 1);
+ gsl_vector_set (f, 1, (exp(-x0) + exp(-x1)
+ - (1.0 + 1.0/A)));
+ return GSL_SUCCESS
+ }
+
+ gsl_multiroot_function F;
+ struct powell_params params = { 10000.0 };
+
+ F.f = &powell;
+ F.n = 2;
+ F.params = &params;
+
+ -- Data Type: gsl_multiroot_function_fdf
+ This data type defines a general system of functions with
+ parameters and the corresponding Jacobian matrix of derivatives,
+
+ `int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)'
+ this function should store the vector result f(x,params) in F
+ for argument X and parameters PARAMS, returning an
+ appropriate error code if the function cannot be computed.
+
+ `int (* df) (const gsl_vector * X, void * PARAMS, gsl_matrix * J)'
+ this function should store the N-by-N matrix result J_ij = d
+ f_i(x,params) / d x_j in J for argument X and parameters
+ PARAMS, returning an appropriate error code if the function
+ cannot be computed.
+
+ `int (* fdf) (const gsl_vector * X, void * PARAMS, gsl_vector * F, gsl_matrix * J)'
+ This function should set the values of the F and J as above,
+ for arguments X and parameters PARAMS. This function
+ provides an optimization of the separate functions for f(x)
+ and J(x)--it is always faster to compute the function and its
+ derivative at the same time.
+
+ `size_t n'
+ the dimension of the system, i.e. the number of components of
+ the vectors X and F.
+
+ `void * params'
+ a pointer to the parameters of the function.
+
+The example of Powell's test function defined above can be extended to
+include analytic derivatives using the following code,
+
+ int
+ powell_df (gsl_vector * x, void * p, gsl_matrix * J)
+ {
+ struct powell_params * params
+ = *(struct powell_params *)p;
+ const double A = (params->A);
+ const double x0 = gsl_vector_get(x,0);
+ const double x1 = gsl_vector_get(x,1);
+ gsl_matrix_set (J, 0, 0, A * x1);
+ gsl_matrix_set (J, 0, 1, A * x0);
+ gsl_matrix_set (J, 1, 0, -exp(-x0));
+ gsl_matrix_set (J, 1, 1, -exp(-x1));
+ return GSL_SUCCESS
+ }
+
+ int
+ powell_fdf (gsl_vector * x, void * p,
+ gsl_matrix * f, gsl_matrix * J) {
+ struct powell_params * params
+ = *(struct powell_params *)p;
+ const double A = (params->A);
+ const double x0 = gsl_vector_get(x,0);
+ const double x1 = gsl_vector_get(x,1);
+
+ const double u0 = exp(-x0);
+ const double u1 = exp(-x1);
+
+ gsl_vector_set (f, 0, A * x0 * x1 - 1);
+ gsl_vector_set (f, 1, u0 + u1 - (1 + 1/A));
+
+ gsl_matrix_set (J, 0, 0, A * x1);
+ gsl_matrix_set (J, 0, 1, A * x0);
+ gsl_matrix_set (J, 1, 0, -u0);
+ gsl_matrix_set (J, 1, 1, -u1);
+ return GSL_SUCCESS
+ }
+
+ gsl_multiroot_function_fdf FDF;
+
+ FDF.f = &powell_f;
+ FDF.df = &powell_df;
+ FDF.fdf = &powell_fdf;
+ FDF.n = 2;
+ FDF.params = 0;
+
+Note that the function `powell_fdf' is able to reuse existing terms
+from the function when calculating the Jacobian, thus saving time.
+
+
+File: gsl-ref.info, Node: Iteration of the multidimensional solver, Next: Search Stopping Parameters for the multidimensional solver, Prev: Providing the multidimensional system of equations to solve, Up: Multidimensional Root-Finding
+
+34.4 Iteration
+==============
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any solver of the
+corresponding type. The same functions work for all solvers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+ -- Function: int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver
+ * S)
+ -- Function: int gsl_multiroot_fdfsolver_iterate
+ (gsl_multiroot_fdfsolver * S)
+ These functions perform a single iteration of the solver S. If the
+ iteration encounters an unexpected problem then an error code will
+ be returned,
+
+ `GSL_EBADFUNC'
+ the iteration encountered a singular point where the function
+ or its derivative evaluated to `Inf' or `NaN'.
+
+ `GSL_ENOPROG'
+ the iteration is not making any progress, preventing the
+ algorithm from continuing.
+
+ The solver maintains a current best estimate of the root at all
+times. This information can be accessed with the following auxiliary
+functions,
+
+ -- Function: gsl_vector * gsl_multiroot_fsolver_root (const
+ gsl_multiroot_fsolver * S)
+ -- Function: gsl_vector * gsl_multiroot_fdfsolver_root (const
+ gsl_multiroot_fdfsolver * S)
+ These functions return the current estimate of the root for the
+ solver S.
+
+ -- Function: gsl_vector * gsl_multiroot_fsolver_f (const
+ gsl_multiroot_fsolver * S)
+ -- Function: gsl_vector * gsl_multiroot_fdfsolver_f (const
+ gsl_multiroot_fdfsolver * S)
+ These functions return the function value f(x) at the current
+ estimate of the root for the solver S.
+
+ -- Function: gsl_vector * gsl_multiroot_fsolver_dx (const
+ gsl_multiroot_fsolver * S)
+ -- Function: gsl_vector * gsl_multiroot_fdfsolver_dx (const
+ gsl_multiroot_fdfsolver * S)
+ These functions return the last step dx taken by the solver S.
+
+
+File: gsl-ref.info, Node: Search Stopping Parameters for the multidimensional solver, Next: Algorithms using Derivatives, Prev: Iteration of the multidimensional solver, Up: Multidimensional Root-Finding
+
+34.5 Search Stopping Parameters
+===============================
+
+A root finding procedure should stop when one of the following
+conditions is true:
+
+ * A multidimensional root has been found to within the
+ user-specified precision.
+
+ * A user-specified maximum number of iterations has been reached.
+
+ * An error has occurred.
+
+The handling of these conditions is under user control. The functions
+below allow the user to test the precision of the current result in
+several standard ways.
+
+ -- Function: int gsl_multiroot_test_delta (const gsl_vector * DX,
+ const gsl_vector * X, double EPSABS, double EPSREL)
+ This function tests for the convergence of the sequence by
+ comparing the last step DX with the absolute error EPSABS and
+ relative error EPSREL to the current position X. The test returns
+ `GSL_SUCCESS' if the following condition is achieved,
+
+ |dx_i| < epsabs + epsrel |x_i|
+
+ for each component of X and returns `GSL_CONTINUE' otherwise.
+
+ -- Function: int gsl_multiroot_test_residual (const gsl_vector * F,
+ double EPSABS)
+ This function tests the residual value F against the absolute
+ error bound EPSABS. The test returns `GSL_SUCCESS' if the
+ following condition is achieved,
+
+ \sum_i |f_i| < epsabs
+
+ and returns `GSL_CONTINUE' otherwise. This criterion is suitable
+ for situations where the precise location of the root, x, is
+ unimportant provided a value can be found where the residual is
+ small enough.
+
+
+File: gsl-ref.info, Node: Algorithms using Derivatives, Next: Algorithms without Derivatives, Prev: Search Stopping Parameters for the multidimensional solver, Up: Multidimensional Root-Finding
+
+34.6 Algorithms using Derivatives
+=================================
+
+The root finding algorithms described in this section make use of both
+the function and its derivative. They require an initial guess for the
+location of the root, but there is no absolute guarantee of
+convergence--the function must be suitable for this technique and the
+initial guess must be sufficiently close to the root for it to work.
+When the conditions are satisfied then convergence is quadratic.
+
+ -- Derivative Solver: gsl_multiroot_fdfsolver_hybridsj
+ This is a modified version of Powell's Hybrid method as
+ implemented in the HYBRJ algorithm in MINPACK. Minpack was
+ written by Jorge J. More', Burton S. Garbow and Kenneth E.
+ Hillstrom. The Hybrid algorithm retains the fast convergence of
+ Newton's method but will also reduce the residual when Newton's
+ method is unreliable.
+
+ The algorithm uses a generalized trust region to keep each step
+ under control. In order to be accepted a proposed new position x'
+ must satisfy the condition |D (x' - x)| < \delta, where D is a
+ diagonal scaling matrix and \delta is the size of the trust
+ region. The components of D are computed internally, using the
+ column norms of the Jacobian to estimate the sensitivity of the
+ residual to each component of x. This improves the behavior of the
+ algorithm for badly scaled functions.
+
+ On each iteration the algorithm first determines the standard
+ Newton step by solving the system J dx = - f. If this step falls
+ inside the trust region it is used as a trial step in the next
+ stage. If not, the algorithm uses the linear combination of the
+ Newton and gradient directions which is predicted to minimize the
+ norm of the function while staying inside the trust region,
+
+ dx = - \alpha J^{-1} f(x) - \beta \nabla |f(x)|^2.
+
+ This combination of Newton and gradient directions is referred to
+ as a "dogleg step".
+
+ The proposed step is now tested by evaluating the function at the
+ resulting point, x'. If the step reduces the norm of the function
+ sufficiently then it is accepted and size of the trust region is
+ increased. If the proposed step fails to improve the solution
+ then the size of the trust region is decreased and another trial
+ step is computed.
+
+ The speed of the algorithm is increased by computing the changes
+ to the Jacobian approximately, using a rank-1 update. If two
+ successive attempts fail to reduce the residual then the full
+ Jacobian is recomputed. The algorithm also monitors the progress
+ of the solution and returns an error if several steps fail to make
+ any improvement,
+
+ `GSL_ENOPROG'
+ the iteration is not making any progress, preventing the
+ algorithm from continuing.
+
+ `GSL_ENOPROGJ'
+ re-evaluations of the Jacobian indicate that the iteration is
+ not making any progress, preventing the algorithm from
+ continuing.
+
+
+ -- Derivative Solver: gsl_multiroot_fdfsolver_hybridj
+ This algorithm is an unscaled version of `hybridsj'. The steps are
+ controlled by a spherical trust region |x' - x| < \delta, instead
+ of a generalized region. This can be useful if the generalized
+ region estimated by `hybridsj' is inappropriate.
+
+ -- Derivative Solver: gsl_multiroot_fdfsolver_newton
+ Newton's Method is the standard root-polishing algorithm. The
+ algorithm begins with an initial guess for the location of the
+ solution. On each iteration a linear approximation to the
+ function F is used to estimate the step which will zero all the
+ components of the residual. The iteration is defined by the
+ following sequence,
+
+ x -> x' = x - J^{-1} f(x)
+
+ where the Jacobian matrix J is computed from the derivative
+ functions provided by F. The step dx is obtained by solving the
+ linear system,
+
+ J dx = - f(x)
+
+ using LU decomposition.
+
+ -- Derivative Solver: gsl_multiroot_fdfsolver_gnewton
+ This is a modified version of Newton's method which attempts to
+ improve global convergence by requiring every step to reduce the
+ Euclidean norm of the residual, |f(x)|. If the Newton step leads
+ to an increase in the norm then a reduced step of relative size,
+
+ t = (\sqrt(1 + 6 r) - 1) / (3 r)
+
+ is proposed, with r being the ratio of norms |f(x')|^2/|f(x)|^2.
+ This procedure is repeated until a suitable step size is found.
+
+
+File: gsl-ref.info, Node: Algorithms without Derivatives, Next: Example programs for Multidimensional Root finding, Prev: Algorithms using Derivatives, Up: Multidimensional Root-Finding
+
+34.7 Algorithms without Derivatives
+===================================
+
+The algorithms described in this section do not require any derivative
+information to be supplied by the user. Any derivatives needed are
+approximated by finite differences. Note that if the
+finite-differencing step size chosen by these routines is inappropriate,
+an explicit user-supplied numerical derivative can always be used with
+the algorithms described in the previous section.
+
+ -- Solver: gsl_multiroot_fsolver_hybrids
+ This is a version of the Hybrid algorithm which replaces calls to
+ the Jacobian function by its finite difference approximation. The
+ finite difference approximation is computed using
+ `gsl_multiroots_fdjac' with a relative step size of
+ `GSL_SQRT_DBL_EPSILON'. Note that this step size will not be
+ suitable for all problems.
+
+ -- Solver: gsl_multiroot_fsolver_hybrid
+ This is a finite difference version of the Hybrid algorithm without
+ internal scaling.
+
+ -- Solver: gsl_multiroot_fsolver_dnewton
+ The "discrete Newton algorithm" is the simplest method of solving a
+ multidimensional system. It uses the Newton iteration
+
+ x -> x - J^{-1} f(x)
+
+ where the Jacobian matrix J is approximated by taking finite
+ differences of the function F. The approximation scheme used by
+ this implementation is,
+
+ J_{ij} = (f_i(x + \delta_j) - f_i(x)) / \delta_j
+
+ where \delta_j is a step of size \sqrt\epsilon |x_j| with \epsilon
+ being the machine precision (\epsilon \approx 2.22 \times 10^-16).
+ The order of convergence of Newton's algorithm is quadratic, but
+ the finite differences require n^2 function evaluations on each
+ iteration. The algorithm may become unstable if the finite
+ differences are not a good approximation to the true derivatives.
+
+ -- Solver: gsl_multiroot_fsolver_broyden
+ The "Broyden algorithm" is a version of the discrete Newton
+ algorithm which attempts to avoids the expensive update of the
+ Jacobian matrix on each iteration. The changes to the Jacobian
+ are also approximated, using a rank-1 update,
+
+ J^{-1} \to J^{-1} - (J^{-1} df - dx) dx^T J^{-1} / dx^T J^{-1} df
+
+ where the vectors dx and df are the changes in x and f. On the
+ first iteration the inverse Jacobian is estimated using finite
+ differences, as in the discrete Newton algorithm.
+
+ This approximation gives a fast update but is unreliable if the
+ changes are not small, and the estimate of the inverse Jacobian
+ becomes worse as time passes. The algorithm has a tendency to
+ become unstable unless it starts close to the root. The Jacobian
+ is refreshed if this instability is detected (consult the source
+ for details).
+
+ This algorithm is included only for demonstration purposes, and is
+ not recommended for serious use.
+
+
+File: gsl-ref.info, Node: Example programs for Multidimensional Root finding, Next: References and Further Reading for Multidimensional Root Finding, Prev: Algorithms without Derivatives, Up: Multidimensional Root-Finding
+
+34.8 Examples
+=============
+
+The multidimensional solvers are used in a similar way to the
+one-dimensional root finding algorithms. This first example
+demonstrates the `hybrids' scaled-hybrid algorithm, which does not
+require derivatives. The program solves the Rosenbrock system of
+equations,
+
+ f_1 (x, y) = a (1 - x)
+ f_2 (x, y) = b (y - x^2)
+
+with a = 1, b = 10. The solution of this system lies at (x,y) = (1,1)
+in a narrow valley.
+
+ The first stage of the program is to define the system of equations,
+
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <gsl/gsl_vector.h>
+ #include <gsl/gsl_multiroots.h>
+
+ struct rparams
+ {
+ double a;
+ double b;
+ };
+
+ int
+ rosenbrock_f (const gsl_vector * x, void *params,
+ gsl_vector * f)
+ {
+ double a = ((struct rparams *) params)->a;
+ double b = ((struct rparams *) params)->b;
+
+ const double x0 = gsl_vector_get (x, 0);
+ const double x1 = gsl_vector_get (x, 1);
+
+ const double y0 = a * (1 - x0);
+ const double y1 = b * (x1 - x0 * x0);
+
+ gsl_vector_set (f, 0, y0);
+ gsl_vector_set (f, 1, y1);
+
+ return GSL_SUCCESS;
+ }
+
+The main program begins by creating the function object `f', with the
+arguments `(x,y)' and parameters `(a,b)'. The solver `s' is initialized
+to use this function, with the `hybrids' method.
+
+ int
+ main (void)
+ {
+ const gsl_multiroot_fsolver_type *T;
+ gsl_multiroot_fsolver *s;
+
+ int status;
+ size_t i, iter = 0;
+
+ const size_t n = 2;
+ struct rparams p = {1.0, 10.0};
+ gsl_multiroot_function f = {&rosenbrock_f, n, &p};
+
+ double x_init[2] = {-10.0, -5.0};
+ gsl_vector *x = gsl_vector_alloc (n);
+
+ gsl_vector_set (x, 0, x_init[0]);
+ gsl_vector_set (x, 1, x_init[1]);
+
+ T = gsl_multiroot_fsolver_hybrids;
+ s = gsl_multiroot_fsolver_alloc (T, 2);
+ gsl_multiroot_fsolver_set (s, &f, x);
+
+ print_state (iter, s);
+
+ do
+ {
+ iter++;
+ status = gsl_multiroot_fsolver_iterate (s);
+
+ print_state (iter, s);
+
+ if (status) /* check if solver is stuck */
+ break;
+
+ status =
+ gsl_multiroot_test_residual (s->f, 1e-7);
+ }
+ while (status == GSL_CONTINUE && iter < 1000);
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ gsl_multiroot_fsolver_free (s);
+ gsl_vector_free (x);
+ return 0;
+ }
+
+Note that it is important to check the return status of each solver
+step, in case the algorithm becomes stuck. If an error condition is
+detected, indicating that the algorithm cannot proceed, then the error
+can be reported to the user, a new starting point chosen or a different
+algorithm used.
+
+ The intermediate state of the solution is displayed by the following
+function. The solver state contains the vector `s->x' which is the
+current position, and the vector `s->f' with corresponding function
+values.
+
+ int
+ print_state (size_t iter, gsl_multiroot_fsolver * s)
+ {
+ printf ("iter = %3u x = % .3f % .3f "
+ "f(x) = % .3e % .3e\n",
+ iter,
+ gsl_vector_get (s->x, 0),
+ gsl_vector_get (s->x, 1),
+ gsl_vector_get (s->f, 0),
+ gsl_vector_get (s->f, 1));
+ }
+
+Here are the results of running the program. The algorithm is started at
+(-10,-5) far from the solution. Since the solution is hidden in a
+narrow valley the earliest steps follow the gradient of the function
+downhill, in an attempt to reduce the large value of the residual. Once
+the root has been approximately located, on iteration 8, the Newton
+behavior takes over and convergence is very rapid.
+
+ iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03
+ iter = 1 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03
+ iter = 2 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01
+ iter = 3 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01
+ iter = 4 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01
+ iter = 5 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01
+ iter = 6 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01
+ iter = 7 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00
+ iter = 8 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00
+ iter = 9 x = 1.000 0.878 f(x) = 1.268e-10 -1.218e+00
+ iter = 10 x = 1.000 0.989 f(x) = 1.124e-11 -1.080e-01
+ iter = 11 x = 1.000 1.000 f(x) = 0.000e+00 0.000e+00
+ status = success
+
+Note that the algorithm does not update the location on every
+iteration. Some iterations are used to adjust the trust-region
+parameter, after trying a step which was found to be divergent, or to
+recompute the Jacobian, when poor convergence behavior is detected.
+
+ The next example program adds derivative information, in order to
+accelerate the solution. There are two derivative functions
+`rosenbrock_df' and `rosenbrock_fdf'. The latter computes both the
+function and its derivative simultaneously. This allows the
+optimization of any common terms. For simplicity we substitute calls to
+the separate `f' and `df' functions at this point in the code below.
+
+ int
+ rosenbrock_df (const gsl_vector * x, void *params,
+ gsl_matrix * J)
+ {
+ const double a = ((struct rparams *) params)->a;
+ const double b = ((struct rparams *) params)->b;
+
+ const double x0 = gsl_vector_get (x, 0);
+
+ const double df00 = -a;
+ const double df01 = 0;
+ const double df10 = -2 * b * x0;
+ const double df11 = b;
+
+ gsl_matrix_set (J, 0, 0, df00);
+ gsl_matrix_set (J, 0, 1, df01);
+ gsl_matrix_set (J, 1, 0, df10);
+ gsl_matrix_set (J, 1, 1, df11);
+
+ return GSL_SUCCESS;
+ }
+
+ int
+ rosenbrock_fdf (const gsl_vector * x, void *params,
+ gsl_vector * f, gsl_matrix * J)
+ {
+ rosenbrock_f (x, params, f);
+ rosenbrock_df (x, params, J);
+
+ return GSL_SUCCESS;
+ }
+
+The main program now makes calls to the corresponding `fdfsolver'
+versions of the functions,
+
+ int
+ main (void)
+ {
+ const gsl_multiroot_fdfsolver_type *T;
+ gsl_multiroot_fdfsolver *s;
+
+ int status;
+ size_t i, iter = 0;
+
+ const size_t n = 2;
+ struct rparams p = {1.0, 10.0};
+ gsl_multiroot_function_fdf f = {&rosenbrock_f,
+ &rosenbrock_df,
+ &rosenbrock_fdf,
+ n, &p};
+
+ double x_init[2] = {-10.0, -5.0};
+ gsl_vector *x = gsl_vector_alloc (n);
+
+ gsl_vector_set (x, 0, x_init[0]);
+ gsl_vector_set (x, 1, x_init[1]);
+
+ T = gsl_multiroot_fdfsolver_gnewton;
+ s = gsl_multiroot_fdfsolver_alloc (T, n);
+ gsl_multiroot_fdfsolver_set (s, &f, x);
+
+ print_state (iter, s);
+
+ do
+ {
+ iter++;
+
+ status = gsl_multiroot_fdfsolver_iterate (s);
+
+ print_state (iter, s);
+
+ if (status)
+ break;
+
+ status = gsl_multiroot_test_residual (s->f, 1e-7);
+ }
+ while (status == GSL_CONTINUE && iter < 1000);
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ gsl_multiroot_fdfsolver_free (s);
+ gsl_vector_free (x);
+ return 0;
+ }
+
+The addition of derivative information to the `hybrids' solver does not
+make any significant difference to its behavior, since it able to
+approximate the Jacobian numerically with sufficient accuracy. To
+illustrate the behavior of a different derivative solver we switch to
+`gnewton'. This is a traditional Newton solver with the constraint that
+it scales back its step if the full step would lead "uphill". Here is
+the output for the `gnewton' algorithm,
+
+ iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03
+ iter = 1 x = -4.231 -65.317 f(x) = 5.231e+00 -8.321e+02
+ iter = 2 x = 1.000 -26.358 f(x) = -8.882e-16 -2.736e+02
+ iter = 3 x = 1.000 1.000 f(x) = -2.220e-16 -4.441e-15
+ status = success
+
+The convergence is much more rapid, but takes a wide excursion out to
+the point (-4.23,-65.3). This could cause the algorithm to go astray in
+a realistic application. The hybrid algorithm follows the downhill
+path to the solution more reliably.
+
+
+File: gsl-ref.info, Node: References and Further Reading for Multidimensional Root Finding, Prev: Example programs for Multidimensional Root finding, Up: Multidimensional Root-Finding
+
+34.9 References and Further Reading
+===================================
+
+The original version of the Hybrid method is described in the following
+articles by Powell,
+
+ M.J.D. Powell, "A Hybrid Method for Nonlinear Equations" (Chap 6, p
+ 87-114) and "A Fortran Subroutine for Solving systems of Nonlinear
+ Algebraic Equations" (Chap 7, p 115-161), in `Numerical Methods for
+ Nonlinear Algebraic Equations', P. Rabinowitz, editor. Gordon and
+ Breach, 1970.
+
+The following papers are also relevant to the algorithms described in
+this section,
+
+ J.J. More', M.Y. Cosnard, "Numerical Solution of Nonlinear
+ Equations", `ACM Transactions on Mathematical Software', Vol 5, No
+ 1, (1979), p 64-85
+
+ C.G. Broyden, "A Class of Methods for Solving Nonlinear
+ Simultaneous Equations", `Mathematics of Computation', Vol 19
+ (1965), p 577-593
+
+ J.J. More', B.S. Garbow, K.E. Hillstrom, "Testing Unconstrained
+ Optimization Software", ACM Transactions on Mathematical Software,
+ Vol 7, No 1 (1981), p 17-41
+
+
+File: gsl-ref.info, Node: Multidimensional Minimization, Next: Least-Squares Fitting, Prev: Multidimensional Root-Finding, Up: Top
+
+35 Multidimensional Minimization
+********************************
+
+This chapter describes routines for finding minima of arbitrary
+multidimensional functions. The library provides low level components
+for a variety of iterative minimizers and convergence tests. These can
+be combined by the user to achieve the desired solution, while providing
+full access to the intermediate steps of the algorithms. Each class of
+methods uses the same framework, so that you can switch between
+minimizers at runtime without needing to recompile your program. Each
+instance of a minimizer keeps track of its own state, allowing the
+minimizers to be used in multi-threaded programs. The minimization
+algorithms can be used to maximize a function by inverting its sign.
+
+ The header file `gsl_multimin.h' contains prototypes for the
+minimization functions and related declarations.
+
+* Menu:
+
+* Multimin Overview::
+* Multimin Caveats::
+* Initializing the Multidimensional Minimizer::
+* Providing a function to minimize::
+* Multimin Iteration::
+* Multimin Stopping Criteria::
+* Multimin Algorithms::
+* Multimin Examples::
+* Multimin References and Further Reading::
+
+
+File: gsl-ref.info, Node: Multimin Overview, Next: Multimin Caveats, Up: Multidimensional Minimization
+
+35.1 Overview
+=============
+
+The problem of multidimensional minimization requires finding a point x
+such that the scalar function,
+
+ f(x_1, ..., x_n)
+
+takes a value which is lower than at any neighboring point. For smooth
+functions the gradient g = \nabla f vanishes at the minimum. In general
+there are no bracketing methods available for the minimization of
+n-dimensional functions. The algorithms proceed from an initial guess
+using a search algorithm which attempts to move in a downhill direction.
+
+ Algorithms making use of the gradient of the function perform a
+one-dimensional line minimisation along this direction until the lowest
+point is found to a suitable tolerance. The search direction is then
+updated with local information from the function and its derivatives,
+and the whole process repeated until the true n-dimensional minimum is
+found.
+
+ The Nelder-Mead Simplex algorithm applies a different strategy. It
+maintains n+1 trial parameter vectors as the vertices of a
+n-dimensional simplex. In each iteration step it tries to improve the
+worst vertex by a simple geometrical transformation until the size of
+the simplex falls below a given tolerance.
+
+ Both types of algorithms use a standard framework. The user provides
+a high-level driver for the algorithms, and the library provides the
+individual functions necessary for each of the steps. There are three
+main phases of the iteration. The steps are,
+
+ * initialize minimizer state, S, for algorithm T
+
+ * update S using the iteration T
+
+ * test S for convergence, and repeat iteration if necessary
+
+Each iteration step consists either of an improvement to the
+line-minimisation in the current direction or an update to the search
+direction itself. The state for the minimizers is held in a
+`gsl_multimin_fdfminimizer' struct or a `gsl_multimin_fminimizer'
+struct.
+
+
+File: gsl-ref.info, Node: Multimin Caveats, Next: Initializing the Multidimensional Minimizer, Prev: Multimin Overview, Up: Multidimensional Minimization
+
+35.2 Caveats
+============
+
+Note that the minimization algorithms can only search for one local
+minimum at a time. When there are several local minima in the search
+area, the first minimum to be found will be returned; however it is
+difficult to predict which of the minima this will be. In most cases,
+no error will be reported if you try to find a local minimum in an area
+where there is more than one.
+
+ It is also important to note that the minimization algorithms find
+local minima; there is no way to determine whether a minimum is a global
+minimum of the function in question.
+
+
+File: gsl-ref.info, Node: Initializing the Multidimensional Minimizer, Next: Providing a function to minimize, Prev: Multimin Caveats, Up: Multidimensional Minimization
+
+35.3 Initializing the Multidimensional Minimizer
+================================================
+
+The following function initializes a multidimensional minimizer. The
+minimizer itself depends only on the dimension of the problem and the
+algorithm and can be reused for different problems.
+
+ -- Function: gsl_multimin_fdfminimizer *
+gsl_multimin_fdfminimizer_alloc (const gsl_multimin_fdfminimizer_type *
+ T, size_t N)
+ -- Function: gsl_multimin_fminimizer * gsl_multimin_fminimizer_alloc
+ (const gsl_multimin_fminimizer_type * T, size_t N)
+ This function returns a pointer to a newly allocated instance of a
+ minimizer of type T for an N-dimension function. If there is
+ insufficient memory to create the minimizer then the function
+ returns a null pointer and the error handler is invoked with an
+ error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_multimin_fdfminimizer_set
+ (gsl_multimin_fdfminimizer * S, gsl_multimin_function_fdf *
+ FDF, const gsl_vector * X, double STEP_SIZE, double TOL)
+ This function initializes the minimizer S to minimize the function
+ FDF starting from the initial point X. The size of the first
+ trial step is given by STEP_SIZE. The accuracy of the line
+ minimization is specified by TOL. The precise meaning of this
+ parameter depends on the method used. Typically the line
+ minimization is considered successful if the gradient of the
+ function g is orthogonal to the current search direction p to a
+ relative accuracy of TOL, where dot(p,g) < tol |p| |g|. A TOL
+ value of 0.1 is suitable for most purposes, since line
+ minimization only needs to be carried out approximately. Note
+ that setting TOL to zero will force the use of "exact"
+ line-searches, which are extremely expensive.
+
+ -- Function: int gsl_multimin_fminimizer_set (gsl_multimin_fminimizer
+ * S, gsl_multimin_function * F, const gsl_vector * X, const
+ gsl_vector * STEP_SIZE)
+ This function initializes the minimizer S to minimize the function
+ F, starting from the initial point X. The size of the initial
+ trial steps is given in vector STEP_SIZE. The precise meaning of
+ this parameter depends on the method used.
+
+ -- Function: void gsl_multimin_fdfminimizer_free
+ (gsl_multimin_fdfminimizer * S)
+ -- Function: void gsl_multimin_fminimizer_free
+ (gsl_multimin_fminimizer * S)
+ This function frees all the memory associated with the minimizer S.
+
+ -- Function: const char * gsl_multimin_fdfminimizer_name (const
+ gsl_multimin_fdfminimizer * S)
+ -- Function: const char * gsl_multimin_fminimizer_name (const
+ gsl_multimin_fminimizer * S)
+ This function returns a pointer to the name of the minimizer. For
+ example,
+
+ printf ("s is a '%s' minimizer\n",
+ gsl_multimin_fdfminimizer_name (s));
+
+ would print something like `s is a 'conjugate_pr' minimizer'.
+
+
+File: gsl-ref.info, Node: Providing a function to minimize, Next: Multimin Iteration, Prev: Initializing the Multidimensional Minimizer, Up: Multidimensional Minimization
+
+35.4 Providing a function to minimize
+=====================================
+
+You must provide a parametric function of n variables for the
+minimizers to operate on. You may also need to provide a routine which
+calculates the gradient of the function and a third routine which
+calculates both the function value and the gradient together. In order
+to allow for general parameters the functions are defined by the
+following data types:
+
+ -- Data Type: gsl_multimin_function_fdf
+ This data type defines a general function of n variables with
+ parameters and the corresponding gradient vector of derivatives,
+
+ `double (* f) (const gsl_vector * X, void * PARAMS)'
+ this function should return the result f(x,params) for
+ argument X and parameters PARAMS.
+
+ `void (* df) (const gsl_vector * X, void * PARAMS, gsl_vector * G)'
+ this function should store the N-dimensional gradient g_i = d
+ f(x,params) / d x_i in the vector G for argument X and
+ parameters PARAMS, returning an appropriate error code if the
+ function cannot be computed.
+
+ `void (* fdf) (const gsl_vector * X, void * PARAMS, double * f, gsl_vector * G)'
+ This function should set the values of the F and G as above,
+ for arguments X and parameters PARAMS. This function
+ provides an optimization of the separate functions for f(x)
+ and g(x)--it is always faster to compute the function and its
+ derivative at the same time.
+
+ `size_t n'
+ the dimension of the system, i.e. the number of components of
+ the vectors X.
+
+ `void * params'
+ a pointer to the parameters of the function.
+
+ -- Data Type: gsl_multimin_function
+ This data type defines a general function of n variables with
+ parameters,
+
+ `double (* f) (const gsl_vector * X, void * PARAMS)'
+ this function should return the result f(x,params) for
+ argument X and parameters PARAMS.
+
+ `size_t n'
+ the dimension of the system, i.e. the number of components of
+ the vectors X.
+
+ `void * params'
+ a pointer to the parameters of the function.
+
+The following example function defines a simple paraboloid with two
+parameters,
+
+ /* Paraboloid centered on (dp[0],dp[1]) */
+
+ double
+ my_f (const gsl_vector *v, void *params)
+ {
+ double x, y;
+ double *dp = (double *)params;
+
+ x = gsl_vector_get(v, 0);
+ y = gsl_vector_get(v, 1);
+
+ return 10.0 * (x - dp[0]) * (x - dp[0]) +
+ 20.0 * (y - dp[1]) * (y - dp[1]) + 30.0;
+ }
+
+ /* The gradient of f, df = (df/dx, df/dy). */
+ void
+ my_df (const gsl_vector *v, void *params,
+ gsl_vector *df)
+ {
+ double x, y;
+ double *dp = (double *)params;
+
+ x = gsl_vector_get(v, 0);
+ y = gsl_vector_get(v, 1);
+
+ gsl_vector_set(df, 0, 20.0 * (x - dp[0]));
+ gsl_vector_set(df, 1, 40.0 * (y - dp[1]));
+ }
+
+ /* Compute both f and df together. */
+ void
+ my_fdf (const gsl_vector *x, void *params,
+ double *f, gsl_vector *df)
+ {
+ *f = my_f(x, params);
+ my_df(x, params, df);
+ }
+
+The function can be initialized using the following code,
+
+ gsl_multimin_function_fdf my_func;
+
+ double p[2] = { 1.0, 2.0 }; /* center at (1,2) */
+
+ my_func.f = &my_f;
+ my_func.df = &my_df;
+ my_func.fdf = &my_fdf;
+ my_func.n = 2;
+ my_func.params = (void *)p;
+
+
+File: gsl-ref.info, Node: Multimin Iteration, Next: Multimin Stopping Criteria, Prev: Providing a function to minimize, Up: Multidimensional Minimization
+
+35.5 Iteration
+==============
+
+The following function drives the iteration of each algorithm. The
+function performs one iteration to update the state of the minimizer.
+The same function works for all minimizers so that different methods can
+be substituted at runtime without modifications to the code.
+
+ -- Function: int gsl_multimin_fdfminimizer_iterate
+ (gsl_multimin_fdfminimizer * S)
+ -- Function: int gsl_multimin_fminimizer_iterate
+ (gsl_multimin_fminimizer * S)
+ These functions perform a single iteration of the minimizer S. If
+ the iteration encounters an unexpected problem then an error code
+ will be returned.
+
+The minimizer maintains a current best estimate of the minimum at all
+times. This information can be accessed with the following auxiliary
+functions,
+
+ -- Function: gsl_vector * gsl_multimin_fdfminimizer_x (const
+ gsl_multimin_fdfminimizer * S)
+ -- Function: gsl_vector * gsl_multimin_fminimizer_x (const
+ gsl_multimin_fminimizer * S)
+ -- Function: double gsl_multimin_fdfminimizer_minimum (const
+ gsl_multimin_fdfminimizer * S)
+ -- Function: double gsl_multimin_fminimizer_minimum (const
+ gsl_multimin_fminimizer * S)
+ -- Function: gsl_vector * gsl_multimin_fdfminimizer_gradient (const
+ gsl_multimin_fdfminimizer * S)
+ -- Function: double gsl_multimin_fminimizer_size (const
+ gsl_multimin_fminimizer * S)
+ These functions return the current best estimate of the location
+ of the minimum, the value of the function at that point, its
+ gradient, and minimizer specific characteristic size for the
+ minimizer S.
+
+ -- Function: int gsl_multimin_fdfminimizer_restart
+ (gsl_multimin_fdfminimizer * S)
+ This function resets the minimizer S to use the current point as a
+ new starting point.
+
+
+File: gsl-ref.info, Node: Multimin Stopping Criteria, Next: Multimin Algorithms, Prev: Multimin Iteration, Up: Multidimensional Minimization
+
+35.6 Stopping Criteria
+======================
+
+A minimization procedure should stop when one of the following
+conditions is true:
+
+ * A minimum has been found to within the user-specified precision.
+
+ * A user-specified maximum number of iterations has been reached.
+
+ * An error has occurred.
+
+The handling of these conditions is under user control. The functions
+below allow the user to test the precision of the current result.
+
+ -- Function: int gsl_multimin_test_gradient (const gsl_vector * G,
+ double EPSABS)
+ This function tests the norm of the gradient G against the
+ absolute tolerance EPSABS. The gradient of a multidimensional
+ function goes to zero at a minimum. The test returns `GSL_SUCCESS'
+ if the following condition is achieved,
+
+ |g| < epsabs
+
+ and returns `GSL_CONTINUE' otherwise. A suitable choice of EPSABS
+ can be made from the desired accuracy in the function for small
+ variations in x. The relationship between these quantities is
+ given by \delta f = g \delta x.
+
+ -- Function: int gsl_multimin_test_size (const double SIZE, double
+ EPSABS)
+ This function tests the minimizer specific characteristic size (if
+ applicable to the used minimizer) against absolute tolerance
+ EPSABS. The test returns `GSL_SUCCESS' if the size is smaller
+ than tolerance, otherwise `GSL_CONTINUE' is returned.
+
+
+File: gsl-ref.info, Node: Multimin Algorithms, Next: Multimin Examples, Prev: Multimin Stopping Criteria, Up: Multidimensional Minimization
+
+35.7 Algorithms
+===============
+
+There are several minimization methods available. The best choice of
+algorithm depends on the problem. All of the algorithms use the value
+of the function and its gradient at each evaluation point, except for
+the Simplex algorithm which uses function values only.
+
+ -- Minimizer: gsl_multimin_fdfminimizer_conjugate_fr
+ This is the Fletcher-Reeves conjugate gradient algorithm. The
+ conjugate gradient algorithm proceeds as a succession of line
+ minimizations. The sequence of search directions is used to build
+ up an approximation to the curvature of the function in the
+ neighborhood of the minimum.
+
+ An initial search direction P is chosen using the gradient, and
+ line minimization is carried out in that direction. The accuracy
+ of the line minimization is specified by the parameter TOL. The
+ minimum along this line occurs when the function gradient G and
+ the search direction P are orthogonal. The line minimization
+ terminates when dot(p,g) < tol |p| |g|. The search direction is
+ updated using the Fletcher-Reeves formula p' = g' - \beta g where
+ \beta=-|g'|^2/|g|^2, and the line minimization is then repeated
+ for the new search direction.
+
+ -- Minimizer: gsl_multimin_fdfminimizer_conjugate_pr
+ This is the Polak-Ribiere conjugate gradient algorithm. It is
+ similar to the Fletcher-Reeves method, differing only in the
+ choice of the coefficient \beta. Both methods work well when the
+ evaluation point is close enough to the minimum of the objective
+ function that it is well approximated by a quadratic hypersurface.
+
+ -- Minimizer: gsl_multimin_fdfminimizer_vector_bfgs2
+ -- Minimizer: gsl_multimin_fdfminimizer_vector_bfgs
+ These methods use the vector Broyden-Fletcher-Goldfarb-Shanno
+ (BFGS) algorithm. This is a quasi-Newton method which builds up
+ an approximation to the second derivatives of the function f using
+ the difference between successive gradient vectors. By combining
+ the first and second derivatives the algorithm is able to take
+ Newton-type steps towards the function minimum, assuming quadratic
+ behavior in that region.
+
+ The `bfgs2' version of this minimizer is the most efficient
+ version available, and is a faithful implementation of the line
+ minimization scheme described in Fletcher's `Practical Methods of
+ Optimization', Algorithms 2.6.2 and 2.6.4. It supercedes the
+ original `bfgs' routine and requires substantially fewer function
+ and gradient evaluations. The user-supplied tolerance TOL
+ corresponds to the parameter \sigma used by Fletcher. A value of
+ 0.1 is recommended for typical use (larger values correspond to
+ less accurate line searches).
+
+
+ -- Minimizer: gsl_multimin_fdfminimizer_steepest_descent
+ The steepest descent algorithm follows the downhill gradient of the
+ function at each step. When a downhill step is successful the
+ step-size is increased by a factor of two. If the downhill step
+ leads to a higher function value then the algorithm backtracks and
+ the step size is decreased using the parameter TOL. A suitable
+ value of TOL for most applications is 0.1. The steepest descent
+ method is inefficient and is included only for demonstration
+ purposes.
+
+ -- Minimizer: gsl_multimin_fminimizer_nmsimplex
+ This is the Simplex algorithm of Nelder and Mead. It constructs n
+ vectors p_i from the starting vector X and the vector STEP_SIZE as
+ follows:
+
+ p_0 = (x_0, x_1, ... , x_n)
+ p_1 = (x_0 + step_size_0, x_1, ... , x_n)
+ p_2 = (x_0, x_1 + step_size_1, ... , x_n)
+ ... = ...
+ p_n = (x_0, x_1, ... , x_n+step_size_n)
+
+ These vectors form the n+1 vertices of a simplex in n dimensions.
+ On each iteration the algorithm tries to improve the parameter
+ vector p_i corresponding to the highest function value by simple
+ geometrical transformations. These are reflection, reflection
+ followed by expansion, contraction and multiple contraction. Using
+ these transformations the simplex moves through the parameter
+ space towards the minimum, where it contracts itself.
+
+ After each iteration, the best vertex is returned. Note, that due
+ to the nature of the algorithm not every step improves the current
+ best parameter vector. Usually several iterations are required.
+
+ The routine calculates the minimizer specific characteristic size
+ as the average distance from the geometrical center of the simplex
+ to all its vertices. This size can be used as a stopping
+ criteria, as the simplex contracts itself near the minimum. The
+ size is returned by the function `gsl_multimin_fminimizer_size'.
+
+
+File: gsl-ref.info, Node: Multimin Examples, Next: Multimin References and Further Reading, Prev: Multimin Algorithms, Up: Multidimensional Minimization
+
+35.8 Examples
+=============
+
+This example program finds the minimum of the paraboloid function
+defined earlier. The location of the minimum is offset from the origin
+in x and y, and the function value at the minimum is non-zero. The main
+program is given below, it requires the example function given earlier
+in this chapter.
+
+ int
+ main (void)
+ {
+ size_t iter = 0;
+ int status;
+
+ const gsl_multimin_fdfminimizer_type *T;
+ gsl_multimin_fdfminimizer *s;
+
+ /* Position of the minimum (1,2). */
+ double par[2] = { 1.0, 2.0 };
+
+ gsl_vector *x;
+ gsl_multimin_function_fdf my_func;
+
+ my_func.f = &my_f;
+ my_func.df = &my_df;
+ my_func.fdf = &my_fdf;
+ my_func.n = 2;
+ my_func.params = &par;
+
+ /* Starting point, x = (5,7) */
+ x = gsl_vector_alloc (2);
+ gsl_vector_set (x, 0, 5.0);
+ gsl_vector_set (x, 1, 7.0);
+
+ T = gsl_multimin_fdfminimizer_conjugate_fr;
+ s = gsl_multimin_fdfminimizer_alloc (T, 2);
+
+ gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4);
+
+ do
+ {
+ iter++;
+ status = gsl_multimin_fdfminimizer_iterate (s);
+
+ if (status)
+ break;
+
+ status = gsl_multimin_test_gradient (s->gradient, 1e-3);
+
+ if (status == GSL_SUCCESS)
+ printf ("Minimum found at:\n");
+
+ printf ("%5d %.5f %.5f %10.5f\n", iter,
+ gsl_vector_get (s->x, 0),
+ gsl_vector_get (s->x, 1),
+ s->f);
+
+ }
+ while (status == GSL_CONTINUE && iter < 100);
+
+ gsl_multimin_fdfminimizer_free (s);
+ gsl_vector_free (x);
+
+ return 0;
+ }
+
+The initial step-size is chosen as 0.01, a conservative estimate in this
+case, and the line minimization parameter is set at 0.0001. The program
+terminates when the norm of the gradient has been reduced below 0.001.
+The output of the program is shown below,
+
+ x y f
+ 1 4.99629 6.99072 687.84780
+ 2 4.98886 6.97215 683.55456
+ 3 4.97400 6.93501 675.01278
+ 4 4.94429 6.86073 658.10798
+ 5 4.88487 6.71217 625.01340
+ 6 4.76602 6.41506 561.68440
+ 7 4.52833 5.82083 446.46694
+ 8 4.05295 4.63238 261.79422
+ 9 3.10219 2.25548 75.49762
+ 10 2.85185 1.62963 67.03704
+ 11 2.19088 1.76182 45.31640
+ 12 0.86892 2.02622 30.18555
+ Minimum found at:
+ 13 1.00000 2.00000 30.00000
+
+Note that the algorithm gradually increases the step size as it
+successfully moves downhill, as can be seen by plotting the successive
+points.
+
+The conjugate gradient algorithm finds the minimum on its second
+direction because the function is purely quadratic. Additional
+iterations would be needed for a more complicated function.
+
+ Here is another example using the Nelder-Mead Simplex algorithm to
+minimize the same example object function, as above.
+
+ int
+ main(void)
+ {
+ size_t np = 2;
+ double par[2] = {1.0, 2.0};
+
+ const gsl_multimin_fminimizer_type *T =
+ gsl_multimin_fminimizer_nmsimplex;
+ gsl_multimin_fminimizer *s = NULL;
+ gsl_vector *ss, *x;
+ gsl_multimin_function minex_func;
+
+ size_t iter = 0, i;
+ int status;
+ double size;
+
+ /* Initial vertex size vector */
+ ss = gsl_vector_alloc (np);
+
+ /* Set all step sizes to 1 */
+ gsl_vector_set_all (ss, 1.0);
+
+ /* Starting point */
+ x = gsl_vector_alloc (np);
+
+ gsl_vector_set (x, 0, 5.0);
+ gsl_vector_set (x, 1, 7.0);
+
+ /* Initialize method and iterate */
+ minex_func.f = &my_f;
+ minex_func.n = np;
+ minex_func.params = (void *)&par;
+
+ s = gsl_multimin_fminimizer_alloc (T, np);
+ gsl_multimin_fminimizer_set (s, &minex_func, x, ss);
+
+ do
+ {
+ iter++;
+ status = gsl_multimin_fminimizer_iterate(s);
+
+ if (status)
+ break;
+
+ size = gsl_multimin_fminimizer_size (s);
+ status = gsl_multimin_test_size (size, 1e-2);
+
+ if (status == GSL_SUCCESS)
+ {
+ printf ("converged to minimum at\n");
+ }
+
+ printf ("%5d ", iter);
+ for (i = 0; i < np; i++)
+ {
+ printf ("%10.3e ", gsl_vector_get (s->x, i));
+ }
+ printf ("f() = %7.3f size = %.3f\n", s->fval, size);
+ }
+ while (status == GSL_CONTINUE && iter < 100);
+
+ gsl_vector_free(x);
+ gsl_vector_free(ss);
+ gsl_multimin_fminimizer_free (s);
+
+ return status;
+ }
+
+The minimum search stops when the Simplex size drops to 0.01. The
+output is shown below.
+
+ 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.082
+ 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.372
+ 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.372
+ 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.372
+ 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.823
+ 6 3.469e+00 1.375e+00 f() = 98.760 size = 1.526
+ 7 1.820e+00 3.156e+00 f() = 63.467 size = 1.105
+ 8 1.820e+00 3.156e+00 f() = 63.467 size = 1.105
+ 9 1.016e+00 2.812e+00 f() = 43.206 size = 1.105
+ 10 2.041e+00 2.008e+00 f() = 40.838 size = 0.645
+ 11 1.236e+00 1.664e+00 f() = 32.816 size = 0.645
+ 12 1.236e+00 1.664e+00 f() = 32.816 size = 0.447
+ 13 5.225e-01 1.980e+00 f() = 32.288 size = 0.447
+ 14 1.103e+00 2.073e+00 f() = 30.214 size = 0.345
+ 15 1.103e+00 2.073e+00 f() = 30.214 size = 0.264
+ 16 1.103e+00 2.073e+00 f() = 30.214 size = 0.160
+ 17 9.864e-01 1.934e+00 f() = 30.090 size = 0.132
+ 18 9.190e-01 1.987e+00 f() = 30.069 size = 0.092
+ 19 1.028e+00 2.017e+00 f() = 30.013 size = 0.056
+ 20 1.028e+00 2.017e+00 f() = 30.013 size = 0.046
+ 21 1.028e+00 2.017e+00 f() = 30.013 size = 0.033
+ 22 9.874e-01 1.985e+00 f() = 30.006 size = 0.028
+ 23 9.846e-01 1.995e+00 f() = 30.003 size = 0.023
+ 24 1.007e+00 2.003e+00 f() = 30.001 size = 0.012
+ converged to minimum at
+ 25 1.007e+00 2.003e+00 f() = 30.001 size = 0.010
+
+The simplex size first increases, while the simplex moves towards the
+minimum. After a while the size begins to decrease as the simplex
+contracts around the minimum.
+
+
+File: gsl-ref.info, Node: Multimin References and Further Reading, Prev: Multimin Examples, Up: Multidimensional Minimization
+
+35.9 References and Further Reading
+===================================
+
+The conjugate gradient and BFGS methods are described in detail in the
+following book,
+
+ R. Fletcher, `Practical Methods of Optimization (Second Edition)'
+ Wiley (1987), ISBN 0471915475.
+
+ A brief description of multidimensional minimization algorithms and
+more recent references can be found in,
+
+ C.W. Ueberhuber, `Numerical Computation (Volume 2)', Chapter 14,
+ Section 4.4 "Minimization Methods", p. 325-335, Springer (1997),
+ ISBN 3-540-62057-5.
+
+The simplex algorithm is described in the following paper,
+
+ J.A. Nelder and R. Mead, `A simplex method for function
+ minimization', Computer Journal vol. 7 (1965), 308-315.
+
+
+
+File: gsl-ref.info, Node: Least-Squares Fitting, Next: Nonlinear Least-Squares Fitting, Prev: Multidimensional Minimization, Up: Top
+
+36 Least-Squares Fitting
+************************
+
+This chapter describes routines for performing least squares fits to
+experimental data using linear combinations of functions. The data may
+be weighted or unweighted, i.e. with known or unknown errors. For
+weighted data the functions compute the best fit parameters and their
+associated covariance matrix. For unweighted data the covariance
+matrix is estimated from the scatter of the points, giving a
+variance-covariance matrix.
+
+ The functions are divided into separate versions for simple one- or
+two-parameter regression and multiple-parameter fits. The functions
+are declared in the header file `gsl_fit.h'.
+
+* Menu:
+
+* Fitting Overview::
+* Linear regression::
+* Linear fitting without a constant term::
+* Multi-parameter fitting::
+* Fitting Examples::
+* Fitting References and Further Reading::
+
+
+File: gsl-ref.info, Node: Fitting Overview, Next: Linear regression, Up: Least-Squares Fitting
+
+36.1 Overview
+=============
+
+Least-squares fits are found by minimizing \chi^2 (chi-squared), the
+weighted sum of squared residuals over n experimental datapoints (x_i,
+y_i) for the model Y(c,x),
+
+ \chi^2 = \sum_i w_i (y_i - Y(c, x_i))^2
+
+The p parameters of the model are c = {c_0, c_1, ...}. The weight
+factors w_i are given by w_i = 1/\sigma_i^2, where \sigma_i is the
+experimental error on the data-point y_i. The errors are assumed to be
+gaussian and uncorrelated. For unweighted data the chi-squared sum is
+computed without any weight factors.
+
+ The fitting routines return the best-fit parameters c and their p
+\times p covariance matrix. The covariance matrix measures the
+statistical errors on the best-fit parameters resulting from the errors
+on the data, \sigma_i, and is defined as C_{ab} = <\delta c_a \delta
+c_b> where < > denotes an average over the gaussian error distributions
+of the underlying datapoints.
+
+ The covariance matrix is calculated by error propagation from the
+data errors \sigma_i. The change in a fitted parameter \delta c_a
+caused by a small change in the data \delta y_i is given by
+
+ \delta c_a = \sum_i (dc_a/dy_i) \delta y_i
+
+allowing the covariance matrix to be written in terms of the errors on
+the data,
+
+ C_{ab} = \sum_{i,j} (dc_a/dy_i) (dc_b/dy_j) <\delta y_i \delta y_j>
+
+For uncorrelated data the fluctuations of the underlying datapoints
+satisfy <\delta y_i \delta y_j> = \sigma_i^2 \delta_{ij}, giving a
+corresponding parameter covariance matrix of
+
+ C_{ab} = \sum_i (1/w_i) (dc_a/dy_i) (dc_b/dy_i)
+
+When computing the covariance matrix for unweighted data, i.e. data
+with unknown errors, the weight factors w_i in this sum are replaced by
+the single estimate w = 1/\sigma^2, where \sigma^2 is the computed
+variance of the residuals about the best-fit model, \sigma^2 = \sum
+(y_i - Y(c,x_i))^2 / (n-p). This is referred to as the
+"variance-covariance matrix".
+
+ The standard deviations of the best-fit parameters are given by the
+square root of the corresponding diagonal elements of the covariance
+matrix, \sigma_{c_a} = \sqrt{C_{aa}}.
+
+
+File: gsl-ref.info, Node: Linear regression, Next: Linear fitting without a constant term, Prev: Fitting Overview, Up: Least-Squares Fitting
+
+36.2 Linear regression
+======================
+
+The functions described in this section can be used to perform
+least-squares fits to a straight line model, Y(c,x) = c_0 + c_1 x.
+
+ -- Function: int gsl_fit_linear (const double * X, const size_t
+ XSTRIDE, const double * Y, const size_t YSTRIDE, size_t N,
+ double * C0, double * C1, double * COV00, double * COV01,
+ double * COV11, double * SUMSQ)
+ This function computes the best-fit linear regression coefficients
+ (C0,C1) of the model Y = c_0 + c_1 X for the dataset (X, Y), two
+ vectors of length N with strides XSTRIDE and YSTRIDE. The errors
+ on Y are assumed unknown so the variance-covariance matrix for the
+ parameters (C0, C1) is estimated from the scatter of the points
+ around the best-fit line and returned via the parameters (COV00,
+ COV01, COV11). The sum of squares of the residuals from the
+ best-fit line is returned in SUMSQ.
+
+ -- Function: int gsl_fit_wlinear (const double * X, const size_t
+ XSTRIDE, const double * W, const size_t WSTRIDE, const double
+ * Y, const size_t YSTRIDE, size_t N, double * C0, double *
+ C1, double * COV00, double * COV01, double * COV11, double *
+ CHISQ)
+ This function computes the best-fit linear regression coefficients
+ (C0,C1) of the model Y = c_0 + c_1 X for the weighted dataset (X,
+ Y), two vectors of length N with strides XSTRIDE and YSTRIDE. The
+ vector W, of length N and stride WSTRIDE, specifies the weight of
+ each datapoint. The weight is the reciprocal of the variance for
+ each datapoint in Y.
+
+ The covariance matrix for the parameters (C0, C1) is computed
+ using the weights and returned via the parameters (COV00, COV01,
+ COV11). The weighted sum of squares of the residuals from the
+ best-fit line, \chi^2, is returned in CHISQ.
+
+ -- Function: int gsl_fit_linear_est (double X, double C0, double C1,
+ double C00, double C01, double C11, double * Y, double *
+ Y_ERR)
+ This function uses the best-fit linear regression coefficients
+ C0,C1 and their covariance COV00,COV01,COV11 to compute the fitted
+ function Y and its standard deviation Y_ERR for the model Y = c_0
+ + c_1 X at the point X.
+
diff --git a/gsl-1.9/doc/gsl-ref.info-4 b/gsl-1.9/doc/gsl-ref.info-4
new file mode 100644
index 0000000..cedfd25
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info-4
@@ -0,0 +1,4426 @@
+This is gsl-ref.info, produced by makeinfo version 4.8 from
+gsl-ref.texi.
+
+INFO-DIR-SECTION Scientific software
+START-INFO-DIR-ENTRY
+* gsl-ref: (gsl-ref). GNU Scientific Library - Reference
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+2005, 2006, 2007 The GSL Team.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "GNU General Public License" and "Free Software
+Needs Free Documentation", the Front-Cover text being "A GNU Manual",
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled "GNU Free Documentation
+License".
+
+ (a) The Back-Cover Text is: "You have freedom to copy and modify this
+GNU Manual, like GNU software."
+
+
+File: gsl-ref.info, Node: Linear fitting without a constant term, Next: Multi-parameter fitting, Prev: Linear regression, Up: Least-Squares Fitting
+
+36.3 Linear fitting without a constant term
+===========================================
+
+The functions described in this section can be used to perform
+least-squares fits to a straight line model without a constant term, Y
+= c_1 X.
+
+ -- Function: int gsl_fit_mul (const double * X, const size_t XSTRIDE,
+ const double * Y, const size_t YSTRIDE, size_t N, double *
+ C1, double * COV11, double * SUMSQ)
+ This function computes the best-fit linear regression coefficient
+ C1 of the model Y = c_1 X for the datasets (X, Y), two vectors of
+ length N with strides XSTRIDE and YSTRIDE. The errors on Y are
+ assumed unknown so the variance of the parameter C1 is estimated
+ from the scatter of the points around the best-fit line and
+ returned via the parameter COV11. The sum of squares of the
+ residuals from the best-fit line is returned in SUMSQ.
+
+ -- Function: int gsl_fit_wmul (const double * X, const size_t XSTRIDE,
+ const double * W, const size_t WSTRIDE, const double * Y,
+ const size_t YSTRIDE, size_t N, double * C1, double * COV11,
+ double * SUMSQ)
+ This function computes the best-fit linear regression coefficient
+ C1 of the model Y = c_1 X for the weighted datasets (X, Y), two
+ vectors of length N with strides XSTRIDE and YSTRIDE. The vector
+ W, of length N and stride WSTRIDE, specifies the weight of each
+ datapoint. The weight is the reciprocal of the variance for each
+ datapoint in Y.
+
+ The variance of the parameter C1 is computed using the weights and
+ returned via the parameter COV11. The weighted sum of squares of
+ the residuals from the best-fit line, \chi^2, is returned in CHISQ.
+
+ -- Function: int gsl_fit_mul_est (double X, double C1, double C11,
+ double * Y, double * Y_ERR)
+ This function uses the best-fit linear regression coefficient C1
+ and its covariance COV11 to compute the fitted function Y and its
+ standard deviation Y_ERR for the model Y = c_1 X at the point X.
+
+
+File: gsl-ref.info, Node: Multi-parameter fitting, Next: Fitting Examples, Prev: Linear fitting without a constant term, Up: Least-Squares Fitting
+
+36.4 Multi-parameter fitting
+============================
+
+The functions described in this section perform least-squares fits to a
+general linear model, y = X c where y is a vector of n observations, X
+is an n by p matrix of predictor variables, and the elements of the
+vector c are the p unknown best-fit parameters which are to be
+estimated. The chi-squared value is given by \chi^2 = \sum_i w_i (y_i
+- \sum_j X_{ij} c_j)^2.
+
+ This formulation can be used for fits to any number of functions
+and/or variables by preparing the n-by-p matrix X appropriately. For
+example, to fit to a p-th order polynomial in X, use the following
+matrix,
+
+ X_{ij} = x_i^j
+
+where the index i runs over the observations and the index j runs from
+0 to p-1.
+
+ To fit to a set of p sinusoidal functions with fixed frequencies
+\omega_1, \omega_2, ..., \omega_p, use,
+
+ X_{ij} = sin(\omega_j x_i)
+
+To fit to p independent variables x_1, x_2, ..., x_p, use,
+
+ X_{ij} = x_j(i)
+
+where x_j(i) is the i-th value of the predictor variable x_j.
+
+ The functions described in this section are declared in the header
+file `gsl_multifit.h'.
+
+ The solution of the general linear least-squares system requires an
+additional working space for intermediate results, such as the singular
+value decomposition of the matrix X.
+
+ -- Function: gsl_multifit_linear_workspace * gsl_multifit_linear_alloc
+ (size_t N, size_t P)
+ This function allocates a workspace for fitting a model to N
+ observations using P parameters.
+
+ -- Function: void gsl_multifit_linear_free
+ (gsl_multifit_linear_workspace * WORK)
+ This function frees the memory associated with the workspace W.
+
+ -- Function: int gsl_multifit_linear (const gsl_matrix * X, const
+ gsl_vector * Y, gsl_vector * C, gsl_matrix * COV, double *
+ CHISQ, gsl_multifit_linear_workspace * WORK)
+ -- Function: int gsl_multifit_linear_svd (const gsl_matrix * X, const
+ gsl_vector * Y, double TOL, size_t * RANK, gsl_vector * C,
+ gsl_matrix * COV, double * CHISQ,
+ gsl_multifit_linear_workspace * WORK)
+ These functions compute the best-fit parameters C of the model y =
+ X c for the observations Y and the matrix of predictor variables
+ X. The variance-covariance matrix of the model parameters COV is
+ estimated from the scatter of the observations about the best-fit.
+ The sum of squares of the residuals from the best-fit, \chi^2, is
+ returned in CHISQ.
+
+ The best-fit is found by singular value decomposition of the matrix
+ X using the preallocated workspace provided in WORK. The modified
+ Golub-Reinsch SVD algorithm is used, with column scaling to
+ improve the accuracy of the singular values. Any components which
+ have zero singular value (to machine precision) are discarded from
+ the fit. In the second form of the function the components are
+ discarded if the ratio of singular values s_i/s_0 falls below the
+ user-specified tolerance TOL, and the effective rank is returned
+ in RANK.
+
+ -- Function: int gsl_multifit_wlinear (const gsl_matrix * X, const
+ gsl_vector * W, const gsl_vector * Y, gsl_vector * C,
+ gsl_matrix * COV, double * CHISQ,
+ gsl_multifit_linear_workspace * WORK)
+ -- Function: int gsl_multifit_wlinear_svd (const gsl_matrix * X, const
+ gsl_vector * W, const gsl_vector * Y, double TOL, size_t *
+ RANK, gsl_vector * C, gsl_matrix * COV, double * CHISQ,
+ gsl_multifit_linear_workspace * WORK)
+ This function computes the best-fit parameters C of the weighted
+ model y = X c for the observations Y with weights W and the matrix
+ of predictor variables X. The covariance matrix of the model
+ parameters COV is computed with the given weights. The weighted
+ sum of squares of the residuals from the best-fit, \chi^2, is
+ returned in CHISQ.
+
+ The best-fit is found by singular value decomposition of the matrix
+ X using the preallocated workspace provided in WORK. Any
+ components which have zero singular value (to machine precision)
+ are discarded from the fit. In the second form of the function the
+ components are discarded if the ratio of singular values s_i/s_0
+ falls below the user-specified tolerance TOL, and the effective
+ rank is returned in RANK.
+
+ -- Function: int gsl_multifit_linear_est (const gsl_vector * X, const
+ gsl_vector * C, const gsl_matrix * COV, double * Y, double *
+ Y_ERR)
+ This function uses the best-fit multilinear regression coefficients
+ C and their covariance matrix COV to compute the fitted function
+ value Y and its standard deviation Y_ERR for the model y = x.c at
+ the point X.
+
+
+File: gsl-ref.info, Node: Fitting Examples, Next: Fitting References and Further Reading, Prev: Multi-parameter fitting, Up: Least-Squares Fitting
+
+36.5 Examples
+=============
+
+The following program computes a least squares straight-line fit to a
+simple dataset, and outputs the best-fit line and its associated one
+standard-deviation error bars.
+
+ #include <stdio.h>
+ #include <gsl/gsl_fit.h>
+
+ int
+ main (void)
+ {
+ int i, n = 4;
+ double x[4] = { 1970, 1980, 1990, 2000 };
+ double y[4] = { 12, 11, 14, 13 };
+ double w[4] = { 0.1, 0.2, 0.3, 0.4 };
+
+ double c0, c1, cov00, cov01, cov11, chisq;
+
+ gsl_fit_wlinear (x, 1, w, 1, y, 1, n,
+ &c0, &c1, &cov00, &cov01, &cov11,
+ &chisq);
+
+ printf ("# best fit: Y = %g + %g X\n", c0, c1);
+ printf ("# covariance matrix:\n");
+ printf ("# [ %g, %g\n# %g, %g]\n",
+ cov00, cov01, cov01, cov11);
+ printf ("# chisq = %g\n", chisq);
+
+ for (i = 0; i < n; i++)
+ printf ("data: %g %g %g\n",
+ x[i], y[i], 1/sqrt(w[i]));
+
+ printf ("\n");
+
+ for (i = -30; i < 130; i++)
+ {
+ double xf = x[0] + (i/100.0) * (x[n-1] - x[0]);
+ double yf, yf_err;
+
+ gsl_fit_linear_est (xf,
+ c0, c1,
+ cov00, cov01, cov11,
+ &yf, &yf_err);
+
+ printf ("fit: %g %g\n", xf, yf);
+ printf ("hi : %g %g\n", xf, yf + yf_err);
+ printf ("lo : %g %g\n", xf, yf - yf_err);
+ }
+ return 0;
+ }
+
+The following commands extract the data from the output of the program
+and display it using the GNU plotutils `graph' utility,
+
+ $ ./demo > tmp
+ $ more tmp
+ # best fit: Y = -106.6 + 0.06 X
+ # covariance matrix:
+ # [ 39602, -19.9
+ # -19.9, 0.01]
+ # chisq = 0.8
+
+ $ for n in data fit hi lo ;
+ do
+ grep "^$n" tmp | cut -d: -f2 > $n ;
+ done
+ $ graph -T X -X x -Y y -y 0 20 -m 0 -S 2 -Ie data
+ -S 0 -I a -m 1 fit -m 2 hi -m 2 lo
+
+ The next program performs a quadratic fit y = c_0 + c_1 x + c_2 x^2
+to a weighted dataset using the generalised linear fitting function
+`gsl_multifit_wlinear'. The model matrix X for a quadratic fit is
+given by,
+
+ X = [ 1 , x_0 , x_0^2 ;
+ 1 , x_1 , x_1^2 ;
+ 1 , x_2 , x_2^2 ;
+ ... , ... , ... ]
+
+where the column of ones corresponds to the constant term c_0. The two
+remaining columns corresponds to the terms c_1 x and c_2 x^2.
+
+ The program reads N lines of data in the format (X, Y, ERR) where
+ERR is the error (standard deviation) in the value Y.
+
+ #include <stdio.h>
+ #include <gsl/gsl_multifit.h>
+
+ int
+ main (int argc, char **argv)
+ {
+ int i, n;
+ double xi, yi, ei, chisq;
+ gsl_matrix *X, *cov;
+ gsl_vector *y, *w, *c;
+
+ if (argc != 2)
+ {
+ fprintf (stderr,"usage: fit n < data\n");
+ exit (-1);
+ }
+
+ n = atoi (argv[1]);
+
+ X = gsl_matrix_alloc (n, 3);
+ y = gsl_vector_alloc (n);
+ w = gsl_vector_alloc (n);
+
+ c = gsl_vector_alloc (3);
+ cov = gsl_matrix_alloc (3, 3);
+
+ for (i = 0; i < n; i++)
+ {
+ int count = fscanf (stdin, "%lg %lg %lg",
+ &xi, &yi, &ei);
+
+ if (count != 3)
+ {
+ fprintf (stderr, "error reading file\n");
+ exit (-1);
+ }
+
+ printf ("%g %g +/- %g\n", xi, yi, ei);
+
+ gsl_matrix_set (X, i, 0, 1.0);
+ gsl_matrix_set (X, i, 1, xi);
+ gsl_matrix_set (X, i, 2, xi*xi);
+
+ gsl_vector_set (y, i, yi);
+ gsl_vector_set (w, i, 1.0/(ei*ei));
+ }
+
+ {
+ gsl_multifit_linear_workspace * work
+ = gsl_multifit_linear_alloc (n, 3);
+ gsl_multifit_wlinear (X, w, y, c, cov,
+ &chisq, work);
+ gsl_multifit_linear_free (work);
+ }
+
+ #define C(i) (gsl_vector_get(c,(i)))
+ #define COV(i,j) (gsl_matrix_get(cov,(i),(j)))
+
+ {
+ printf ("# best fit: Y = %g + %g X + %g X^2\n",
+ C(0), C(1), C(2));
+
+ printf ("# covariance matrix:\n");
+ printf ("[ %+.5e, %+.5e, %+.5e \n",
+ COV(0,0), COV(0,1), COV(0,2));
+ printf (" %+.5e, %+.5e, %+.5e \n",
+ COV(1,0), COV(1,1), COV(1,2));
+ printf (" %+.5e, %+.5e, %+.5e ]\n",
+ COV(2,0), COV(2,1), COV(2,2));
+ printf ("# chisq = %g\n", chisq);
+ }
+
+ gsl_matrix_free (X);
+ gsl_vector_free (y);
+ gsl_vector_free (w);
+ gsl_vector_free (c);
+ gsl_matrix_free (cov);
+
+ return 0;
+ }
+
+A suitable set of data for fitting can be generated using the following
+program. It outputs a set of points with gaussian errors from the curve
+y = e^x in the region 0 < x < 2.
+
+ #include <stdio.h>
+ #include <math.h>
+ #include <gsl/gsl_randist.h>
+
+ int
+ main (void)
+ {
+ double x;
+ const gsl_rng_type * T;
+ gsl_rng * r;
+
+ gsl_rng_env_setup ();
+
+ T = gsl_rng_default;
+ r = gsl_rng_alloc (T);
+
+ for (x = 0.1; x < 2; x+= 0.1)
+ {
+ double y0 = exp (x);
+ double sigma = 0.1 * y0;
+ double dy = gsl_ran_gaussian (r, sigma);
+
+ printf ("%g %g %g\n", x, y0 + dy, sigma);
+ }
+
+ gsl_rng_free(r);
+
+ return 0;
+ }
+
+The data can be prepared by running the resulting executable program,
+
+ $ ./generate > exp.dat
+ $ more exp.dat
+ 0.1 0.97935 0.110517
+ 0.2 1.3359 0.12214
+ 0.3 1.52573 0.134986
+ 0.4 1.60318 0.149182
+ 0.5 1.81731 0.164872
+ 0.6 1.92475 0.182212
+ ....
+
+To fit the data use the previous program, with the number of data points
+given as the first argument. In this case there are 19 data points.
+
+ $ ./fit 19 < exp.dat
+ 0.1 0.97935 +/- 0.110517
+ 0.2 1.3359 +/- 0.12214
+ ...
+ # best fit: Y = 1.02318 + 0.956201 X + 0.876796 X^2
+ # covariance matrix:
+ [ +1.25612e-02, -3.64387e-02, +1.94389e-02
+ -3.64387e-02, +1.42339e-01, -8.48761e-02
+ +1.94389e-02, -8.48761e-02, +5.60243e-02 ]
+ # chisq = 23.0987
+
+The parameters of the quadratic fit match the coefficients of the
+expansion of e^x, taking into account the errors on the parameters and
+the O(x^3) difference between the exponential and quadratic functions
+for the larger values of x. The errors on the parameters are given by
+the square-root of the corresponding diagonal elements of the
+covariance matrix. The chi-squared per degree of freedom is 1.4,
+indicating a reasonable fit to the data.
+
+
+File: gsl-ref.info, Node: Fitting References and Further Reading, Prev: Fitting Examples, Up: Least-Squares Fitting
+
+36.6 References and Further Reading
+===================================
+
+A summary of formulas and techniques for least squares fitting can be
+found in the "Statistics" chapter of the Annual Review of Particle
+Physics prepared by the Particle Data Group,
+
+ `Review of Particle Properties', R.M. Barnett et al., Physical
+ Review D54, 1 (1996) `http://pdg.lbl.gov/'
+
+The Review of Particle Physics is available online at the website given
+above.
+
+ The tests used to prepare these routines are based on the NIST
+Statistical Reference Datasets. The datasets and their documentation are
+available from NIST at the following website,
+
+ `http://www.nist.gov/itl/div898/strd/index.html'.
+
+
+File: gsl-ref.info, Node: Nonlinear Least-Squares Fitting, Next: Basis Splines, Prev: Least-Squares Fitting, Up: Top
+
+37 Nonlinear Least-Squares Fitting
+**********************************
+
+This chapter describes functions for multidimensional nonlinear
+least-squares fitting. The library provides low level components for a
+variety of iterative solvers and convergence tests. These can be
+combined by the user to achieve the desired solution, with full access
+to the intermediate steps of the iteration. Each class of methods uses
+the same framework, so that you can switch between solvers at runtime
+without needing to recompile your program. Each instance of a solver
+keeps track of its own state, allowing the solvers to be used in
+multi-threaded programs.
+
+ The header file `gsl_multifit_nlin.h' contains prototypes for the
+multidimensional nonlinear fitting functions and related declarations.
+
+* Menu:
+
+* Overview of Nonlinear Least-Squares Fitting::
+* Initializing the Nonlinear Least-Squares Solver::
+* Providing the Function to be Minimized::
+* Iteration of the Minimization Algorithm::
+* Search Stopping Parameters for Minimization Algorithms::
+* Minimization Algorithms using Derivatives::
+* Minimization Algorithms without Derivatives::
+* Computing the covariance matrix of best fit parameters::
+* Example programs for Nonlinear Least-Squares Fitting::
+* References and Further Reading for Nonlinear Least-Squares Fitting::
+
+
+File: gsl-ref.info, Node: Overview of Nonlinear Least-Squares Fitting, Next: Initializing the Nonlinear Least-Squares Solver, Up: Nonlinear Least-Squares Fitting
+
+37.1 Overview
+=============
+
+The problem of multidimensional nonlinear least-squares fitting requires
+the minimization of the squared residuals of n functions, f_i, in p
+parameters, x_i,
+
+ \Phi(x) = (1/2) || F(x) ||^2
+ = (1/2) \sum_{i=1}^{n} f_i(x_1, ..., x_p)^2
+
+All algorithms proceed from an initial guess using the linearization,
+
+ \psi(p) = || F(x+p) || ~=~ || F(x) + J p ||
+
+where x is the initial point, p is the proposed step and J is the
+Jacobian matrix J_{ij} = d f_i / d x_j. Additional strategies are used
+to enlarge the region of convergence. These include requiring a
+decrease in the norm ||F|| on each step or using a trust region to
+avoid steps which fall outside the linear regime.
+
+ To perform a weighted least-squares fit of a nonlinear model Y(x,t)
+to data (t_i, y_i) with independent gaussian errors \sigma_i, use
+function components of the following form,
+
+ f_i = (Y(x, t_i) - y_i) / \sigma_i
+
+Note that the model parameters are denoted by x in this chapter since
+the non-linear least-squares algorithms are described geometrically
+(i.e. finding the minimum of a surface). The independent variable of
+any data to be fitted is denoted by t.
+
+ With the definition above the Jacobian is J_{ij} =(1 / \sigma_i) d
+Y_i / d x_j, where Y_i = Y(x,t_i).
+
+
+File: gsl-ref.info, Node: Initializing the Nonlinear Least-Squares Solver, Next: Providing the Function to be Minimized, Prev: Overview of Nonlinear Least-Squares Fitting, Up: Nonlinear Least-Squares Fitting
+
+37.2 Initializing the Solver
+============================
+
+ -- Function: gsl_multifit_fsolver * gsl_multifit_fsolver_alloc (const
+ gsl_multifit_fsolver_type * T, size_t N, size_t P)
+ This function returns a pointer to a newly allocated instance of a
+ solver of type T for N observations and P parameters. The number
+ of observations N must be greater than or equal to parameters P.
+
+ If there is insufficient memory to create the solver then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: gsl_multifit_fdfsolver * gsl_multifit_fdfsolver_alloc
+ (const gsl_multifit_fdfsolver_type * T, size_t N, size_t P)
+ This function returns a pointer to a newly allocated instance of a
+ derivative solver of type T for N observations and P parameters.
+ For example, the following code creates an instance of a
+ Levenberg-Marquardt solver for 100 data points and 3 parameters,
+
+ const gsl_multifit_fdfsolver_type * T
+ = gsl_multifit_fdfsolver_lmder;
+ gsl_multifit_fdfsolver * s
+ = gsl_multifit_fdfsolver_alloc (T, 100, 3);
+
+ The number of observations N must be greater than or equal to
+ parameters P.
+
+ If there is insufficient memory to create the solver then the
+ function returns a null pointer and the error handler is invoked
+ with an error code of `GSL_ENOMEM'.
+
+ -- Function: int gsl_multifit_fsolver_set (gsl_multifit_fsolver * S,
+ gsl_multifit_function * F, gsl_vector * X)
+ This function initializes, or reinitializes, an existing solver S
+ to use the function F and the initial guess X.
+
+ -- Function: int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver *
+ S, gsl_multifit_function_fdf * FDF, gsl_vector * X)
+ This function initializes, or reinitializes, an existing solver S
+ to use the function and derivative FDF and the initial guess X.
+
+ -- Function: void gsl_multifit_fsolver_free (gsl_multifit_fsolver * S)
+ -- Function: void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver
+ * S)
+ These functions free all the memory associated with the solver S.
+
+ -- Function: const char * gsl_multifit_fsolver_name (const
+ gsl_multifit_fsolver * S)
+ -- Function: const char * gsl_multifit_fdfsolver_name (const
+ gsl_multifit_fdfsolver * S)
+ These functions return a pointer to the name of the solver. For
+ example,
+
+ printf ("s is a '%s' solver\n",
+ gsl_multifit_fdfsolver_name (s));
+
+ would print something like `s is a 'lmder' solver'.
+
+
+File: gsl-ref.info, Node: Providing the Function to be Minimized, Next: Iteration of the Minimization Algorithm, Prev: Initializing the Nonlinear Least-Squares Solver, Up: Nonlinear Least-Squares Fitting
+
+37.3 Providing the Function to be Minimized
+===========================================
+
+You must provide n functions of p variables for the minimization
+algorithms to operate on. In order to allow for arbitrary parameters
+the functions are defined by the following data types:
+
+ -- Data Type: gsl_multifit_function
+ This data type defines a general system of functions with
+ arbitrary parameters.
+
+ `int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)'
+ this function should store the vector result f(x,params) in F
+ for argument X and arbitrary parameters PARAMS, returning an
+ appropriate error code if the function cannot be computed.
+
+ `size_t n'
+ the number of functions, i.e. the number of components of the
+ vector F.
+
+ `size_t p'
+ the number of independent variables, i.e. the number of
+ components of the vector X.
+
+ `void * params'
+ a pointer to the arbitrary parameters of the function.
+
+ -- Data Type: gsl_multifit_function_fdf
+ This data type defines a general system of functions with
+ arbitrary parameters and the corresponding Jacobian matrix of
+ derivatives,
+
+ `int (* f) (const gsl_vector * X, void * PARAMS, gsl_vector * F)'
+ this function should store the vector result f(x,params) in F
+ for argument X and arbitrary parameters PARAMS, returning an
+ appropriate error code if the function cannot be computed.
+
+ `int (* df) (const gsl_vector * X, void * PARAMS, gsl_matrix * J)'
+ this function should store the N-by-P matrix result J_ij = d
+ f_i(x,params) / d x_j in J for argument X and arbitrary
+ parameters PARAMS, returning an appropriate error code if the
+ function cannot be computed.
+
+ `int (* fdf) (const gsl_vector * X, void * PARAMS, gsl_vector * F, gsl_matrix * J)'
+ This function should set the values of the F and J as above,
+ for arguments X and arbitrary parameters PARAMS. This
+ function provides an optimization of the separate functions
+ for f(x) and J(x)--it is always faster to compute the
+ function and its derivative at the same time.
+
+ `size_t n'
+ the number of functions, i.e. the number of components of the
+ vector F.
+
+ `size_t p'
+ the number of independent variables, i.e. the number of
+ components of the vector X.
+
+ `void * params'
+ a pointer to the arbitrary parameters of the function.
+
+ Note that when fitting a non-linear model against experimental data,
+the data is passed to the functions above using the PARAMS argument and
+the trial best-fit parameters through the X argument.
+
+
+File: gsl-ref.info, Node: Iteration of the Minimization Algorithm, Next: Search Stopping Parameters for Minimization Algorithms, Prev: Providing the Function to be Minimized, Up: Nonlinear Least-Squares Fitting
+
+37.4 Iteration
+==============
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any solver of the
+corresponding type. The same functions work for all solvers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+ -- Function: int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver *
+ S)
+ -- Function: int gsl_multifit_fdfsolver_iterate
+ (gsl_multifit_fdfsolver * S)
+ These functions perform a single iteration of the solver S. If
+ the iteration encounters an unexpected problem then an error code
+ will be returned. The solver maintains a current estimate of the
+ best-fit parameters at all times.
+
+ The solver struct S contains the following entries, which can be
+used to track the progress of the solution:
+
+`gsl_vector * x'
+ The current position.
+
+`gsl_vector * f'
+ The function value at the current position.
+
+`gsl_vector * dx'
+ The difference between the current position and the previous
+ position, i.e. the last step, taken as a vector.
+
+`gsl_matrix * J'
+ The Jacobian matrix at the current position (for the
+ `gsl_multifit_fdfsolver' struct only)
+
+ The best-fit information also can be accessed with the following
+auxiliary functions,
+
+ -- Function: gsl_vector * gsl_multifit_fsolver_position (const
+ gsl_multifit_fsolver * S)
+ -- Function: gsl_vector * gsl_multifit_fdfsolver_position (const
+ gsl_multifit_fdfsolver * S)
+ These functions return the current position (i.e. best-fit
+ parameters) `s->x' of the solver S.
+
+
+File: gsl-ref.info, Node: Search Stopping Parameters for Minimization Algorithms, Next: Minimization Algorithms using Derivatives, Prev: Iteration of the Minimization Algorithm, Up: Nonlinear Least-Squares Fitting
+
+37.5 Search Stopping Parameters
+===============================
+
+A minimization procedure should stop when one of the following
+conditions is true:
+
+ * A minimum has been found to within the user-specified precision.
+
+ * A user-specified maximum number of iterations has been reached.
+
+ * An error has occurred.
+
+The handling of these conditions is under user control. The functions
+below allow the user to test the current estimate of the best-fit
+parameters in several standard ways.
+
+ -- Function: int gsl_multifit_test_delta (const gsl_vector * DX, const
+ gsl_vector * X, double EPSABS, double EPSREL)
+ This function tests for the convergence of the sequence by
+ comparing the last step DX with the absolute error EPSABS and
+ relative error EPSREL to the current position X. The test returns
+ `GSL_SUCCESS' if the following condition is achieved,
+
+ |dx_i| < epsabs + epsrel |x_i|
+
+ for each component of X and returns `GSL_CONTINUE' otherwise.
+
+ -- Function: int gsl_multifit_test_gradient (const gsl_vector * G,
+ double EPSABS)
+ This function tests the residual gradient G against the absolute
+ error bound EPSABS. Mathematically, the gradient should be
+ exactly zero at the minimum. The test returns `GSL_SUCCESS' if the
+ following condition is achieved,
+
+ \sum_i |g_i| < epsabs
+
+ and returns `GSL_CONTINUE' otherwise. This criterion is suitable
+ for situations where the precise location of the minimum, x, is
+ unimportant provided a value can be found where the gradient is
+ small enough.
+
+ -- Function: int gsl_multifit_gradient (const gsl_matrix * J, const
+ gsl_vector * F, gsl_vector * G)
+ This function computes the gradient G of \Phi(x) = (1/2)
+ ||F(x)||^2 from the Jacobian matrix J and the function values F,
+ using the formula g = J^T f.
+
+
+File: gsl-ref.info, Node: Minimization Algorithms using Derivatives, Next: Minimization Algorithms without Derivatives, Prev: Search Stopping Parameters for Minimization Algorithms, Up: Nonlinear Least-Squares Fitting
+
+37.6 Minimization Algorithms using Derivatives
+==============================================
+
+The minimization algorithms described in this section make use of both
+the function and its derivative. They require an initial guess for the
+location of the minimum. There is no absolute guarantee of
+convergence--the function must be suitable for this technique and the
+initial guess must be sufficiently close to the minimum for it to work.
+
+ -- Derivative Solver: gsl_multifit_fdfsolver_lmsder
+ This is a robust and efficient version of the Levenberg-Marquardt
+ algorithm as implemented in the scaled LMDER routine in MINPACK.
+ Minpack was written by Jorge J. More', Burton S. Garbow and
+ Kenneth E. Hillstrom.
+
+ The algorithm uses a generalized trust region to keep each step
+ under control. In order to be accepted a proposed new position x'
+ must satisfy the condition |D (x' - x)| < \delta, where D is a
+ diagonal scaling matrix and \delta is the size of the trust
+ region. The components of D are computed internally, using the
+ column norms of the Jacobian to estimate the sensitivity of the
+ residual to each component of x. This improves the behavior of the
+ algorithm for badly scaled functions.
+
+ On each iteration the algorithm attempts to minimize the linear
+ system |F + J p| subject to the constraint |D p| < \Delta. The
+ solution to this constrained linear system is found using the
+ Levenberg-Marquardt method.
+
+ The proposed step is now tested by evaluating the function at the
+ resulting point, x'. If the step reduces the norm of the function
+ sufficiently, and follows the predicted behavior of the function
+ within the trust region, then it is accepted and the size of the
+ trust region is increased. If the proposed step fails to improve
+ the solution, or differs significantly from the expected behavior
+ within the trust region, then the size of the trust region is
+ decreased and another trial step is computed.
+
+ The algorithm also monitors the progress of the solution and
+ returns an error if the changes in the solution are smaller than
+ the machine precision. The possible error codes are,
+
+ `GSL_ETOLF'
+ the decrease in the function falls below machine precision
+
+ `GSL_ETOLX'
+ the change in the position vector falls below machine
+ precision
+
+ `GSL_ETOLG'
+ the norm of the gradient, relative to the norm of the
+ function, falls below machine precision
+
+ These error codes indicate that further iterations will be
+ unlikely to change the solution from its current value.
+
+
+ -- Derivative Solver: gsl_multifit_fdfsolver_lmder
+ This is an unscaled version of the LMDER algorithm. The elements
+ of the diagonal scaling matrix D are set to 1. This algorithm may
+ be useful in circumstances where the scaled version of LMDER
+ converges too slowly, or the function is already scaled
+ appropriately.
+
+
+File: gsl-ref.info, Node: Minimization Algorithms without Derivatives, Next: Computing the covariance matrix of best fit parameters, Prev: Minimization Algorithms using Derivatives, Up: Nonlinear Least-Squares Fitting
+
+37.7 Minimization Algorithms without Derivatives
+================================================
+
+There are no algorithms implemented in this section at the moment.
+
+
+File: gsl-ref.info, Node: Computing the covariance matrix of best fit parameters, Next: Example programs for Nonlinear Least-Squares Fitting, Prev: Minimization Algorithms without Derivatives, Up: Nonlinear Least-Squares Fitting
+
+37.8 Computing the covariance matrix of best fit parameters
+===========================================================
+
+ -- Function: int gsl_multifit_covar (const gsl_matrix * J, double
+ EPSREL, gsl_matrix * COVAR)
+ This function uses the Jacobian matrix J to compute the covariance
+ matrix of the best-fit parameters, COVAR. The parameter EPSREL is
+ used to remove linear-dependent columns when J is rank deficient.
+
+ The covariance matrix is given by,
+
+ covar = (J^T J)^{-1}
+
+ and is computed by QR decomposition of J with column-pivoting. Any
+ columns of R which satisfy
+
+ |R_{kk}| <= epsrel |R_{11}|
+
+ are considered linearly-dependent and are excluded from the
+ covariance matrix (the corresponding rows and columns of the
+ covariance matrix are set to zero).
+
+ If the minimisation uses the weighted least-squares function f_i =
+ (Y(x, t_i) - y_i) / \sigma_i then the covariance matrix above
+ gives the statistical error on the best-fit parameters resulting
+ from the gaussian errors \sigma_i on the underlying data y_i.
+ This can be verified from the relation \delta f = J \delta c and
+ the fact that the fluctuations in f from the data y_i are
+ normalised by \sigma_i and so satisfy <\delta f \delta f^T> = I.
+
+ For an unweighted least-squares function f_i = (Y(x, t_i) - y_i)
+ the covariance matrix above should be multiplied by the variance
+ of the residuals about the best-fit \sigma^2 = \sum (y_i -
+ Y(x,t_i))^2 / (n-p) to give the variance-covariance matrix
+ \sigma^2 C. This estimates the statistical error on the best-fit
+ parameters from the scatter of the underlying data.
+
+ For more information about covariance matrices see *Note Fitting
+ Overview::.
+
+
+File: gsl-ref.info, Node: Example programs for Nonlinear Least-Squares Fitting, Next: References and Further Reading for Nonlinear Least-Squares Fitting, Prev: Computing the covariance matrix of best fit parameters, Up: Nonlinear Least-Squares Fitting
+
+37.9 Examples
+=============
+
+The following example program fits a weighted exponential model with
+background to experimental data, Y = A \exp(-\lambda t) + b. The first
+part of the program sets up the functions `expb_f' and `expb_df' to
+calculate the model and its Jacobian. The appropriate fitting function
+is given by,
+
+ f_i = ((A \exp(-\lambda t_i) + b) - y_i)/\sigma_i
+
+where we have chosen t_i = i. The Jacobian matrix J is the derivative
+of these functions with respect to the three parameters (A, \lambda,
+b). It is given by,
+
+ J_{ij} = d f_i / d x_j
+
+where x_0 = A, x_1 = \lambda and x_2 = b.
+
+ /* expfit.c -- model functions for exponential + background */
+
+ struct data {
+ size_t n;
+ double * y;
+ double * sigma;
+ };
+
+ int
+ expb_f (const gsl_vector * x, void *data,
+ gsl_vector * f)
+ {
+ size_t n = ((struct data *)data)->n;
+ double *y = ((struct data *)data)->y;
+ double *sigma = ((struct data *) data)->sigma;
+
+ double A = gsl_vector_get (x, 0);
+ double lambda = gsl_vector_get (x, 1);
+ double b = gsl_vector_get (x, 2);
+
+ size_t i;
+
+ for (i = 0; i < n; i++)
+ {
+ /* Model Yi = A * exp(-lambda * i) + b */
+ double t = i;
+ double Yi = A * exp (-lambda * t) + b;
+ gsl_vector_set (f, i, (Yi - y[i])/sigma[i]);
+ }
+
+ return GSL_SUCCESS;
+ }
+
+ int
+ expb_df (const gsl_vector * x, void *data,
+ gsl_matrix * J)
+ {
+ size_t n = ((struct data *)data)->n;
+ double *sigma = ((struct data *) data)->sigma;
+
+ double A = gsl_vector_get (x, 0);
+ double lambda = gsl_vector_get (x, 1);
+
+ size_t i;
+
+ for (i = 0; i < n; i++)
+ {
+ /* Jacobian matrix J(i,j) = dfi / dxj, */
+ /* where fi = (Yi - yi)/sigma[i], */
+ /* Yi = A * exp(-lambda * i) + b */
+ /* and the xj are the parameters (A,lambda,b) */
+ double t = i;
+ double s = sigma[i];
+ double e = exp(-lambda * t);
+ gsl_matrix_set (J, i, 0, e/s);
+ gsl_matrix_set (J, i, 1, -t * A * e/s);
+ gsl_matrix_set (J, i, 2, 1/s);
+ }
+ return GSL_SUCCESS;
+ }
+
+ int
+ expb_fdf (const gsl_vector * x, void *data,
+ gsl_vector * f, gsl_matrix * J)
+ {
+ expb_f (x, data, f);
+ expb_df (x, data, J);
+
+ return GSL_SUCCESS;
+ }
+
+The main part of the program sets up a Levenberg-Marquardt solver and
+some simulated random data. The data uses the known parameters
+(1.0,5.0,0.1) combined with gaussian noise (standard deviation = 0.1)
+over a range of 40 timesteps. The initial guess for the parameters is
+chosen as (0.0, 1.0, 0.0).
+
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_randist.h>
+ #include <gsl/gsl_vector.h>
+ #include <gsl/gsl_blas.h>
+ #include <gsl/gsl_multifit_nlin.h>
+
+ #include "expfit.c"
+
+ #define N 40
+
+ void print_state (size_t iter, gsl_multifit_fdfsolver * s);
+
+ int
+ main (void)
+ {
+ const gsl_multifit_fdfsolver_type *T;
+ gsl_multifit_fdfsolver *s;
+ int status;
+ unsigned int i, iter = 0;
+ const size_t n = N;
+ const size_t p = 3;
+
+ gsl_matrix *covar = gsl_matrix_alloc (p, p);
+ double y[N], sigma[N];
+ struct data d = { n, y, sigma};
+ gsl_multifit_function_fdf f;
+ double x_init[3] = { 1.0, 0.0, 0.0 };
+ gsl_vector_view x = gsl_vector_view_array (x_init, p);
+ const gsl_rng_type * type;
+ gsl_rng * r;
+
+ gsl_rng_env_setup();
+
+ type = gsl_rng_default;
+ r = gsl_rng_alloc (type);
+
+ f.f = &expb_f;
+ f.df = &expb_df;
+ f.fdf = &expb_fdf;
+ f.n = n;
+ f.p = p;
+ f.params = &d;
+
+ /* This is the data to be fitted */
+
+ for (i = 0; i < n; i++)
+ {
+ double t = i;
+ y[i] = 1.0 + 5 * exp (-0.1 * t)
+ + gsl_ran_gaussian (r, 0.1);
+ sigma[i] = 0.1;
+ printf ("data: %u %g %g\n", i, y[i], sigma[i]);
+ };
+
+ T = gsl_multifit_fdfsolver_lmsder;
+ s = gsl_multifit_fdfsolver_alloc (T, n, p);
+ gsl_multifit_fdfsolver_set (s, &f, &x.vector);
+
+ print_state (iter, s);
+
+ do
+ {
+ iter++;
+ status = gsl_multifit_fdfsolver_iterate (s);
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ print_state (iter, s);
+
+ if (status)
+ break;
+
+ status = gsl_multifit_test_delta (s->dx, s->x,
+ 1e-4, 1e-4);
+ }
+ while (status == GSL_CONTINUE && iter < 500);
+
+ gsl_multifit_covar (s->J, 0.0, covar);
+
+ #define FIT(i) gsl_vector_get(s->x, i)
+ #define ERR(i) sqrt(gsl_matrix_get(covar,i,i))
+
+ {
+ double chi = gsl_blas_dnrm2(s->f);
+ double dof = n - p;
+ double c = GSL_MAX_DBL(1, chi / sqrt(dof));
+
+ printf("chisq/dof = %g\n", pow(chi, 2.0) / dof);
+
+ printf ("A = %.5f +/- %.5f\n", FIT(0), c*ERR(0));
+ printf ("lambda = %.5f +/- %.5f\n", FIT(1), c*ERR(1));
+ printf ("b = %.5f +/- %.5f\n", FIT(2), c*ERR(2));
+ }
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ gsl_multifit_fdfsolver_free (s);
+ gsl_matrix_free (covar);
+ gsl_rng_free (r);
+ return 0;
+ }
+
+ void
+ print_state (size_t iter, gsl_multifit_fdfsolver * s)
+ {
+ printf ("iter: %3u x = % 15.8f % 15.8f % 15.8f "
+ "|f(x)| = %g\n",
+ iter,
+ gsl_vector_get (s->x, 0),
+ gsl_vector_get (s->x, 1),
+ gsl_vector_get (s->x, 2),
+ gsl_blas_dnrm2 (s->f));
+ }
+
+The iteration terminates when the change in x is smaller than 0.0001, as
+both an absolute and relative change. Here are the results of running
+the program:
+
+ iter: 0 x=1.00000000 0.00000000 0.00000000 |f(x)|=117.349
+ status=success
+ iter: 1 x=1.64659312 0.01814772 0.64659312 |f(x)|=76.4578
+ status=success
+ iter: 2 x=2.85876037 0.08092095 1.44796363 |f(x)|=37.6838
+ status=success
+ iter: 3 x=4.94899512 0.11942928 1.09457665 |f(x)|=9.58079
+ status=success
+ iter: 4 x=5.02175572 0.10287787 1.03388354 |f(x)|=5.63049
+ status=success
+ iter: 5 x=5.04520433 0.10405523 1.01941607 |f(x)|=5.44398
+ status=success
+ iter: 6 x=5.04535782 0.10404906 1.01924871 |f(x)|=5.44397
+ chisq/dof = 0.800996
+ A = 5.04536 +/- 0.06028
+ lambda = 0.10405 +/- 0.00316
+ b = 1.01925 +/- 0.03782
+ status = success
+
+The approximate values of the parameters are found correctly, and the
+chi-squared value indicates a good fit (the chi-squared per degree of
+freedom is approximately 1). In this case the errors on the parameters
+can be estimated from the square roots of the diagonal elements of the
+covariance matrix.
+
+ If the chi-squared value shows a poor fit (i.e. chi^2/dof >> 1) then
+the error estimates obtained from the covariance matrix will be too
+small. In the example program the error estimates are multiplied by
+\sqrt{\chi^2/dof} in this case, a common way of increasing the errors
+for a poor fit. Note that a poor fit will result from the use an
+inappropriate model, and the scaled error estimates may then be outside
+the range of validity for gaussian errors.
+
+
+File: gsl-ref.info, Node: References and Further Reading for Nonlinear Least-Squares Fitting, Prev: Example programs for Nonlinear Least-Squares Fitting, Up: Nonlinear Least-Squares Fitting
+
+37.10 References and Further Reading
+====================================
+
+The MINPACK algorithm is described in the following article,
+
+ J.J. More', `The Levenberg-Marquardt Algorithm: Implementation and
+ Theory', Lecture Notes in Mathematics, v630 (1978), ed G. Watson.
+
+The following paper is also relevant to the algorithms described in this
+section,
+
+ J.J. More', B.S. Garbow, K.E. Hillstrom, "Testing Unconstrained
+ Optimization Software", ACM Transactions on Mathematical Software,
+ Vol 7, No 1 (1981), p 17-41.
+
+
+File: gsl-ref.info, Node: Basis Splines, Next: Physical Constants, Prev: Nonlinear Least-Squares Fitting, Up: Top
+
+38 Basis Splines
+****************
+
+This chapter describes functions for the computation of smoothing basis
+splines (B-splines). The header file `gsl_bspline.h' contains
+prototypes for the bspline functions and related declarations.
+
+* Menu:
+
+* Overview of B-splines::
+* Initializing the B-splines solver::
+* Constructing the knots vector::
+* Evaluation of B-spline basis functions::
+* Example programs for B-splines::
+* References and Further Reading::
+
+
+File: gsl-ref.info, Node: Overview of B-splines, Next: Initializing the B-splines solver, Up: Basis Splines
+
+38.1 Overview
+=============
+
+B-splines are commonly used as basis functions to fit smoothing curves
+to large data sets. To do this, the abscissa axis is broken up into
+some number of intervals, where the endpoints of each interval are
+called "breakpoints". These breakpoints are then converted to "knots"
+by imposing various continuity and smoothness conditions at each
+interface. Given a nondecreasing knot vector t = \t_0, t_1, \dots,
+t_n+k-1\, the n basis splines of order k are defined by
+
+ B_(i,1)(x) = (1, t_i <= x < t_(i+1)
+ (0, else
+ B_(i,k)(x) = [(x - t_i)/(t_(i+k-1) - t_i)] B_(i,k-1)(x) + [(t_(i+k) - x)/(t_(i+k) - t_(i+1))] B_(i+1,k-1)(x)
+
+ for i = 0, \dots, n-1. The common case of cubic B-splines is given
+by k = 4. The above recurrence relation can be evaluated in a
+numerically stable way by the de Boor algorithm.
+
+ If we define appropriate knots on an interval [a,b] then the
+B-spline basis functions form a complete set on that interval.
+Therefore we can expand a smoothing function as
+
+ f(x) = \sum_i c_i B_(i,k)(x)
+
+ given enough (x_j, f(x_j)) data pairs. The c_i can be readily
+obtained from a least-squares fit.
+
+
+File: gsl-ref.info, Node: Initializing the B-splines solver, Next: Constructing the knots vector, Prev: Overview of B-splines, Up: Basis Splines
+
+38.2 Initializing the B-splines solver
+======================================
+
+ -- Function: gsl_bspline_workspace * gsl_bspline_alloc (const size_t
+ K, const size_t NBREAK)
+ This function allocates a workspace for computing B-splines of
+ order K. The number of breakpoints is given by NBREAK. This leads
+ to n = nbreak + k - 2 basis functions. Cubic B-splines are
+ specified by k = 4. The size of the workspace is O(5k + nbreak).
+
+ -- Function: void gsl_bspline_free (gsl_bspline_workspace * W)
+ This function frees the memory associated with the workspace W.
+
+
+File: gsl-ref.info, Node: Constructing the knots vector, Next: Evaluation of B-spline basis functions, Prev: Initializing the B-splines solver, Up: Basis Splines
+
+38.3 Constructing the knots vector
+==================================
+
+ -- Function: int gsl_bspline_knots (const gsl_vector * BREAKPTS,
+ gsl_bspline_workspace * W)
+ This function computes the knots associated with the given
+ breakpoints and stores them internally in `w->knots'.
+
+ -- Function: int gsl_bspline_knots_uniform (const double a, const
+ double b, gsl_bspline_workspace * W)
+ This function assumes uniformly spaced breakpoints on [a,b] and
+ constructs the corresponding knot vector using the previously
+ specified NBREAK parameter. The knots are stored in `w->knots'.
+
+
+File: gsl-ref.info, Node: Evaluation of B-spline basis functions, Next: Example programs for B-splines, Prev: Constructing the knots vector, Up: Basis Splines
+
+38.4 Evaluation of B-splines
+============================
+
+ -- Function: int gsl_bspline_eval (const double X, gsl_vector * B,
+ gsl_bspline_workspace * W)
+ This function evaluates all B-spline basis functions at the
+ position X and stores them in B, so that the ith element of B is
+ B_i(x). B must be of length n = nbreak + k - 2. This value is also
+ stored in `w->n'. It is far more efficient to compute all of the
+ basis functions at once than to compute them individually, due to
+ the nature of the defining recurrence relation.
+
+
+File: gsl-ref.info, Node: Example programs for B-splines, Next: References and Further Reading, Prev: Evaluation of B-spline basis functions, Up: Basis Splines
+
+38.5 Example programs for B-splines
+===================================
+
+The following program computes a linear least squares fit to data using
+cubic B-spline basis functions with uniform breakpoints. The data is
+generated from the curve y(x) = \cos(x) \exp(-0.1 x) on [0, 15] with
+gaussian noise added.
+
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <math.h>
+ #include <gsl/gsl_bspline.h>
+ #include <gsl/gsl_multifit.h>
+ #include <gsl/gsl_rng.h>
+ #include <gsl/gsl_randist.h>
+
+ /* number of data points to fit */
+ #define N 200
+
+ /* number of fit coefficients */
+ #define NCOEFFS 8
+
+ /* nbreak = ncoeffs + 2 - k = ncoeffs - 2 since k = 4 */
+ #define NBREAK (NCOEFFS - 2)
+
+ int
+ main (void)
+ {
+ const size_t n = N;
+ const size_t ncoeffs = NCOEFFS;
+ const size_t nbreak = NBREAK;
+ size_t i, j;
+ gsl_bspline_workspace *bw;
+ gsl_vector *B;
+ double dy;
+ gsl_rng *r;
+ gsl_vector *c, *w;
+ gsl_vector *x, *y;
+ gsl_matrix *X, *cov;
+ gsl_multifit_linear_workspace *mw;
+ double chisq;
+
+ gsl_rng_env_setup();
+ r = gsl_rng_alloc(gsl_rng_default);
+
+ /* allocate a cubic bspline workspace (k = 4) */
+ bw = gsl_bspline_alloc(4, nbreak);
+ B = gsl_vector_alloc(ncoeffs);
+
+ x = gsl_vector_alloc(n);
+ y = gsl_vector_alloc(n);
+ X = gsl_matrix_alloc(n, ncoeffs);
+ c = gsl_vector_alloc(ncoeffs);
+ w = gsl_vector_alloc(n);
+ cov = gsl_matrix_alloc(ncoeffs, ncoeffs);
+ mw = gsl_multifit_linear_alloc(n, ncoeffs);
+
+ printf("#m=0,S=0\n");
+ /* this is the data to be fitted */
+ for (i = 0; i < n; ++i)
+ {
+ double sigma;
+ double xi = (15.0/(N-1)) * i;
+ double yi = cos(xi) * exp(-0.1 * xi);
+
+ sigma = 0.1;
+ dy = gsl_ran_gaussian(r, sigma);
+ yi += dy;
+
+ gsl_vector_set(x, i, xi);
+ gsl_vector_set(y, i, yi);
+ gsl_vector_set(w, i, 1.0 / (sigma*sigma));
+
+ printf("%f %f\n", xi, yi);
+ }
+
+ /* use uniform breakpoints on [0, 15] */
+ gsl_bspline_knots_uniform(0.0, 15.0, bw);
+
+ /* construct the fit matrix X */
+ for (i = 0; i < n; ++i)
+ {
+ double xi = gsl_vector_get(x, i);
+
+ /* compute B_j(xi) for all j */
+ gsl_bspline_eval(xi, B, bw);
+
+ /* fill in row i of X */
+ for (j = 0; j < ncoeffs; ++j)
+ {
+ double Bj = gsl_vector_get(B, j);
+ gsl_matrix_set(X, i, j, Bj);
+ }
+ }
+
+ /* do the fit */
+ gsl_multifit_wlinear(X, w, y, c, cov, &chisq, mw);
+
+ /* output the smoothed curve */
+ {
+ double xi, yi, yerr;
+
+ printf("#m=1,S=0\n");
+ for (xi = 0.0; xi < 15.0; xi += 0.1)
+ {
+ gsl_bspline_eval(xi, B, bw);
+ gsl_multifit_linear_est(B, c, cov, &yi, &yerr);
+ printf("%f %f\n", xi, yi);
+ }
+ }
+
+ gsl_rng_free(r);
+ gsl_bspline_free(bw);
+ gsl_vector_free(B);
+ gsl_vector_free(x);
+ gsl_vector_free(y);
+ gsl_matrix_free(X);
+ gsl_vector_free(c);
+ gsl_vector_free(w);
+ gsl_matrix_free(cov);
+ gsl_multifit_linear_free(mw);
+
+ return 0;
+ } /* main() */
+
+ The output can be plotted with GNU `graph'.
+
+ $ ./a.out > bspline.dat
+ $ graph -T ps -X x -Y y -x 0 15 -y -1 1.3 < bspline.dat > bspline.ps
+
+
+File: gsl-ref.info, Node: References and Further Reading, Prev: Example programs for B-splines, Up: Basis Splines
+
+38.6 References and Further Reading
+===================================
+
+Further information on the algorithms described in this section can be
+found in the following book,
+
+ C. de Boor, `A Practical Guide to Splines' (1978), Springer-Verlag,
+ ISBN 0-387-90356-9.
+
+A large collection of B-spline routines is available in the PPPACK
+library available at `http://www.netlib.org/pppack'.
+
+
+File: gsl-ref.info, Node: Physical Constants, Next: IEEE floating-point arithmetic, Prev: Basis Splines, Up: Top
+
+39 Physical Constants
+*********************
+
+This chapter describes macros for the values of physical constants, such
+as the speed of light, c, and gravitational constant, G. The values
+are available in different unit systems, including the standard MKSA
+system (meters, kilograms, seconds, amperes) and the CGSM system
+(centimeters, grams, seconds, gauss), which is commonly used in
+Astronomy.
+
+ The definitions of constants in the MKSA system are available in the
+file `gsl_const_mksa.h'. The constants in the CGSM system are defined
+in `gsl_const_cgsm.h'. Dimensionless constants, such as the fine
+structure constant, which are pure numbers are defined in
+`gsl_const_num.h'.
+
+* Menu:
+
+* Fundamental Constants::
+* Astronomy and Astrophysics::
+* Atomic and Nuclear Physics::
+* Measurement of Time::
+* Imperial Units ::
+* Speed and Nautical Units::
+* Printers Units::
+* Volume Area and Length::
+* Mass and Weight ::
+* Thermal Energy and Power::
+* Pressure::
+* Viscosity::
+* Light and Illumination::
+* Radioactivity::
+* Force and Energy::
+* Prefixes::
+* Physical Constant Examples::
+* Physical Constant References and Further Reading::
+
+ The full list of constants is described briefly below. Consult the
+header files themselves for the values of the constants used in the
+library.
+
+
+File: gsl-ref.info, Node: Fundamental Constants, Next: Astronomy and Astrophysics, Up: Physical Constants
+
+39.1 Fundamental Constants
+==========================
+
+`GSL_CONST_MKSA_SPEED_OF_LIGHT'
+ The speed of light in vacuum, c.
+
+`GSL_CONST_MKSA_VACUUM_PERMEABILITY'
+ The permeability of free space, \mu_0. This constant is defined in
+ the MKSA system only.
+
+`GSL_CONST_MKSA_VACUUM_PERMITTIVITY'
+ The permittivity of free space, \epsilon_0. This constant is
+ defined in the MKSA system only.
+
+`GSL_CONST_MKSA_PLANCKS_CONSTANT_H'
+ Planck's constant, h.
+
+`GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR'
+ Planck's constant divided by 2\pi, \hbar.
+
+`GSL_CONST_NUM_AVOGADRO'
+ Avogadro's number, N_a.
+
+`GSL_CONST_MKSA_FARADAY'
+ The molar charge of 1 Faraday.
+
+`GSL_CONST_MKSA_BOLTZMANN'
+ The Boltzmann constant, k.
+
+`GSL_CONST_MKSA_MOLAR_GAS'
+ The molar gas constant, R_0.
+
+`GSL_CONST_MKSA_STANDARD_GAS_VOLUME'
+ The standard gas volume, V_0.
+
+`GSL_CONST_MKSA_STEFAN_BOLTZMANN_CONSTANT'
+ The Stefan-Boltzmann radiation constant, \sigma.
+
+`GSL_CONST_MKSA_GAUSS'
+ The magnetic field of 1 Gauss.
+
+
+File: gsl-ref.info, Node: Astronomy and Astrophysics, Next: Atomic and Nuclear Physics, Prev: Fundamental Constants, Up: Physical Constants
+
+39.2 Astronomy and Astrophysics
+===============================
+
+`GSL_CONST_MKSA_ASTRONOMICAL_UNIT'
+ The length of 1 astronomical unit (mean earth-sun distance), au.
+
+`GSL_CONST_MKSA_GRAVITATIONAL_CONSTANT'
+ The gravitational constant, G.
+
+`GSL_CONST_MKSA_LIGHT_YEAR'
+ The distance of 1 light-year, ly.
+
+`GSL_CONST_MKSA_PARSEC'
+ The distance of 1 parsec, pc.
+
+`GSL_CONST_MKSA_GRAV_ACCEL'
+ The standard gravitational acceleration on Earth, g.
+
+`GSL_CONST_MKSA_SOLAR_MASS'
+ The mass of the Sun.
+
+
+File: gsl-ref.info, Node: Atomic and Nuclear Physics, Next: Measurement of Time, Prev: Astronomy and Astrophysics, Up: Physical Constants
+
+39.3 Atomic and Nuclear Physics
+===============================
+
+`GSL_CONST_MKSA_ELECTRON_CHARGE'
+ The charge of the electron, e.
+
+`GSL_CONST_MKSA_ELECTRON_VOLT'
+ The energy of 1 electron volt, eV.
+
+`GSL_CONST_MKSA_UNIFIED_ATOMIC_MASS'
+ The unified atomic mass, amu.
+
+`GSL_CONST_MKSA_MASS_ELECTRON'
+ The mass of the electron, m_e.
+
+`GSL_CONST_MKSA_MASS_MUON'
+ The mass of the muon, m_\mu.
+
+`GSL_CONST_MKSA_MASS_PROTON'
+ The mass of the proton, m_p.
+
+`GSL_CONST_MKSA_MASS_NEUTRON'
+ The mass of the neutron, m_n.
+
+`GSL_CONST_NUM_FINE_STRUCTURE'
+ The electromagnetic fine structure constant \alpha.
+
+`GSL_CONST_MKSA_RYDBERG'
+ The Rydberg constant, Ry, in units of energy. This is related to
+ the Rydberg inverse wavelength R by Ry = h c R.
+
+`GSL_CONST_MKSA_BOHR_RADIUS'
+ The Bohr radius, a_0.
+
+`GSL_CONST_MKSA_ANGSTROM'
+ The length of 1 angstrom.
+
+`GSL_CONST_MKSA_BARN'
+ The area of 1 barn.
+
+`GSL_CONST_MKSA_BOHR_MAGNETON'
+ The Bohr Magneton, \mu_B.
+
+`GSL_CONST_MKSA_NUCLEAR_MAGNETON'
+ The Nuclear Magneton, \mu_N.
+
+`GSL_CONST_MKSA_ELECTRON_MAGNETIC_MOMENT'
+ The absolute value of the magnetic moment of the electron, \mu_e.
+ The physical magnetic moment of the electron is negative.
+
+`GSL_CONST_MKSA_PROTON_MAGNETIC_MOMENT'
+ The magnetic moment of the proton, \mu_p.
+
+`GSL_CONST_MKSA_THOMSON_CROSS_SECTION'
+ The Thomson cross section, \sigma_T.
+
+`GSL_CONST_MKSA_DEBYE'
+ The electric dipole moment of 1 Debye, D.
+
+
+File: gsl-ref.info, Node: Measurement of Time, Next: Imperial Units, Prev: Atomic and Nuclear Physics, Up: Physical Constants
+
+39.4 Measurement of Time
+========================
+
+`GSL_CONST_MKSA_MINUTE'
+ The number of seconds in 1 minute.
+
+`GSL_CONST_MKSA_HOUR'
+ The number of seconds in 1 hour.
+
+`GSL_CONST_MKSA_DAY'
+ The number of seconds in 1 day.
+
+`GSL_CONST_MKSA_WEEK'
+ The number of seconds in 1 week.
+
+
+File: gsl-ref.info, Node: Imperial Units, Next: Speed and Nautical Units, Prev: Measurement of Time, Up: Physical Constants
+
+39.5 Imperial Units
+===================
+
+`GSL_CONST_MKSA_INCH'
+ The length of 1 inch.
+
+`GSL_CONST_MKSA_FOOT'
+ The length of 1 foot.
+
+`GSL_CONST_MKSA_YARD'
+ The length of 1 yard.
+
+`GSL_CONST_MKSA_MILE'
+ The length of 1 mile.
+
+`GSL_CONST_MKSA_MIL'
+ The length of 1 mil (1/1000th of an inch).
+
+
+File: gsl-ref.info, Node: Speed and Nautical Units, Next: Printers Units, Prev: Imperial Units, Up: Physical Constants
+
+39.6 Speed and Nautical Units
+=============================
+
+`GSL_CONST_MKSA_KILOMETERS_PER_HOUR'
+ The speed of 1 kilometer per hour.
+
+`GSL_CONST_MKSA_MILES_PER_HOUR'
+ The speed of 1 mile per hour.
+
+`GSL_CONST_MKSA_NAUTICAL_MILE'
+ The length of 1 nautical mile.
+
+`GSL_CONST_MKSA_FATHOM'
+ The length of 1 fathom.
+
+`GSL_CONST_MKSA_KNOT'
+ The speed of 1 knot.
+
+
+File: gsl-ref.info, Node: Printers Units, Next: Volume Area and Length, Prev: Speed and Nautical Units, Up: Physical Constants
+
+39.7 Printers Units
+===================
+
+`GSL_CONST_MKSA_POINT'
+ The length of 1 printer's point (1/72 inch).
+
+`GSL_CONST_MKSA_TEXPOINT'
+ The length of 1 TeX point (1/72.27 inch).
+
+
+File: gsl-ref.info, Node: Volume Area and Length, Next: Mass and Weight, Prev: Printers Units, Up: Physical Constants
+
+39.8 Volume, Area and Length
+============================
+
+`GSL_CONST_MKSA_MICRON'
+ The length of 1 micron.
+
+`GSL_CONST_MKSA_HECTARE'
+ The area of 1 hectare.
+
+`GSL_CONST_MKSA_ACRE'
+ The area of 1 acre.
+
+`GSL_CONST_MKSA_LITER'
+ The volume of 1 liter.
+
+`GSL_CONST_MKSA_US_GALLON'
+ The volume of 1 US gallon.
+
+`GSL_CONST_MKSA_CANADIAN_GALLON'
+ The volume of 1 Canadian gallon.
+
+`GSL_CONST_MKSA_UK_GALLON'
+ The volume of 1 UK gallon.
+
+`GSL_CONST_MKSA_QUART'
+ The volume of 1 quart.
+
+`GSL_CONST_MKSA_PINT'
+ The volume of 1 pint.
+
+
+File: gsl-ref.info, Node: Mass and Weight, Next: Thermal Energy and Power, Prev: Volume Area and Length, Up: Physical Constants
+
+39.9 Mass and Weight
+====================
+
+`GSL_CONST_MKSA_POUND_MASS'
+ The mass of 1 pound.
+
+`GSL_CONST_MKSA_OUNCE_MASS'
+ The mass of 1 ounce.
+
+`GSL_CONST_MKSA_TON'
+ The mass of 1 ton.
+
+`GSL_CONST_MKSA_METRIC_TON'
+ The mass of 1 metric ton (1000 kg).
+
+`GSL_CONST_MKSA_UK_TON'
+ The mass of 1 UK ton.
+
+`GSL_CONST_MKSA_TROY_OUNCE'
+ The mass of 1 troy ounce.
+
+`GSL_CONST_MKSA_CARAT'
+ The mass of 1 carat.
+
+`GSL_CONST_MKSA_GRAM_FORCE'
+ The force of 1 gram weight.
+
+`GSL_CONST_MKSA_POUND_FORCE'
+ The force of 1 pound weight.
+
+`GSL_CONST_MKSA_KILOPOUND_FORCE'
+ The force of 1 kilopound weight.
+
+`GSL_CONST_MKSA_POUNDAL'
+ The force of 1 poundal.
+
+
+File: gsl-ref.info, Node: Thermal Energy and Power, Next: Pressure, Prev: Mass and Weight, Up: Physical Constants
+
+39.10 Thermal Energy and Power
+==============================
+
+`GSL_CONST_MKSA_CALORIE'
+ The energy of 1 calorie.
+
+`GSL_CONST_MKSA_BTU'
+ The energy of 1 British Thermal Unit, btu.
+
+`GSL_CONST_MKSA_THERM'
+ The energy of 1 Therm.
+
+`GSL_CONST_MKSA_HORSEPOWER'
+ The power of 1 horsepower.
+
+
+File: gsl-ref.info, Node: Pressure, Next: Viscosity, Prev: Thermal Energy and Power, Up: Physical Constants
+
+39.11 Pressure
+==============
+
+`GSL_CONST_MKSA_BAR'
+ The pressure of 1 bar.
+
+`GSL_CONST_MKSA_STD_ATMOSPHERE'
+ The pressure of 1 standard atmosphere.
+
+`GSL_CONST_MKSA_TORR'
+ The pressure of 1 torr.
+
+`GSL_CONST_MKSA_METER_OF_MERCURY'
+ The pressure of 1 meter of mercury.
+
+`GSL_CONST_MKSA_INCH_OF_MERCURY'
+ The pressure of 1 inch of mercury.
+
+`GSL_CONST_MKSA_INCH_OF_WATER'
+ The pressure of 1 inch of water.
+
+`GSL_CONST_MKSA_PSI'
+ The pressure of 1 pound per square inch.
+
+
+File: gsl-ref.info, Node: Viscosity, Next: Light and Illumination, Prev: Pressure, Up: Physical Constants
+
+39.12 Viscosity
+===============
+
+`GSL_CONST_MKSA_POISE'
+ The dynamic viscosity of 1 poise.
+
+`GSL_CONST_MKSA_STOKES'
+ The kinematic viscosity of 1 stokes.
+
+
+File: gsl-ref.info, Node: Light and Illumination, Next: Radioactivity, Prev: Viscosity, Up: Physical Constants
+
+39.13 Light and Illumination
+============================
+
+`GSL_CONST_MKSA_STILB'
+ The luminance of 1 stilb.
+
+`GSL_CONST_MKSA_LUMEN'
+ The luminous flux of 1 lumen.
+
+`GSL_CONST_MKSA_LUX'
+ The illuminance of 1 lux.
+
+`GSL_CONST_MKSA_PHOT'
+ The illuminance of 1 phot.
+
+`GSL_CONST_MKSA_FOOTCANDLE'
+ The illuminance of 1 footcandle.
+
+`GSL_CONST_MKSA_LAMBERT'
+ The luminance of 1 lambert.
+
+`GSL_CONST_MKSA_FOOTLAMBERT'
+ The luminance of 1 footlambert.
+
+
+File: gsl-ref.info, Node: Radioactivity, Next: Force and Energy, Prev: Light and Illumination, Up: Physical Constants
+
+39.14 Radioactivity
+===================
+
+`GSL_CONST_MKSA_CURIE'
+ The activity of 1 curie.
+
+`GSL_CONST_MKSA_ROENTGEN'
+ The exposure of 1 roentgen.
+
+`GSL_CONST_MKSA_RAD'
+ The absorbed dose of 1 rad.
+
+
+File: gsl-ref.info, Node: Force and Energy, Next: Prefixes, Prev: Radioactivity, Up: Physical Constants
+
+39.15 Force and Energy
+======================
+
+`GSL_CONST_MKSA_NEWTON'
+ The SI unit of force, 1 Newton.
+
+`GSL_CONST_MKSA_DYNE'
+ The force of 1 Dyne = 10^-5 Newton.
+
+`GSL_CONST_MKSA_JOULE'
+ The SI unit of energy, 1 Joule.
+
+`GSL_CONST_MKSA_ERG'
+ The energy 1 erg = 10^-7 Joule.
+
+
+File: gsl-ref.info, Node: Prefixes, Next: Physical Constant Examples, Prev: Force and Energy, Up: Physical Constants
+
+39.16 Prefixes
+==============
+
+These constants are dimensionless scaling factors.
+
+`GSL_CONST_NUM_YOTTA'
+ 10^24
+
+`GSL_CONST_NUM_ZETTA'
+ 10^21
+
+`GSL_CONST_NUM_EXA'
+ 10^18
+
+`GSL_CONST_NUM_PETA'
+ 10^15
+
+`GSL_CONST_NUM_TERA'
+ 10^12
+
+`GSL_CONST_NUM_GIGA'
+ 10^9
+
+`GSL_CONST_NUM_MEGA'
+ 10^6
+
+`GSL_CONST_NUM_KILO'
+ 10^3
+
+`GSL_CONST_NUM_MILLI'
+ 10^-3
+
+`GSL_CONST_NUM_MICRO'
+ 10^-6
+
+`GSL_CONST_NUM_NANO'
+ 10^-9
+
+`GSL_CONST_NUM_PICO'
+ 10^-12
+
+`GSL_CONST_NUM_FEMTO'
+ 10^-15
+
+`GSL_CONST_NUM_ATTO'
+ 10^-18
+
+`GSL_CONST_NUM_ZEPTO'
+ 10^-21
+
+`GSL_CONST_NUM_YOCTO'
+ 10^-24
+
+
+File: gsl-ref.info, Node: Physical Constant Examples, Next: Physical Constant References and Further Reading, Prev: Prefixes, Up: Physical Constants
+
+39.17 Examples
+==============
+
+The following program demonstrates the use of the physical constants in
+a calculation. In this case, the goal is to calculate the range of
+light-travel times from Earth to Mars.
+
+ The required data is the average distance of each planet from the
+Sun in astronomical units (the eccentricities and inclinations of the
+orbits will be neglected for the purposes of this calculation). The
+average radius of the orbit of Mars is 1.52 astronomical units, and for
+the orbit of Earth it is 1 astronomical unit (by definition). These
+values are combined with the MKSA values of the constants for the speed
+of light and the length of an astronomical unit to produce a result for
+the shortest and longest light-travel times in seconds. The figures are
+converted into minutes before being displayed.
+
+ #include <stdio.h>
+ #include <gsl/gsl_const_mksa.h>
+
+ int
+ main (void)
+ {
+ double c = GSL_CONST_MKSA_SPEED_OF_LIGHT;
+ double au = GSL_CONST_MKSA_ASTRONOMICAL_UNIT;
+ double minutes = GSL_CONST_MKSA_MINUTE;
+
+ /* distance stored in meters */
+ double r_earth = 1.00 * au;
+ double r_mars = 1.52 * au;
+
+ double t_min, t_max;
+
+ t_min = (r_mars - r_earth) / c;
+ t_max = (r_mars + r_earth) / c;
+
+ printf ("light travel time from Earth to Mars:\n");
+ printf ("minimum = %.1f minutes\n", t_min / minutes);
+ printf ("maximum = %.1f minutes\n", t_max / minutes);
+
+ return 0;
+ }
+
+Here is the output from the program,
+
+ light travel time from Earth to Mars:
+ minimum = 4.3 minutes
+ maximum = 21.0 minutes
+
+
+File: gsl-ref.info, Node: Physical Constant References and Further Reading, Prev: Physical Constant Examples, Up: Physical Constants
+
+39.18 References and Further Reading
+====================================
+
+The authoritative sources for physical constants are the 2002 CODATA
+recommended values, published in the articles below. Further information
+on the values of physical constants is also available from the cited
+articles and the NIST website.
+
+ Journal of Physical and Chemical Reference Data, 28(6), 1713-1852,
+ 1999
+
+ Reviews of Modern Physics, 72(2), 351-495, 2000
+
+ `http://www.physics.nist.gov/cuu/Constants/index.html'
+
+ `http://physics.nist.gov/Pubs/SP811/appenB9.html'
+
+
+File: gsl-ref.info, Node: IEEE floating-point arithmetic, Next: Debugging Numerical Programs, Prev: Physical Constants, Up: Top
+
+40 IEEE floating-point arithmetic
+*********************************
+
+This chapter describes functions for examining the representation of
+floating point numbers and controlling the floating point environment of
+your program. The functions described in this chapter are declared in
+the header file `gsl_ieee_utils.h'.
+
+* Menu:
+
+* Representation of floating point numbers::
+* Setting up your IEEE environment::
+* IEEE References and Further Reading::
+
+
+File: gsl-ref.info, Node: Representation of floating point numbers, Next: Setting up your IEEE environment, Up: IEEE floating-point arithmetic
+
+40.1 Representation of floating point numbers
+=============================================
+
+The IEEE Standard for Binary Floating-Point Arithmetic defines binary
+formats for single and double precision numbers. Each number is
+composed of three parts: a "sign bit" (s), an "exponent" (E) and a
+"fraction" (f). The numerical value of the combination (s,E,f) is
+given by the following formula,
+
+ (-1)^s (1.fffff...) 2^E
+
+The sign bit is either zero or one. The exponent ranges from a minimum
+value E_min to a maximum value E_max depending on the precision. The
+exponent is converted to an unsigned number e, known as the "biased
+exponent", for storage by adding a "bias" parameter, e = E + bias. The
+sequence fffff... represents the digits of the binary fraction f. The
+binary digits are stored in "normalized form", by adjusting the
+exponent to give a leading digit of 1. Since the leading digit is
+always 1 for normalized numbers it is assumed implicitly and does not
+have to be stored. Numbers smaller than 2^(E_min) are be stored in
+"denormalized form" with a leading zero,
+
+ (-1)^s (0.fffff...) 2^(E_min)
+
+This allows gradual underflow down to 2^(E_min - p) for p bits of
+precision. A zero is encoded with the special exponent of 2^(E_min -
+1) and infinities with the exponent of 2^(E_max + 1).
+
+The format for single precision numbers uses 32 bits divided in the
+following way,
+
+ seeeeeeeefffffffffffffffffffffff
+
+ s = sign bit, 1 bit
+ e = exponent, 8 bits (E_min=-126, E_max=127, bias=127)
+ f = fraction, 23 bits
+
+The format for double precision numbers uses 64 bits divided in the
+following way,
+
+ seeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+ s = sign bit, 1 bit
+ e = exponent, 11 bits (E_min=-1022, E_max=1023, bias=1023)
+ f = fraction, 52 bits
+
+It is often useful to be able to investigate the behavior of a
+calculation at the bit-level and the library provides functions for
+printing the IEEE representations in a human-readable form.
+
+ -- Function: void gsl_ieee_fprintf_float (FILE * STREAM, const float *
+ X)
+ -- Function: void gsl_ieee_fprintf_double (FILE * STREAM, const double
+ * X)
+ These functions output a formatted version of the IEEE
+ floating-point number pointed to by X to the stream STREAM. A
+ pointer is used to pass the number indirectly, to avoid any
+ undesired promotion from `float' to `double'. The output takes
+ one of the following forms,
+
+ `NaN'
+ the Not-a-Number symbol
+
+ `Inf, -Inf'
+ positive or negative infinity
+
+ `1.fffff...*2^E, -1.fffff...*2^E'
+ a normalized floating point number
+
+ `0.fffff...*2^E, -0.fffff...*2^E'
+ a denormalized floating point number
+
+ `0, -0'
+ positive or negative zero
+
+
+ The output can be used directly in GNU Emacs Calc mode by
+ preceding it with `2#' to indicate binary.
+
+ -- Function: void gsl_ieee_printf_float (const float * X)
+ -- Function: void gsl_ieee_printf_double (const double * X)
+ These functions output a formatted version of the IEEE
+ floating-point number pointed to by X to the stream `stdout'.
+
+The following program demonstrates the use of the functions by printing
+the single and double precision representations of the fraction 1/3.
+For comparison the representation of the value promoted from single to
+double precision is also printed.
+
+ #include <stdio.h>
+ #include <gsl/gsl_ieee_utils.h>
+
+ int
+ main (void)
+ {
+ float f = 1.0/3.0;
+ double d = 1.0/3.0;
+
+ double fd = f; /* promote from float to double */
+
+ printf (" f="); gsl_ieee_printf_float(&f);
+ printf ("\n");
+
+ printf ("fd="); gsl_ieee_printf_double(&fd);
+ printf ("\n");
+
+ printf (" d="); gsl_ieee_printf_double(&d);
+ printf ("\n");
+
+ return 0;
+ }
+
+The binary representation of 1/3 is 0.01010101... . The output below
+shows that the IEEE format normalizes this fraction to give a leading
+digit of 1,
+
+ f= 1.01010101010101010101011*2^-2
+ fd= 1.0101010101010101010101100000000000000000000000000000*2^-2
+ d= 1.0101010101010101010101010101010101010101010101010101*2^-2
+
+The output also shows that a single-precision number is promoted to
+double-precision by adding zeros in the binary representation.
+
+
+File: gsl-ref.info, Node: Setting up your IEEE environment, Next: IEEE References and Further Reading, Prev: Representation of floating point numbers, Up: IEEE floating-point arithmetic
+
+40.2 Setting up your IEEE environment
+=====================================
+
+The IEEE standard defines several "modes" for controlling the behavior
+of floating point operations. These modes specify the important
+properties of computer arithmetic: the direction used for rounding (e.g.
+whether numbers should be rounded up, down or to the nearest number),
+the rounding precision and how the program should handle arithmetic
+exceptions, such as division by zero.
+
+ Many of these features can now be controlled via standard functions
+such as `fpsetround', which should be used whenever they are available.
+Unfortunately in the past there has been no universal API for
+controlling their behavior--each system has had its own low-level way
+of accessing them. To help you write portable programs GSL allows you
+to specify modes in a platform-independent way using the environment
+variable `GSL_IEEE_MODE'. The library then takes care of all the
+necessary machine-specific initializations for you when you call the
+function `gsl_ieee_env_setup'.
+
+ -- Function: void gsl_ieee_env_setup ()
+ This function reads the environment variable `GSL_IEEE_MODE' and
+ attempts to set up the corresponding specified IEEE modes. The
+ environment variable should be a list of keywords, separated by
+ commas, like this,
+
+ `GSL_IEEE_MODE' = "KEYWORD,KEYWORD,..."
+
+ where KEYWORD is one of the following mode-names,
+
+ `single-precision'
+
+ `double-precision'
+
+ `extended-precision'
+
+ `round-to-nearest'
+
+ `round-down'
+
+ `round-up'
+
+ `round-to-zero'
+
+ `mask-all'
+
+ `mask-invalid'
+
+ `mask-denormalized'
+
+ `mask-division-by-zero'
+
+ `mask-overflow'
+
+ `mask-underflow'
+
+ `trap-inexact'
+
+ `trap-common'
+
+ If `GSL_IEEE_MODE' is empty or undefined then the function returns
+ immediately and no attempt is made to change the system's IEEE
+ mode. When the modes from `GSL_IEEE_MODE' are turned on the
+ function prints a short message showing the new settings to remind
+ you that the results of the program will be affected.
+
+ If the requested modes are not supported by the platform being
+ used then the function calls the error handler and returns an
+ error code of `GSL_EUNSUP'.
+
+ When options are specified using this method, the resulting mode is
+ based on a default setting of the highest available precision
+ (double precision or extended precision, depending on the
+ platform) in round-to-nearest mode, with all exceptions enabled
+ apart from the INEXACT exception. The INEXACT exception is
+ generated whenever rounding occurs, so it must generally be
+ disabled in typical scientific calculations. All other
+ floating-point exceptions are enabled by default, including
+ underflows and the use of denormalized numbers, for safety. They
+ can be disabled with the individual `mask-' settings or together
+ using `mask-all'.
+
+ The following adjusted combination of modes is convenient for many
+ purposes,
+
+ GSL_IEEE_MODE="double-precision,"\
+ "mask-underflow,"\
+ "mask-denormalized"
+
+ This choice ignores any errors relating to small numbers (either
+ denormalized, or underflowing to zero) but traps overflows,
+ division by zero and invalid operations.
+
+To demonstrate the effects of different rounding modes consider the
+following program which computes e, the base of natural logarithms, by
+summing a rapidly-decreasing series,
+
+ e = 1 + 1/2! + 1/3! + 1/4! + ...
+ = 2.71828182846...
+
+ #include <stdio.h>
+ #include <gsl/gsl_math.h>
+ #include <gsl/gsl_ieee_utils.h>
+
+ int
+ main (void)
+ {
+ double x = 1, oldsum = 0, sum = 0;
+ int i = 0;
+
+ gsl_ieee_env_setup (); /* read GSL_IEEE_MODE */
+
+ do
+ {
+ i++;
+
+ oldsum = sum;
+ sum += x;
+ x = x / i;
+
+ printf ("i=%2d sum=%.18f error=%g\n",
+ i, sum, sum - M_E);
+
+ if (i > 30)
+ break;
+ }
+ while (sum != oldsum);
+
+ return 0;
+ }
+
+Here are the results of running the program in `round-to-nearest' mode.
+This is the IEEE default so it isn't really necessary to specify it
+here,
+
+ $ GSL_IEEE_MODE="round-to-nearest" ./a.out
+ i= 1 sum=1.000000000000000000 error=-1.71828
+ i= 2 sum=2.000000000000000000 error=-0.718282
+ ....
+ i=18 sum=2.718281828459045535 error=4.44089e-16
+ i=19 sum=2.718281828459045535 error=4.44089e-16
+
+After nineteen terms the sum converges to within 4 \times 10^-16 of the
+correct value. If we now change the rounding mode to `round-down' the
+final result is less accurate,
+
+ $ GSL_IEEE_MODE="round-down" ./a.out
+ i= 1 sum=1.000000000000000000 error=-1.71828
+ ....
+ i=19 sum=2.718281828459041094 error=-3.9968e-15
+
+The result is about 4 \times 10^-15 below the correct value, an order
+of magnitude worse than the result obtained in the `round-to-nearest'
+mode.
+
+ If we change to rounding mode to `round-up' then the series no
+longer converges (the reason is that when we add each term to the sum
+the final result is always rounded up. This is guaranteed to increase
+the sum by at least one tick on each iteration). To avoid this problem
+we would need to use a safer converge criterion, such as `while
+(fabs(sum - oldsum) > epsilon)', with a suitably chosen value of
+epsilon.
+
+ Finally we can see the effect of computing the sum using
+single-precision rounding, in the default `round-to-nearest' mode. In
+this case the program thinks it is still using double precision numbers
+but the CPU rounds the result of each floating point operation to
+single-precision accuracy. This simulates the effect of writing the
+program using single-precision `float' variables instead of `double'
+variables. The iteration stops after about half the number of
+iterations and the final result is much less accurate,
+
+ $ GSL_IEEE_MODE="single-precision" ./a.out
+ ....
+ i=12 sum=2.718281984329223633 error=1.5587e-07
+
+with an error of O(10^-7), which corresponds to single precision
+accuracy (about 1 part in 10^7). Continuing the iterations further
+does not decrease the error because all the subsequent results are
+rounded to the same value.
+
+
+File: gsl-ref.info, Node: IEEE References and Further Reading, Prev: Setting up your IEEE environment, Up: IEEE floating-point arithmetic
+
+40.3 References and Further Reading
+===================================
+
+The reference for the IEEE standard is,
+
+ ANSI/IEEE Std 754-1985, IEEE Standard for Binary Floating-Point
+ Arithmetic.
+
+A more pedagogical introduction to the standard can be found in the
+following paper,
+
+ David Goldberg: What Every Computer Scientist Should Know About
+ Floating-Point Arithmetic. `ACM Computing Surveys', Vol. 23, No. 1
+ (March 1991), pages 5-48.
+
+ Corrigendum: `ACM Computing Surveys', Vol. 23, No. 3 (September
+ 1991), page 413. and see also the sections by B. A. Wichmann and
+ Charles B. Dunham in Surveyor's Forum: "What Every Computer
+ Scientist Should Know About Floating-Point Arithmetic". `ACM
+ Computing Surveys', Vol. 24, No. 3 (September 1992), page 319.
+
+A detailed textbook on IEEE arithmetic and its practical use is
+available from SIAM Press,
+
+ Michael L. Overton, `Numerical Computing with IEEE Floating Point
+ Arithmetic', SIAM Press, ISBN 0898715717.
+
+
+
+File: gsl-ref.info, Node: Debugging Numerical Programs, Next: Contributors to GSL, Prev: IEEE floating-point arithmetic, Up: Top
+
+Appendix A Debugging Numerical Programs
+***************************************
+
+This chapter describes some tips and tricks for debugging numerical
+programs which use GSL.
+
+* Menu:
+
+* Using gdb::
+* Examining floating point registers::
+* Handling floating point exceptions::
+* GCC warning options for numerical programs::
+* Debugging References::
+
+
+File: gsl-ref.info, Node: Using gdb, Next: Examining floating point registers, Up: Debugging Numerical Programs
+
+A.1 Using gdb
+=============
+
+Any errors reported by the library are passed to the function
+`gsl_error'. By running your programs under gdb and setting a
+breakpoint in this function you can automatically catch any library
+errors. You can add a breakpoint for every session by putting
+
+ break gsl_error
+
+into your `.gdbinit' file in the directory where your program is
+started.
+
+ If the breakpoint catches an error then you can use a backtrace
+(`bt') to see the call-tree, and the arguments which possibly caused
+the error. By moving up into the calling function you can investigate
+the values of variables at that point. Here is an example from the
+program `fft/test_trap', which contains the following line,
+
+ status = gsl_fft_complex_wavetable_alloc (0, &complex_wavetable);
+
+The function `gsl_fft_complex_wavetable_alloc' takes the length of an
+FFT as its first argument. When this line is executed an error will be
+generated because the length of an FFT is not allowed to be zero.
+
+ To debug this problem we start `gdb', using the file `.gdbinit' to
+define a breakpoint in `gsl_error',
+
+ $ gdb test_trap
+
+ GDB is free software and you are welcome to distribute copies
+ of it under certain conditions; type "show copying" to see
+ the conditions. There is absolutely no warranty for GDB;
+ type "show warranty" for details. GDB 4.16 (i586-debian-linux),
+ Copyright 1996 Free Software Foundation, Inc.
+
+ Breakpoint 1 at 0x8050b1e: file error.c, line 14.
+
+When we run the program this breakpoint catches the error and shows the
+reason for it.
+
+ (gdb) run
+ Starting program: test_trap
+
+ Breakpoint 1, gsl_error (reason=0x8052b0d
+ "length n must be positive integer",
+ file=0x8052b04 "c_init.c", line=108, gsl_errno=1)
+ at error.c:14
+ 14 if (gsl_error_handler)
+
+The first argument of `gsl_error' is always a string describing the
+error. Now we can look at the backtrace to see what caused the problem,
+
+ (gdb) bt
+ #0 gsl_error (reason=0x8052b0d
+ "length n must be positive integer",
+ file=0x8052b04 "c_init.c", line=108, gsl_errno=1)
+ at error.c:14
+ #1 0x8049376 in gsl_fft_complex_wavetable_alloc (n=0,
+ wavetable=0xbffff778) at c_init.c:108
+ #2 0x8048a00 in main (argc=1, argv=0xbffff9bc)
+ at test_trap.c:94
+ #3 0x80488be in ___crt_dummy__ ()
+
+We can see that the error was generated in the function
+`gsl_fft_complex_wavetable_alloc' when it was called with an argument
+of N=0. The original call came from line 94 in the file `test_trap.c'.
+
+ By moving up to the level of the original call we can find the line
+that caused the error,
+
+ (gdb) up
+ #1 0x8049376 in gsl_fft_complex_wavetable_alloc (n=0,
+ wavetable=0xbffff778) at c_init.c:108
+ 108 GSL_ERROR ("length n must be positive integer", GSL_EDOM);
+ (gdb) up
+ #2 0x8048a00 in main (argc=1, argv=0xbffff9bc)
+ at test_trap.c:94
+ 94 status = gsl_fft_complex_wavetable_alloc (0,
+ &complex_wavetable);
+
+Thus we have found the line that caused the problem. From this point we
+could also print out the values of other variables such as
+`complex_wavetable'.
+
+
+File: gsl-ref.info, Node: Examining floating point registers, Next: Handling floating point exceptions, Prev: Using gdb, Up: Debugging Numerical Programs
+
+A.2 Examining floating point registers
+======================================
+
+The contents of floating point registers can be examined using the
+command `info float' (on supported platforms).
+
+ (gdb) info float
+ st0: 0xc4018b895aa17a945000 Valid Normal -7.838871e+308
+ st1: 0x3ff9ea3f50e4d7275000 Valid Normal 0.0285946
+ st2: 0x3fe790c64ce27dad4800 Valid Normal 6.7415931e-08
+ st3: 0x3ffaa3ef0df6607d7800 Spec Normal 0.0400229
+ st4: 0x3c028000000000000000 Valid Normal 4.4501477e-308
+ st5: 0x3ffef5412c22219d9000 Zero Normal 0.9580257
+ st6: 0x3fff8000000000000000 Valid Normal 1
+ st7: 0xc4028b65a1f6d243c800 Valid Normal -1.566206e+309
+ fctrl: 0x0272 53 bit; NEAR; mask DENOR UNDER LOS;
+ fstat: 0xb9ba flags 0001; top 7; excep DENOR OVERF UNDER LOS
+ ftag: 0x3fff
+ fip: 0x08048b5c
+ fcs: 0x051a0023
+ fopoff: 0x08086820
+ fopsel: 0x002b
+
+Individual registers can be examined using the variables $REG, where
+REG is the register name.
+
+ (gdb) p $st1
+ $1 = 0.02859464454261210347719
+
+
+File: gsl-ref.info, Node: Handling floating point exceptions, Next: GCC warning options for numerical programs, Prev: Examining floating point registers, Up: Debugging Numerical Programs
+
+A.3 Handling floating point exceptions
+======================================
+
+It is possible to stop the program whenever a `SIGFPE' floating point
+exception occurs. This can be useful for finding the cause of an
+unexpected infinity or `NaN'. The current handler settings can be
+shown with the command `info signal SIGFPE'.
+
+ (gdb) info signal SIGFPE
+ Signal Stop Print Pass to program Description
+ SIGFPE Yes Yes Yes Arithmetic exception
+
+Unless the program uses a signal handler the default setting should be
+changed so that SIGFPE is not passed to the program, as this would cause
+it to exit. The command `handle SIGFPE stop nopass' prevents this.
+
+ (gdb) handle SIGFPE stop nopass
+ Signal Stop Print Pass to program Description
+ SIGFPE Yes Yes No Arithmetic exception
+
+Depending on the platform it may be necessary to instruct the kernel to
+generate signals for floating point exceptions. For programs using GSL
+this can be achieved using the `GSL_IEEE_MODE' environment variable in
+conjunction with the function `gsl_ieee_env_setup' as described in
+*note IEEE floating-point arithmetic::.
+
+ (gdb) set env GSL_IEEE_MODE=double-precision
+
+
+File: gsl-ref.info, Node: GCC warning options for numerical programs, Next: Debugging References, Prev: Handling floating point exceptions, Up: Debugging Numerical Programs
+
+A.4 GCC warning options for numerical programs
+==============================================
+
+Writing reliable numerical programs in C requires great care. The
+following GCC warning options are recommended when compiling numerical
+programs:
+
+ gcc -ansi -pedantic -Werror -Wall -W
+ -Wmissing-prototypes -Wstrict-prototypes
+ -Wtraditional -Wconversion -Wshadow
+ -Wpointer-arith -Wcast-qual -Wcast-align
+ -Wwrite-strings -Wnested-externs
+ -fshort-enums -fno-common -Dinline= -g -O2
+
+For details of each option consult the manual `Using and Porting GCC'.
+The following table gives a brief explanation of what types of errors
+these options catch.
+
+`-ansi -pedantic'
+ Use ANSI C, and reject any non-ANSI extensions. These flags help
+ in writing portable programs that will compile on other systems.
+
+`-Werror'
+ Consider warnings to be errors, so that compilation stops. This
+ prevents warnings from scrolling off the top of the screen and
+ being lost. You won't be able to compile the program until it is
+ completely warning-free.
+
+`-Wall'
+ This turns on a set of warnings for common programming problems.
+ You need `-Wall', but it is not enough on its own.
+
+`-O2'
+ Turn on optimization. The warnings for uninitialized variables in
+ `-Wall' rely on the optimizer to analyze the code. If there is no
+ optimization then these warnings aren't generated.
+
+`-W'
+ This turns on some extra warnings not included in `-Wall', such as
+ missing return values and comparisons between signed and unsigned
+ integers.
+
+`-Wmissing-prototypes -Wstrict-prototypes'
+ Warn if there are any missing or inconsistent prototypes. Without
+ prototypes it is harder to detect problems with incorrect
+ arguments.
+
+`-Wtraditional'
+ This warns about certain constructs that behave differently in
+ traditional and ANSI C. Whether the traditional or ANSI
+ interpretation is used might be unpredictable on other compilers.
+
+`-Wconversion'
+ The main use of this option is to warn about conversions from
+ signed to unsigned integers. For example, `unsigned int x = -1'.
+ If you need to perform such a conversion you can use an explicit
+ cast.
+
+`-Wshadow'
+ This warns whenever a local variable shadows another local
+ variable. If two variables have the same name then it is a
+ potential source of confusion.
+
+`-Wpointer-arith -Wcast-qual -Wcast-align'
+ These options warn if you try to do pointer arithmetic for types
+ which don't have a size, such as `void', if you remove a `const'
+ cast from a pointer, or if you cast a pointer to a type which has a
+ different size, causing an invalid alignment.
+
+`-Wwrite-strings'
+ This option gives string constants a `const' qualifier so that it
+ will be a compile-time error to attempt to overwrite them.
+
+`-fshort-enums'
+ This option makes the type of `enum' as short as possible.
+ Normally this makes an `enum' different from an `int'.
+ Consequently any attempts to assign a pointer-to-int to a
+ pointer-to-enum will generate a cast-alignment warning.
+
+`-fno-common'
+ This option prevents global variables being simultaneously defined
+ in different object files (you get an error at link time). Such a
+ variable should be defined in one file and referred to in other
+ files with an `extern' declaration.
+
+`-Wnested-externs'
+ This warns if an `extern' declaration is encountered within a
+ function.
+
+`-Dinline='
+ The `inline' keyword is not part of ANSI C. Thus if you want to use
+ `-ansi' with a program which uses inline functions you can use this
+ preprocessor definition to remove the `inline' keywords.
+
+`-g'
+ It always makes sense to put debugging symbols in the executable
+ so that you can debug it using `gdb'. The only effect of
+ debugging symbols is to increase the size of the file, and you can
+ use the `strip' command to remove them later if necessary.
+
+
+File: gsl-ref.info, Node: Debugging References, Prev: GCC warning options for numerical programs, Up: Debugging Numerical Programs
+
+A.5 References and Further Reading
+==================================
+
+The following books are essential reading for anyone writing and
+debugging numerical programs with GCC and GDB.
+
+ R.M. Stallman, `Using and Porting GNU CC', Free Software
+ Foundation, ISBN 1882114388
+
+ R.M. Stallman, R.H. Pesch, `Debugging with GDB: The GNU
+ Source-Level Debugger', Free Software Foundation, ISBN 1882114779
+
+For a tutorial introduction to the GNU C Compiler and related programs,
+see
+
+ B.J. Gough, `An Introduction to GCC', Network Theory Ltd, ISBN
+ 0954161793
+
+
+File: gsl-ref.info, Node: Contributors to GSL, Next: Autoconf Macros, Prev: Debugging Numerical Programs, Up: Top
+
+Appendix B Contributors to GSL
+******************************
+
+(See the AUTHORS file in the distribution for up-to-date information.)
+
+*Mark Galassi*
+ Conceived GSL (with James Theiler) and wrote the design document.
+ Wrote the simulated annealing package and the relevant chapter in
+ the manual.
+
+*James Theiler*
+ Conceived GSL (with Mark Galassi). Wrote the random number
+ generators and the relevant chapter in this manual.
+
+*Jim Davies*
+ Wrote the statistical routines and the relevant chapter in this
+ manual.
+
+*Brian Gough*
+ FFTs, numerical integration, random number generators and
+ distributions, root finding, minimization and fitting, polynomial
+ solvers, complex numbers, physical constants, permutations, vector
+ and matrix functions, histograms, statistics, ieee-utils, revised
+ CBLAS Level 2 & 3, matrix decompositions, eigensystems, cumulative
+ distribution functions, testing, documentation and releases.
+
+*Reid Priedhorsky*
+ Wrote and documented the initial version of the root finding
+ routines while at Los Alamos National Laboratory, Mathematical
+ Modeling and Analysis Group.
+
+*Gerard Jungman*
+ Special Functions, Series acceleration, ODEs, BLAS, Linear Algebra,
+ Eigensystems, Hankel Transforms.
+
+*Mike Booth*
+ Wrote the Monte Carlo library.
+
+*Jorma Olavi Ta"htinen*
+ Wrote the initial complex arithmetic functions.
+
+*Thomas Walter*
+ Wrote the initial heapsort routines and cholesky decomposition.
+
+*Fabrice Rossi*
+ Multidimensional minimization.
+
+*Carlo Perassi*
+ Implementation of the random number generators in Knuth's
+ `Seminumerical Algorithms', 3rd Ed.
+
+*Szymon Jaroszewicz*
+ Wrote the routines for generating combinations.
+
+*Nicolas Darnis*
+ Wrote the initial routines for canonical permutations.
+
+*Jason H. Stover*
+ Wrote the major cumulative distribution functions.
+
+*Ivo Alxneit*
+ Wrote the routines for wavelet transforms.
+
+*Tuomo Keskitalo*
+ Improved the implementation of the ODE solvers.
+
+*Lowell Johnson*
+ Implementation of the Mathieu functions.
+
+*Patrick Alken*
+ Implementation of non-symmetric eigensystems and B-splines.
+
+
+ Thanks to Nigel Lowry for help in proofreading the manual.
+
+ The non-symmetric eigensystems routines contain code based on the
+LAPACK linear algebra library. LAPACK is distributed under the
+following license:
+
+
+ Copyright (c) 1992-2006 The University of Tennessee. All rights
+ reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer listed
+ in this license in the documentation and/or other materials
+ provided with the distribution.
+
+ * Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+File: gsl-ref.info, Node: Autoconf Macros, Next: GSL CBLAS Library, Prev: Contributors to GSL, Up: Top
+
+Appendix C Autoconf Macros
+**************************
+
+For applications using `autoconf' the standard macro `AC_CHECK_LIB' can
+be used to link with GSL automatically from a `configure' script. The
+library itself depends on the presence of a CBLAS and math library as
+well, so these must also be located before linking with the main
+`libgsl' file. The following commands should be placed in the
+`configure.ac' file to perform these tests,
+
+ AC_CHECK_LIB(m,main)
+ AC_CHECK_LIB(gslcblas,main)
+ AC_CHECK_LIB(gsl,main)
+
+It is important to check for `libm' and `libgslcblas' before `libgsl',
+otherwise the tests will fail. Assuming the libraries are found the
+output during the configure stage looks like this,
+
+ checking for main in -lm... yes
+ checking for main in -lgslcblas... yes
+ checking for main in -lgsl... yes
+
+If the library is found then the tests will define the macros
+`HAVE_LIBGSL', `HAVE_LIBGSLCBLAS', `HAVE_LIBM' and add the options
+`-lgsl -lgslcblas -lm' to the variable `LIBS'.
+
+ The tests above will find any version of the library. They are
+suitable for general use, where the versions of the functions are not
+important. An alternative macro is available in the file `gsl.m4' to
+test for a specific version of the library. To use this macro simply
+add the following line to your `configure.in' file instead of the tests
+above:
+
+ AM_PATH_GSL(GSL_VERSION,
+ [action-if-found],
+ [action-if-not-found])
+
+The argument `GSL_VERSION' should be the two or three digit MAJOR.MINOR
+or MAJOR.MINOR.MICRO version number of the release you require. A
+suitable choice for `action-if-not-found' is,
+
+ AC_MSG_ERROR(could not find required version of GSL)
+
+Then you can add the variables `GSL_LIBS' and `GSL_CFLAGS' to your
+Makefile.am files to obtain the correct compiler flags. `GSL_LIBS' is
+equal to the output of the `gsl-config --libs' command and `GSL_CFLAGS'
+is equal to `gsl-config --cflags' command. For example,
+
+ libfoo_la_LDFLAGS = -lfoo $(GSL_LIBS) -lgslcblas
+
+Note that the macro `AM_PATH_GSL' needs to use the C compiler so it
+should appear in the `configure.in' file before the macro
+`AC_LANG_CPLUSPLUS' for programs that use C++.
+
+ To test for `inline' the following test should be placed in your
+`configure.in' file,
+
+ AC_C_INLINE
+
+ if test "$ac_cv_c_inline" != no ; then
+ AC_DEFINE(HAVE_INLINE,1)
+ AC_SUBST(HAVE_INLINE)
+ fi
+
+and the macro will then be defined in the compilation flags or by
+including the file `config.h' before any library headers.
+
+ The following autoconf test will check for `extern inline',
+
+ dnl Check for "extern inline", using a modified version
+ dnl of the test for AC_C_INLINE from acspecific.mt
+ dnl
+ AC_CACHE_CHECK([for extern inline], ac_cv_c_extern_inline,
+ [ac_cv_c_extern_inline=no
+ AC_TRY_COMPILE([extern $ac_cv_c_inline double foo(double x);
+ extern $ac_cv_c_inline double foo(double x) { return x+1.0; };
+ double foo (double x) { return x + 1.0; };],
+ [ foo(1.0) ],
+ [ac_cv_c_extern_inline="yes"])
+ ])
+
+ if test "$ac_cv_c_extern_inline" != no ; then
+ AC_DEFINE(HAVE_INLINE,1)
+ AC_SUBST(HAVE_INLINE)
+ fi
+
+ The substitution of portability functions can be made automatically
+if you use `autoconf'. For example, to test whether the BSD function
+`hypot' is available you can include the following line in the
+configure file `configure.in' for your application,
+
+ AC_CHECK_FUNCS(hypot)
+
+and place the following macro definitions in the file `config.h.in',
+
+ /* Substitute gsl_hypot for missing system hypot */
+
+ #ifndef HAVE_HYPOT
+ #define hypot gsl_hypot
+ #endif
+
+The application source files can then use the include command `#include
+<config.h>' to substitute `gsl_hypot' for each occurrence of `hypot'
+when `hypot' is not available.
+
+
+File: gsl-ref.info, Node: GSL CBLAS Library, Next: Free Software Needs Free Documentation, Prev: Autoconf Macros, Up: Top
+
+Appendix D GSL CBLAS Library
+****************************
+
+The prototypes for the low-level CBLAS functions are declared in the
+file `gsl_cblas.h'. For the definition of the functions consult the
+documentation available from Netlib (*note BLAS References and Further
+Reading::).
+
+* Menu:
+
+* Level 1 CBLAS Functions::
+* Level 2 CBLAS Functions::
+* Level 3 CBLAS Functions::
+* GSL CBLAS Examples::
+
+
+File: gsl-ref.info, Node: Level 1 CBLAS Functions, Next: Level 2 CBLAS Functions, Up: GSL CBLAS Library
+
+D.1 Level 1
+===========
+
+ -- Function: float cblas_sdsdot (const int N, const float ALPHA, const
+ float * X, const int INCX, const float * Y, const int INCY)
+
+ -- Function: double cblas_dsdot (const int N, const float * X, const
+ int INCX, const float * Y, const int INCY)
+
+ -- Function: float cblas_sdot (const int N, const float * X, const int
+ INCX, const float * Y, const int INCY)
+
+ -- Function: double cblas_ddot (const int N, const double * X, const
+ int INCX, const double * Y, const int INCY)
+
+ -- Function: void cblas_cdotu_sub (const int N, const void * X, const
+ int INCX, const void * Y, const int INCY, void * DOTU)
+
+ -- Function: void cblas_cdotc_sub (const int N, const void * X, const
+ int INCX, const void * Y, const int INCY, void * DOTC)
+
+ -- Function: void cblas_zdotu_sub (const int N, const void * X, const
+ int INCX, const void * Y, const int INCY, void * DOTU)
+
+ -- Function: void cblas_zdotc_sub (const int N, const void * X, const
+ int INCX, const void * Y, const int INCY, void * DOTC)
+
+ -- Function: float cblas_snrm2 (const int N, const float * X, const
+ int INCX)
+
+ -- Function: float cblas_sasum (const int N, const float * X, const
+ int INCX)
+
+ -- Function: double cblas_dnrm2 (const int N, const double * X, const
+ int INCX)
+
+ -- Function: double cblas_dasum (const int N, const double * X, const
+ int INCX)
+
+ -- Function: float cblas_scnrm2 (const int N, const void * X, const
+ int INCX)
+
+ -- Function: float cblas_scasum (const int N, const void * X, const
+ int INCX)
+
+ -- Function: double cblas_dznrm2 (const int N, const void * X, const
+ int INCX)
+
+ -- Function: double cblas_dzasum (const int N, const void * X, const
+ int INCX)
+
+ -- Function: CBLAS_INDEX cblas_isamax (const int N, const float * X,
+ const int INCX)
+
+ -- Function: CBLAS_INDEX cblas_idamax (const int N, const double * X,
+ const int INCX)
+
+ -- Function: CBLAS_INDEX cblas_icamax (const int N, const void * X,
+ const int INCX)
+
+ -- Function: CBLAS_INDEX cblas_izamax (const int N, const void * X,
+ const int INCX)
+
+ -- Function: void cblas_sswap (const int N, float * X, const int INCX,
+ float * Y, const int INCY)
+
+ -- Function: void cblas_scopy (const int N, const float * X, const int
+ INCX, float * Y, const int INCY)
+
+ -- Function: void cblas_saxpy (const int N, const float ALPHA, const
+ float * X, const int INCX, float * Y, const int INCY)
+
+ -- Function: void cblas_dswap (const int N, double * X, const int
+ INCX, double * Y, const int INCY)
+
+ -- Function: void cblas_dcopy (const int N, const double * X, const
+ int INCX, double * Y, const int INCY)
+
+ -- Function: void cblas_daxpy (const int N, const double ALPHA, const
+ double * X, const int INCX, double * Y, const int INCY)
+
+ -- Function: void cblas_cswap (const int N, void * X, const int INCX,
+ void * Y, const int INCY)
+
+ -- Function: void cblas_ccopy (const int N, const void * X, const int
+ INCX, void * Y, const int INCY)
+
+ -- Function: void cblas_caxpy (const int N, const void * ALPHA, const
+ void * X, const int INCX, void * Y, const int INCY)
+
+ -- Function: void cblas_zswap (const int N, void * X, const int INCX,
+ void * Y, const int INCY)
+
+ -- Function: void cblas_zcopy (const int N, const void * X, const int
+ INCX, void * Y, const int INCY)
+
+ -- Function: void cblas_zaxpy (const int N, const void * ALPHA, const
+ void * X, const int INCX, void * Y, const int INCY)
+
+ -- Function: void cblas_srotg (float * A, float * B, float * C, float
+ * S)
+
+ -- Function: void cblas_srotmg (float * D1, float * D2, float * B1,
+ const float B2, float * P)
+
+ -- Function: void cblas_srot (const int N, float * X, const int INCX,
+ float * Y, const int INCY, const float C, const float S)
+
+ -- Function: void cblas_srotm (const int N, float * X, const int INCX,
+ float * Y, const int INCY, const float * P)
+
+ -- Function: void cblas_drotg (double * A, double * B, double * C,
+ double * S)
+
+ -- Function: void cblas_drotmg (double * D1, double * D2, double * B1,
+ const double B2, double * P)
+
+ -- Function: void cblas_drot (const int N, double * X, const int INCX,
+ double * Y, const int INCY, const double C, const double S)
+
+ -- Function: void cblas_drotm (const int N, double * X, const int
+ INCX, double * Y, const int INCY, const double * P)
+
+ -- Function: void cblas_sscal (const int N, const float ALPHA, float *
+ X, const int INCX)
+
+ -- Function: void cblas_dscal (const int N, const double ALPHA, double
+ * X, const int INCX)
+
+ -- Function: void cblas_cscal (const int N, const void * ALPHA, void *
+ X, const int INCX)
+
+ -- Function: void cblas_zscal (const int N, const void * ALPHA, void *
+ X, const int INCX)
+
+ -- Function: void cblas_csscal (const int N, const float ALPHA, void *
+ X, const int INCX)
+
+ -- Function: void cblas_zdscal (const int N, const double ALPHA, void
+ * X, const int INCX)
+
+
+File: gsl-ref.info, Node: Level 2 CBLAS Functions, Next: Level 3 CBLAS Functions, Prev: Level 1 CBLAS Functions, Up: GSL CBLAS Library
+
+D.2 Level 2
+===========
+
+ -- Function: void cblas_sgemv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ float ALPHA, const float * A, const int LDA, const float * X,
+ const int INCX, const float BETA, float * Y, const int INCY)
+
+ -- Function: void cblas_sgbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ int KL, const int KU, const float ALPHA, const float * A,
+ const int LDA, const float * X, const int INCX, const float
+ BETA, float * Y, const int INCY)
+
+ -- Function: void cblas_strmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const float * A,
+ const int LDA, float * X, const int INCX)
+
+ -- Function: void cblas_stbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ float * A, const int LDA, float * X, const int INCX)
+
+ -- Function: void cblas_stpmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const float * AP,
+ float * X, const int INCX)
+
+ -- Function: void cblas_strsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const float * A,
+ const int LDA, float * X, const int INCX)
+
+ -- Function: void cblas_stbsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ float * A, const int LDA, float * X, const int INCX)
+
+ -- Function: void cblas_stpsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const float * AP,
+ float * X, const int INCX)
+
+ -- Function: void cblas_dgemv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ double ALPHA, const double * A, const int LDA, const double *
+ X, const int INCX, const double BETA, double * Y, const int
+ INCY)
+
+ -- Function: void cblas_dgbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ int KL, const int KU, const double ALPHA, const double * A,
+ const int LDA, const double * X, const int INCX, const double
+ BETA, double * Y, const int INCY)
+
+ -- Function: void cblas_dtrmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const double * A,
+ const int LDA, double * X, const int INCX)
+
+ -- Function: void cblas_dtbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ double * A, const int LDA, double * X, const int INCX)
+
+ -- Function: void cblas_dtpmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const double * AP,
+ double * X, const int INCX)
+
+ -- Function: void cblas_dtrsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const double * A,
+ const int LDA, double * X, const int INCX)
+
+ -- Function: void cblas_dtbsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ double * A, const int LDA, double * X, const int INCX)
+
+ -- Function: void cblas_dtpsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const double * AP,
+ double * X, const int INCX)
+
+ -- Function: void cblas_cgemv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ void * ALPHA, const void * A, const int LDA, const void * X,
+ const int INCX, const void * BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_cgbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ int KL, const int KU, const void * ALPHA, const void * A,
+ const int LDA, const void * X, const int INCX, const void *
+ BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_ctrmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * A,
+ const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ctbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ void * A, const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ctpmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * AP,
+ void * X, const int INCX)
+
+ -- Function: void cblas_ctrsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * A,
+ const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ctbsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ void * A, const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ctpsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * AP,
+ void * X, const int INCX)
+
+ -- Function: void cblas_zgemv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ void * ALPHA, const void * A, const int LDA, const void * X,
+ const int INCX, const void * BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_zgbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const int M, const int N, const
+ int KL, const int KU, const void * ALPHA, const void * A,
+ const int LDA, const void * X, const int INCX, const void *
+ BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_ztrmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * A,
+ const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ztbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ void * A, const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ztpmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * AP,
+ void * X, const int INCX)
+
+ -- Function: void cblas_ztrsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * A,
+ const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ztbsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const int K, const
+ void * A, const int LDA, void * X, const int INCX)
+
+ -- Function: void cblas_ztpsv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANSA,
+ const enum CBLAS_DIAG DIAG, const int N, const void * AP,
+ void * X, const int INCX)
+
+ -- Function: void cblas_ssymv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const float ALPHA, const
+ float * A, const int LDA, const float * X, const int INCX,
+ const float BETA, float * Y, const int INCY)
+
+ -- Function: void cblas_ssbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const int K, const float
+ ALPHA, const float * A, const int LDA, const float * X, const
+ int INCX, const float BETA, float * Y, const int INCY)
+
+ -- Function: void cblas_sspmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const float ALPHA, const
+ float * AP, const float * X, const int INCX, const float
+ BETA, float * Y, const int INCY)
+
+ -- Function: void cblas_sger (const enum CBLAS_ORDER ORDER, const int
+ M, const int N, const float ALPHA, const float * X, const int
+ INCX, const float * Y, const int INCY, float * A, const int
+ LDA)
+
+ -- Function: void cblas_ssyr (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const float ALPHA, const float
+ * X, const int INCX, float * A, const int LDA)
+
+ -- Function: void cblas_sspr (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const float ALPHA, const float
+ * X, const int INCX, float * AP)
+
+ -- Function: void cblas_ssyr2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const float ALPHA, const
+ float * X, const int INCX, const float * Y, const int INCY,
+ float * A, const int LDA)
+
+ -- Function: void cblas_sspr2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const float ALPHA, const
+ float * X, const int INCX, const float * Y, const int INCY,
+ float * A)
+
+ -- Function: void cblas_dsymv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const double ALPHA, const
+ double * A, const int LDA, const double * X, const int INCX,
+ const double BETA, double * Y, const int INCY)
+
+ -- Function: void cblas_dsbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const int K, const double
+ ALPHA, const double * A, const int LDA, const double * X,
+ const int INCX, const double BETA, double * Y, const int INCY)
+
+ -- Function: void cblas_dspmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const double ALPHA, const
+ double * AP, const double * X, const int INCX, const double
+ BETA, double * Y, const int INCY)
+
+ -- Function: void cblas_dger (const enum CBLAS_ORDER ORDER, const int
+ M, const int N, const double ALPHA, const double * X, const
+ int INCX, const double * Y, const int INCY, double * A, const
+ int LDA)
+
+ -- Function: void cblas_dsyr (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const double ALPHA, const
+ double * X, const int INCX, double * A, const int LDA)
+
+ -- Function: void cblas_dspr (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const double ALPHA, const
+ double * X, const int INCX, double * AP)
+
+ -- Function: void cblas_dsyr2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const double ALPHA, const
+ double * X, const int INCX, const double * Y, const int INCY,
+ double * A, const int LDA)
+
+ -- Function: void cblas_dspr2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const double ALPHA, const
+ double * X, const int INCX, const double * Y, const int INCY,
+ double * A)
+
+ -- Function: void cblas_chemv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * A, const int LDA, const void * X, const int INCX,
+ const void * BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_chbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const int K, const void *
+ ALPHA, const void * A, const int LDA, const void * X, const
+ int INCX, const void * BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_chpmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * AP, const void * X, const int INCX, const void * BETA,
+ void * Y, const int INCY)
+
+ -- Function: void cblas_cgeru (const enum CBLAS_ORDER ORDER, const int
+ M, const int N, const void * ALPHA, const void * X, const int
+ INCX, const void * Y, const int INCY, void * A, const int LDA)
+
+ -- Function: void cblas_cgerc (const enum CBLAS_ORDER ORDER, const int
+ M, const int N, const void * ALPHA, const void * X, const int
+ INCX, const void * Y, const int INCY, void * A, const int LDA)
+
+ -- Function: void cblas_cher (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const float ALPHA, const void *
+ X, const int INCX, void * A, const int LDA)
+
+ -- Function: void cblas_chpr (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const float ALPHA, const void *
+ X, const int INCX, void * A)
+
+ -- Function: void cblas_cher2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * X, const int INCX, const void * Y, const int INCY,
+ void * A, const int LDA)
+
+ -- Function: void cblas_chpr2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * X, const int INCX, const void * Y, const int INCY,
+ void * AP)
+
+ -- Function: void cblas_zhemv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * A, const int LDA, const void * X, const int INCX,
+ const void * BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_zhbmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const int K, const void *
+ ALPHA, const void * A, const int LDA, const void * X, const
+ int INCX, const void * BETA, void * Y, const int INCY)
+
+ -- Function: void cblas_zhpmv (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * AP, const void * X, const int INCX, const void * BETA,
+ void * Y, const int INCY)
+
+ -- Function: void cblas_zgeru (const enum CBLAS_ORDER ORDER, const int
+ M, const int N, const void * ALPHA, const void * X, const int
+ INCX, const void * Y, const int INCY, void * A, const int LDA)
+
+ -- Function: void cblas_zgerc (const enum CBLAS_ORDER ORDER, const int
+ M, const int N, const void * ALPHA, const void * X, const int
+ INCX, const void * Y, const int INCY, void * A, const int LDA)
+
+ -- Function: void cblas_zher (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const double ALPHA, const void
+ * X, const int INCX, void * A, const int LDA)
+
+ -- Function: void cblas_zhpr (const enum CBLAS_ORDER ORDER, const enum
+ CBLAS_UPLO UPLO, const int N, const double ALPHA, const void
+ * X, const int INCX, void * A)
+
+ -- Function: void cblas_zher2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * X, const int INCX, const void * Y, const int INCY,
+ void * A, const int LDA)
+
+ -- Function: void cblas_zhpr2 (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const int N, const void * ALPHA, const
+ void * X, const int INCX, const void * Y, const int INCY,
+ void * AP)
+
+
+File: gsl-ref.info, Node: Level 3 CBLAS Functions, Next: GSL CBLAS Examples, Prev: Level 2 CBLAS Functions, Up: GSL CBLAS Library
+
+D.3 Level 3
+===========
+
+ -- Function: void cblas_sgemm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE
+ TRANSB, const int M, const int N, const int K, const float
+ ALPHA, const float * A, const int LDA, const float * B, const
+ int LDB, const float BETA, float * C, const int LDC)
+
+ -- Function: void cblas_ssymm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int
+ M, const int N, const float ALPHA, const float * A, const int
+ LDA, const float * B, const int LDB, const float BETA, float
+ * C, const int LDC)
+
+ -- Function: void cblas_ssyrk (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const float ALPHA, const float * A, const
+ int LDA, const float BETA, float * C, const int LDC)
+
+ -- Function: void cblas_ssyr2k (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const float ALPHA, const float * A, const
+ int LDA, const float * B, const int LDB, const float BETA,
+ float * C, const int LDC)
+
+ -- Function: void cblas_strmm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const float ALPHA, const float * A, const int
+ LDA, float * B, const int LDB)
+
+ -- Function: void cblas_strsm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const float ALPHA, const float * A, const int
+ LDA, float * B, const int LDB)
+
+ -- Function: void cblas_dgemm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE
+ TRANSB, const int M, const int N, const int K, const double
+ ALPHA, const double * A, const int LDA, const double * B,
+ const int LDB, const double BETA, double * C, const int LDC)
+
+ -- Function: void cblas_dsymm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int
+ M, const int N, const double ALPHA, const double * A, const
+ int LDA, const double * B, const int LDB, const double BETA,
+ double * C, const int LDC)
+
+ -- Function: void cblas_dsyrk (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const double ALPHA, const double * A,
+ const int LDA, const double BETA, double * C, const int LDC)
+
+ -- Function: void cblas_dsyr2k (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const double ALPHA, const double * A,
+ const int LDA, const double * B, const int LDB, const double
+ BETA, double * C, const int LDC)
+
+ -- Function: void cblas_dtrmm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const double ALPHA, const double * A, const
+ int LDA, double * B, const int LDB)
+
+ -- Function: void cblas_dtrsm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const double ALPHA, const double * A, const
+ int LDA, double * B, const int LDB)
+
+ -- Function: void cblas_cgemm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE
+ TRANSB, const int M, const int N, const int K, const void *
+ ALPHA, const void * A, const int LDA, const void * B, const
+ int LDB, const void * BETA, void * C, const int LDC)
+
+ -- Function: void cblas_csymm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, const void * B, const int LDB, const void * BETA, void *
+ C, const int LDC)
+
+ -- Function: void cblas_csyrk (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const void * ALPHA, const void * A, const
+ int LDA, const void * BETA, void * C, const int LDC)
+
+ -- Function: void cblas_csyr2k (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const void * ALPHA, const void * A, const
+ int LDA, const void * B, const int LDB, const void * BETA,
+ void * C, const int LDC)
+
+ -- Function: void cblas_ctrmm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, void * B, const int LDB)
+
+ -- Function: void cblas_ctrsm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, void * B, const int LDB)
+
+ -- Function: void cblas_zgemm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_TRANSPOSE TRANSA, const enum CBLAS_TRANSPOSE
+ TRANSB, const int M, const int N, const int K, const void *
+ ALPHA, const void * A, const int LDA, const void * B, const
+ int LDB, const void * BETA, void * C, const int LDC)
+
+ -- Function: void cblas_zsymm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, const void * B, const int LDB, const void * BETA, void *
+ C, const int LDC)
+
+ -- Function: void cblas_zsyrk (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const void * ALPHA, const void * A, const
+ int LDA, const void * BETA, void * C, const int LDC)
+
+ -- Function: void cblas_zsyr2k (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const void * ALPHA, const void * A, const
+ int LDA, const void * B, const int LDB, const void * BETA,
+ void * C, const int LDC)
+
+ -- Function: void cblas_ztrmm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, void * B, const int LDB)
+
+ -- Function: void cblas_ztrsm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const enum
+ CBLAS_TRANSPOSE TRANSA, const enum CBLAS_DIAG DIAG, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, void * B, const int LDB)
+
+ -- Function: void cblas_chemm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, const void * B, const int LDB, const void * BETA, void *
+ C, const int LDC)
+
+ -- Function: void cblas_cherk (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const float ALPHA, const void * A, const
+ int LDA, const float BETA, void * C, const int LDC)
+
+ -- Function: void cblas_cher2k (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const void * ALPHA, const void * A, const
+ int LDA, const void * B, const int LDB, const float BETA,
+ void * C, const int LDC)
+
+ -- Function: void cblas_zhemm (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_SIDE SIDE, const enum CBLAS_UPLO UPLO, const int
+ M, const int N, const void * ALPHA, const void * A, const int
+ LDA, const void * B, const int LDB, const void * BETA, void *
+ C, const int LDC)
+
+ -- Function: void cblas_zherk (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const double ALPHA, const void * A, const
+ int LDA, const double BETA, void * C, const int LDC)
+
+ -- Function: void cblas_zher2k (const enum CBLAS_ORDER ORDER, const
+ enum CBLAS_UPLO UPLO, const enum CBLAS_TRANSPOSE TRANS, const
+ int N, const int K, const void * ALPHA, const void * A, const
+ int LDA, const void * B, const int LDB, const double BETA,
+ void * C, const int LDC)
+
+ -- Function: void cblas_xerbla (int P, const char * ROUT, const char *
+ FORM, ...)
+
+
+File: gsl-ref.info, Node: GSL CBLAS Examples, Prev: Level 3 CBLAS Functions, Up: GSL CBLAS Library
+
+D.4 Examples
+============
+
+The following program computes the product of two matrices using the
+Level-3 BLAS function SGEMM,
+
+ [ 0.11 0.12 0.13 ] [ 1011 1012 ] [ 367.76 368.12 ]
+ [ 0.21 0.22 0.23 ] [ 1021 1022 ] = [ 674.06 674.72 ]
+ [ 1031 1032 ]
+
+The matrices are stored in row major order but could be stored in column
+major order if the first argument of the call to `cblas_sgemm' was
+changed to `CblasColMajor'.
+
+ #include <stdio.h>
+ #include <gsl/gsl_cblas.h>
+
+ int
+ main (void)
+ {
+ int lda = 3;
+
+ float A[] = { 0.11, 0.12, 0.13,
+ 0.21, 0.22, 0.23 };
+
+ int ldb = 2;
+
+ float B[] = { 1011, 1012,
+ 1021, 1022,
+ 1031, 1032 };
+
+ int ldc = 2;
+
+ float C[] = { 0.00, 0.00,
+ 0.00, 0.00 };
+
+ /* Compute C = A B */
+
+ cblas_sgemm (CblasRowMajor,
+ CblasNoTrans, CblasNoTrans, 2, 2, 3,
+ 1.0, A, lda, B, ldb, 0.0, C, ldc);
+
+ printf ("[ %g, %g\n", C[0], C[1]);
+ printf (" %g, %g ]\n", C[2], C[3]);
+
+ return 0;
+ }
+
+To compile the program use the following command line,
+
+ $ gcc -Wall demo.c -lgslcblas
+
+There is no need to link with the main library `-lgsl' in this case as
+the CBLAS library is an independent unit. Here is the output from the
+program,
+
+ $ ./a.out
+ [ 367.76, 368.12
+ 674.06, 674.72 ]
+
+
+File: gsl-ref.info, Node: Free Software Needs Free Documentation, Next: GNU General Public License, Prev: GSL CBLAS Library, Up: Top
+
+Free Software Needs Free Documentation
+**************************************
+
+ The following article was written by Richard Stallman, founder of
+ the GNU Project.
+
+ The biggest deficiency in the free software community today is not in
+the software--it is the lack of good free documentation that we can
+include with the free software. Many of our most important programs do
+not come with free reference manuals and free introductory texts.
+Documentation is an essential part of any software package; when an
+important free software package does not come with a free manual and a
+free tutorial, that is a major gap. We have many such gaps today.
+
+ Consider Perl, for instance. The tutorial manuals that people
+normally use are non-free. How did this come about? Because the
+authors of those manuals published them with restrictive terms--no
+copying, no modification, source files not available--which exclude
+them from the free software world.
+
+ That wasn't the first time this sort of thing happened, and it was
+far from the last. Many times we have heard a GNU user eagerly
+describe a manual that he is writing, his intended contribution to the
+community, only to learn that he had ruined everything by signing a
+publication contract to make it non-free.
+
+ Free documentation, like free software, is a matter of freedom, not
+price. The problem with the non-free manual is not that publishers
+charge a price for printed copies--that in itself is fine. (The Free
+Software Foundation sells printed copies of manuals, too.) The problem
+is the restrictions on the use of the manual. Free manuals are
+available in source code form, and give you permission to copy and
+modify. Non-free manuals do not allow this.
+
+ The criteria of freedom for a free manual are roughly the same as for
+free software. Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+ Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too--so they can provide
+accurate and clear documentation for the modified program. A manual
+that leaves you no choice but to write a new manual to document a
+changed version of the program is not really available to our community.
+
+ Some kinds of limits on the way modification is handled are
+acceptable. For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok. It is also no problem to require modified versions to
+include notice that they were modified. Even entire sections that may
+not be deleted or changed are acceptable, as long as they deal with
+nontechnical topics (like this one). These kinds of restrictions are
+acceptable because they don't obstruct the community's normal use of
+the manual.
+
+ However, it must be possible to modify all the _technical_ content
+of the manual, and then distribute the result in all the usual media,
+through all the usual channels. Otherwise, the restrictions obstruct
+the use of the manual, it is not free, and we need another manual to
+replace it.
+
+ Please spread the word about this issue. Our community continues to
+lose manuals to proprietary publishing. If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+ If you are writing documentation, please insist on publishing it
+under the GNU Free Documentation License or another free documentation
+license. Remember that this decision requires your approval--you don't
+have to let the publisher decide. Some commercial publishers will use
+a free license if you insist, but they will not propose the option; it
+is up to you to raise the issue and say firmly that this is what you
+want. If the publisher you are dealing with refuses, please try other
+publishers. If you're not sure whether a proposed license is free,
+write to <licensing@gnu.org>.
+
+ You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying copies
+from the publishers that paid for their writing or for major
+improvements. Meanwhile, try to avoid buying non-free documentation at
+all. Check the distribution terms of a manual before you buy it, and
+insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try reward the publishers that have
+paid or pay the authors to work on it.
+
+ The Free Software Foundation maintains a list of free documentation
+published by other publishers:
+
+ `http://www.fsf.org/doc/other-free-books.html'
+
+
+File: gsl-ref.info, Node: GNU General Public License, Next: GNU Free Documentation License, Prev: Free Software Needs Free Documentation, Up: Top
+
+GNU General Public License
+**************************
+
+ Version 2, June 1991
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+
+Preamble
+========
+
+The licenses for most software are designed to take away your freedom
+to share and change it. By contrast, the GNU General Public License is
+intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it in
+new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software,
+and (2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+ 0. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed
+ under the terms of this General Public License. The "Program",
+ below, refers to any such program or work, and a "work based on
+ the Program" means either the Program or any derivative work under
+ copyright law: that is to say, a work containing the Program or a
+ portion of it, either verbatim or with modifications and/or
+ translated into another language. (Hereinafter, translation is
+ included without limitation in the term "modification".) Each
+ licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are
+ not covered by this License; they are outside its scope. The act
+ of running the Program is not restricted, and the output from the
+ Program is covered only if its contents constitute a work based on
+ the Program (independent of having been made by running the
+ Program). Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+ source code as you receive it, in any medium, provided that you
+ conspicuously and appropriately publish on each copy an appropriate
+ copyright notice and disclaimer of warranty; keep intact all the
+ notices that refer to this License and to the absence of any
+ warranty; and give any other recipients of the Program a copy of
+ this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy,
+ and you may at your option offer warranty protection in exchange
+ for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+ of it, thus forming a work based on the Program, and copy and
+ distribute such modifications or work under the terms of Section 1
+ above, provided that you also meet all of these conditions:
+
+ a. You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b. You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program
+ or any part thereof, to be licensed as a whole at no charge
+ to all third parties under the terms of this License.
+
+ c. If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display
+ an announcement including an appropriate copyright notice and
+ a notice that there is no warranty (or else, saying that you
+ provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to
+ view a copy of this License. (Exception: if the Program
+ itself is interactive but does not normally print such an
+ announcement, your work based on the Program is not required
+ to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the
+ Program, and can be reasonably considered independent and separate
+ works in themselves, then this License, and its terms, do not
+ apply to those sections when you distribute them as separate
+ works. But when you distribute the same sections as part of a
+ whole which is a work based on the Program, the distribution of
+ the whole must be on the terms of this License, whose permissions
+ for other licensees extend to the entire whole, and thus to each
+ and every part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or
+ contest your rights to work written entirely by you; rather, the
+ intent is to exercise the right to control the distribution of
+ derivative or collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the
+ Program with the Program (or with a work based on the Program) on
+ a volume of a storage or distribution medium does not bring the
+ other work under the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms
+ of Sections 1 and 2 above provided that you also do one of the
+ following:
+
+ a. Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Sections 1 and 2 above on a medium customarily used for
+ software interchange; or,
+
+ b. Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a
+ medium customarily used for software interchange; or,
+
+ c. Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with
+ such an offer, in accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete
+ source code means all the source code for all modules it contains,
+ plus any associated interface definition files, plus the scripts
+ used to control compilation and installation of the executable.
+ However, as a special exception, the source code distributed need
+ not include anything that is normally distributed (in either
+ source or binary form) with the major components (compiler,
+ kernel, and so on) of the operating system on which the executable
+ runs, unless that component itself accompanies the executable.
+
+ If distribution of executable or object code is made by offering
+ access to copy from a designated place, then offering equivalent
+ access to copy the source code from the same place counts as
+ distribution of the source code, even though third parties are not
+ compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense or distribute the Program is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify
+ or distribute the Program or its derivative works. These actions
+ are prohibited by law if you do not accept this License.
+ Therefore, by modifying or distributing the Program (or any work
+ based on the Program), you indicate your acceptance of this
+ License to do so, and all its terms and conditions for copying,
+ distributing or modifying the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program
+ subject to these terms and conditions. You may not impose any
+ further restrictions on the recipients' exercise of the rights
+ granted herein. You are not responsible for enforcing compliance
+ by third parties to this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent
+ issues), conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot distribute so as to satisfy simultaneously
+ your obligations under this License and any other pertinent
+ obligations, then as a consequence you may not distribute the
+ Program at all. For example, if a patent license would not permit
+ royalty-free redistribution of the Program by all those who
+ receive copies directly or indirectly through you, then the only
+ way you could satisfy both it and this License would be to refrain
+ entirely from distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable
+ under any particular circumstance, the balance of the section is
+ intended to apply and the section as a whole is intended to apply
+ in other circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of
+ any such claims; this section has the sole purpose of protecting
+ the integrity of the free software distribution system, which is
+ implemented by public license practices. Many people have made
+ generous contributions to the wide range of software distributed
+ through that system in reliance on consistent application of that
+ system; it is up to the author/donor to decide if he or she is
+ willing to distribute software through any other system and a
+ licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed
+ to be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces,
+ the original copyright holder who places the Program under this
+ License may add an explicit geographical distribution limitation
+ excluding those countries, so that distribution is permitted only
+ in or among countries not thus excluded. In such case, this
+ License incorporates the limitation as if written in the body of
+ this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such
+ new versions will be similar in spirit to the present version, but
+ may differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies a version number of this License which applies
+ to it and "any later version", you have the option of following
+ the terms and conditions either of that version or of any later
+ version published by the Free Software Foundation. If the Program
+ does not specify a version number of this License, you may choose
+ any version ever published by the Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted
+ by the Free Software Foundation, write to the Free Software
+ Foundation; we sometimes make exceptions for this. Our decision
+ will be guided by the two goals of preserving the free status of
+ all derivatives of our free software and of promoting the sharing
+ and reuse of software generally.
+
+ NO WARRANTY
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
+ LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
+ WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
+ NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE
+ QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
+ SERVICING, REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
+ MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
+ LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
+ INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
+ INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+ DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
+ OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
+ OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+Appendix: How to Apply These Terms to Your New Programs
+=======================================================
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ one line to give the program's name and a brief idea
+ of whAT IT DOES.
+ Copyright (C) YYYY NAME OF AUTHOR
+
+ This program is free software; you can redistribute it
+ and/or modify it under the terms of the GNU General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later
+ version.
+
+ This program is distributed in the hope that it will be
+ useful, but WITHOUT ANY WARRANTY; without even the implied
+ warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ PURPOSE. See the GNU General Public License for more
+ details.
+
+ You should have received a copy of the GNU General Public
+ License along with this program; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+
+ Also add information on how to contact you by electronic and paper
+mail.
+
+ If the program is interactive, make it output a short notice like
+this when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19YY NAME OF AUTHOR
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+ type `show w'. This is free software, and you are welcome
+ to redistribute it under certain conditions; type `show c'
+ for details.
+
+ The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+ You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the program,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in
+ the program `Gnomovision' (which makes passes at compilers)
+ written by James Hacker.
+
+ SIGNATURE OF TY COON, 1 April 1989
+ Ty Coon, President of Vice
+
+ This General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use the
+GNU Library General Public License instead of this License.
+
+
+File: gsl-ref.info, Node: GNU Free Documentation License, Next: Function Index, Prev: GNU General Public License, Up: Top
+
+GNU Free Documentation License
+******************************
+
+ Version 1.2, November 2002
+ Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+
+ Everyone is permitted to copy and distribute verbatim copies of this license
+ document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided for under this License. Any other
+ attempt to copy, modify, sublicense or distribute the Document is
+ void, and will automatically terminate your rights under this
+ License. However, parties who have received copies, or rights,
+ from you under this License will not have their licenses
+ terminated so long as such parties remain in full compliance.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify
+ this document under the terms of the GNU Free
+ Documentation License, Version 1.2 or any later version
+ published by the Free Software Foundation; with no
+ Invariant Sections, no Front-Cover Texts, and no
+ Back-Cover Texts. A copy of the license is included in
+ the section entitled ``GNU Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR
+ TITLES, with the Front-Cover Texts being LIST, and
+ with the Back-Cover Texts being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
diff --git a/gsl-1.9/doc/gsl-ref.info-5 b/gsl-1.9/doc/gsl-ref.info-5
new file mode 100644
index 0000000..1b76f5e
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info-5
Binary files differ
diff --git a/gsl-1.9/doc/gsl-ref.info-6 b/gsl-1.9/doc/gsl-ref.info-6
new file mode 100644
index 0000000..243ca4d
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.info-6
Binary files differ
diff --git a/gsl-1.9/doc/gsl-ref.texi b/gsl-1.9/doc/gsl-ref.texi
new file mode 100644
index 0000000..c2ba564
--- /dev/null
+++ b/gsl-1.9/doc/gsl-ref.texi
@@ -0,0 +1,647 @@
+\input texinfo @c -*-texinfo-*-
+@c This will be for the printing version of the manual
+@c @input config-local.texi
+@c %**start of header
+@setfilename gsl-ref.info
+@settitle GNU Scientific Library -- Reference Manual
+@finalout
+@set frontcontents
+@ifset publish
+@setchapternewpage odd
+@end ifset
+@c %**end of header
+
+@dircategory Scientific software
+@direntry
+* gsl-ref: (gsl-ref). GNU Scientific Library -- Reference
+@end direntry
+
+@c How to use the math macros
+@c ==========================
+@c
+@c For simple expressions, simply use the @math{} command, e.g.
+@c
+@c @math{\exp(x)/(1+x^2)}
+@c
+@c but if the expression includes characters that need to be 'escaped'
+@c in texinfo, like '{' or '}', or needs different output for TeX and info,
+@c then use the following form,
+@c
+@c blah blah blah @c{$y^{1+b} \le \pi$}
+@c @math{y^@{1+b@} <= \pi}
+@c
+@c The first part using @c{} must appear at the end of a line (it reads
+@c up to the line end -- as far as texinfo is concerned it's actually
+@c a 'comment'). The comment command @c has been modified to capture
+@c a TeX expression which is output by the next @math.
+@c
+@c For ordinary comments use the @comment command.
+
+@tex
+% Mathematical macros taken from the GNU Calc Manual
+% ==================================================
+%
+% Some special kludges to make TeX formatting prettier.
+% Because makeinfo.c exists, we can't just define new commands.
+% So instead, we take over little-used existing commands.
+%
+% Redefine @cite{text} to act like $text$ in regular TeX.
+% Info will typeset this same as @samp{text}.
+\gdef\goodtex{\tex \let\rm\goodrm \let\t\ttfont \turnoffactive}
+\gdef\goodrm{\fam0\tenrm}
+\gdef\math{\goodtex$\mathxxx}
+\gdef\mathxxx#1{#1$\endgroup}
+\global\let\oldxrefX=\xrefX
+\gdef\xrefX[#1]{\begingroup\let\math=\dfn\oldxrefX[#1]\endgroup}
+%
+% Redefine @i{text} to be equivalent to @cite{text}, i.e., to use math mode.
+% This looks the same in TeX but omits the surrounding ` ' in Info.
+%\global\let\i=\cite
+%\global\let\math=\cite
+%
+% Redefine @c{tex-stuff} \n @whatever{info-stuff}.
+\gdef\c{\futurelet\next\mycxxx}
+\gdef\mycxxx{%
+ \ifx\next\bgroup \goodtex\let\next\mycxxy
+ \else\ifx\next\mindex \let\next\relax
+ \else\ifx\next\kindex \let\next\relax
+ \else\ifx\next\starindex \let\next\relax \else \let\next\comment
+ \fi\fi\fi\fi \next
+}
+\gdef\mycxxy#1#2{#1\endgroup\mycxxz}
+\gdef\mycxxz#1{}
+%
+% Define \Hat to take over from \hat as an accent
+\gdef\Hat{\mathaccent "705E}
+%
+%\gdef\beforedisplay{\vskip-10pt}
+%\gdef\afterdisplay{\vskip-5pt}
+\gdef\beforedisplay{}
+\gdef\afterdisplay{}
+{\globaldefs = 1
+\abovedisplayskip=7pt plus 2pt minus 1pt
+\belowdisplayskip=7pt plus 2pt minus 1pt
+\abovedisplayshortskip=7pt plus 2pt minus 1pt
+\belowdisplayshortskip=7pt plus 2pt minus 1pt}
+%\abovedisplayskip=12pt plus 3pt minus 3pt
+%\belowdisplayskip=12pt plus 3pt minus 3pt
+%\abovedisplayshortskip=7pt plus 1pt minus 1pt
+%\belowdisplayshortskip=7pt plus 1pt minus 1pt
+%\gdef\beforedisplayh{\vskip-25pt}
+%\gdef\afterdisplayh{\vskip-10pt}
+%
+\gdef\arcsec{\hbox{\rm arcsec}}
+\gdef\arccsc{\hbox{\rm arccsc}}
+\gdef\arccot{\hbox{\rm arccot}}
+\gdef\sech{\hbox{\rm sech}}
+\gdef\csch{\hbox{\rm csch}}
+\gdef\coth{\hbox{\rm coth}}
+\gdef\arcsinh{\hbox{\rm arcsinh}}
+\gdef\arccosh{\hbox{\rm arccosh}}
+\gdef\arctanh{\hbox{\rm arctanh}}
+\gdef\arcsech{\hbox{\rm arcsech}}
+\gdef\arccsch{\hbox{\rm arccsch}}
+\gdef\arccoth{\hbox{\rm arccoth}}
+%
+\gdef\Re{\hbox{\rm Re}}
+\gdef\Im{\hbox{\rm Im}}
+\gdef\Sin{\hbox{\rm Sin}}
+\gdef\Cos{\hbox{\rm Cos}}
+\gdef\Log{\hbox{\rm Log}}
+%
+\gdef\erf{\hbox{\rm erf}}
+\gdef\erfc{\hbox{\rm erfc}}
+\gdef\sinc{\hbox{\rm sinc}}
+\gdef\sgn{\hbox{\rm sgn}}
+\gdef\sign{\hbox{\rm sign}}
+\gdef\det{\hbox{\rm det}}
+\gdef\Var{\hbox{\rm Var}}
+\gdef\arg{\hbox{\rm arg}} % avoid temporary clobbering of arg in texinfo-4.8
+@end tex
+
+@include version-ref.texi
+@set GSL @i{GNU Scientific Library}
+
+@copying
+Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 The GSL Team.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.2 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Free Software
+Needs Free Documentation'', the Front-Cover text being ``A GNU Manual'',
+and with the Back-Cover Text being (a) (see below). A copy of the
+license is included in the section entitled ``GNU Free Documentation
+License''.
+
+(a) The Back-Cover Text is: ``You have freedom to copy and modify this
+GNU Manual, like GNU software.''
+@end copying
+
+@titlepage
+@title GNU Scientific Library
+@subtitle Reference Manual
+@subtitle Edition @value{EDITION}, for GSL Version @value{VERSION}
+@subtitle @value{UPDATED}
+
+@author Mark Galassi
+Los Alamos National Laboratory
+@comment @email{rosalia@@lanl.gov}
+@sp 1
+
+@author Jim Davies
+Department of Computer Science, Georgia Institute of Technology
+@comment @email{jimmyd@@nis.lanl.gov}
+@sp 1
+
+@author James Theiler
+Astrophysics and Radiation Measurements Group, Los Alamos National Laboratory
+@comment @email{jt@@nis.lanl.gov}
+@sp 1
+
+@author Brian Gough
+Network Theory Limited
+@comment @email{bjg@@network-theory.co.uk}
+@sp 1
+
+@comment Asked to be moved to 'contributors' appendix
+@comment @author Reid Priedhorsky
+@comment Mathematical Modeling and Analysis Group, Los Alamos National Laboratory
+@comment @email{rp@@lanl.gov}
+@comment @sp 1
+
+@author Gerard Jungman
+Theoretical Astrophysics Group, Los Alamos National Laboratory
+@comment @email{jungman@@lanl.gov}
+@sp 1
+
+@author Michael Booth
+Department of Physics and Astronomy, The Johns Hopkins University
+@comment @email{booth@@planck.pha.jhu.edu} or @email{booth@@debian.org}
+@sp 1
+
+@author Fabrice Rossi
+University of Paris-Dauphine
+@comment @email{rossi@@ufrmd.dauphine.fr}
+@sp 1
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@ifclear publish
+Printed copies of this manual can be purchased from Network Theory Ltd
+at @uref{http://www.network-theory.co.uk/gsl/manual/}.
+
+The money raised from sales of the manual helps support the
+development of GSL.
+@end ifclear
+@end titlepage
+
+@iftex
+@ifset frontcontents
+@contents
+@end ifset
+@end iftex
+
+@ifnottex
+@node Top, Introduction, (dir), (dir)
+@top GSL
+
+This file documents the @value{GSL} (GSL), a collection of numerical
+routines for scientific computing. It corresponds to release
+@value{VERSION} of the library. Please report any errors in this
+manual to @email{bug-gsl@@gnu.org}.
+
+More information about GSL can be found at the project homepage,
+@uref{http://www.gnu.org/software/gsl/}.
+
+Printed copies of this manual can be purchased from Network Theory Ltd
+at @uref{http://www.network-theory.co.uk/gsl/manual/}. The money
+raised from sales of the manual helps support the development of GSL.
+
+A Japanese translation of this manual is available from the GSL
+project homepage thanks to Daisuke Tominaga.
+
+@insertcopying
+@sp 1
+@end ifnottex
+
+@menu
+* Introduction::
+* Using the library::
+* Error Handling::
+* Mathematical Functions::
+* Complex Numbers::
+* Polynomials::
+* Special Functions::
+* Vectors and Matrices::
+* Permutations::
+* Combinations::
+* Sorting::
+* BLAS Support::
+* Linear Algebra::
+* Eigensystems::
+* Fast Fourier Transforms::
+* Numerical Integration::
+* Random Number Generation::
+* Quasi-Random Sequences::
+* Random Number Distributions::
+* Statistics::
+* Histograms::
+* N-tuples::
+* Monte Carlo Integration::
+* Simulated Annealing::
+* Ordinary Differential Equations::
+* Interpolation::
+* Numerical Differentiation::
+* Chebyshev Approximations::
+* Series Acceleration::
+* Wavelet Transforms::
+* Discrete Hankel Transforms::
+* One dimensional Root-Finding::
+* One dimensional Minimization::
+* Multidimensional Root-Finding::
+* Multidimensional Minimization::
+* Least-Squares Fitting::
+* Nonlinear Least-Squares Fitting::
+* Basis Splines::
+* Physical Constants::
+* IEEE floating-point arithmetic::
+* Debugging Numerical Programs::
+* Contributors to GSL::
+* Autoconf Macros::
+* GSL CBLAS Library::
+* Free Software Needs Free Documentation::
+* GNU General Public License::
+* GNU Free Documentation License::
+* Function Index::
+* Variable Index::
+* Type Index::
+* Concept Index::
+@end menu
+
+@node Introduction, Using the library, Top, Top
+@chapter Introduction
+@include intro.texi
+
+@node Using the library, Error Handling, Introduction, Top
+@chapter Using the library
+@cindex usage, compiling application programs
+@include usage.texi
+
+@node Error Handling, Mathematical Functions, Using the library, Top
+@chapter Error Handling
+@cindex Errors
+@include err.texi
+
+@node Mathematical Functions, Complex Numbers, Error Handling, Top
+@chapter Mathematical Functions
+@include math.texi
+
+@node Complex Numbers, Polynomials, Mathematical Functions, Top
+@chapter Complex Numbers
+@include complex.texi
+
+@node Polynomials, Special Functions, Complex Numbers, Top
+@chapter Polynomials
+@include poly.texi
+
+@node Special Functions, Vectors and Matrices, Polynomials, Top
+@chapter Special Functions
+@include specfunc.texi
+
+@node Vectors and Matrices, Permutations, Special Functions, Top
+@chapter Vectors and Matrices
+@include vectors.texi
+
+@node Permutations, Combinations, Vectors and Matrices, Top
+@chapter Permutations
+@include permutation.texi
+
+@node Combinations, Sorting, Permutations, Top
+@chapter Combinations
+@include combination.texi
+
+@node Sorting, BLAS Support, Combinations, Top
+@chapter Sorting
+@include sort.texi
+
+@node BLAS Support, Linear Algebra, Sorting, Top
+@chapter BLAS Support
+@include blas.texi
+
+@node Linear Algebra, Eigensystems, BLAS Support, Top
+@chapter Linear Algebra
+@include linalg.texi
+
+@node Eigensystems, Fast Fourier Transforms, Linear Algebra, Top
+@chapter Eigensystems
+@include eigen.texi
+
+@node Fast Fourier Transforms, Numerical Integration, Eigensystems, Top
+@chapter Fast Fourier Transforms (FFTs)
+@include fft.texi
+
+@node Numerical Integration, Random Number Generation, Fast Fourier Transforms, Top
+@chapter Numerical Integration
+@include integration.texi
+
+@node Random Number Generation, Quasi-Random Sequences, Numerical Integration, Top
+@chapter Random Number Generation
+@include rng.texi
+
+@node Quasi-Random Sequences, Random Number Distributions, Random Number Generation, Top
+@chapter Quasi-Random Sequences
+@include qrng.texi
+
+@node Random Number Distributions, Statistics, Quasi-Random Sequences, Top
+@chapter Random Number Distributions
+@include randist.texi
+
+@node Statistics, Histograms, Random Number Distributions, Top
+@chapter Statistics
+@include statistics.texi
+
+@node Histograms, N-tuples, Statistics, Top
+@chapter Histograms
+@include histogram.texi
+
+@node N-tuples, Monte Carlo Integration, Histograms, Top
+@chapter N-tuples
+@include ntuple.texi
+
+@node Monte Carlo Integration, Simulated Annealing, N-tuples, Top
+@chapter Monte Carlo Integration
+@include montecarlo.texi
+
+@node Simulated Annealing, Ordinary Differential Equations, Monte Carlo Integration, Top
+@chapter Simulated Annealing
+@include siman.texi
+
+@node Ordinary Differential Equations, Interpolation, Simulated Annealing, Top
+@chapter Ordinary Differential Equations
+@include ode-initval.texi
+
+@node Interpolation, Numerical Differentiation, Ordinary Differential Equations, Top
+@chapter Interpolation
+@include interp.texi
+
+@node Numerical Differentiation, Chebyshev Approximations, Interpolation, Top
+@chapter Numerical Differentiation
+@include diff.texi
+
+@node Chebyshev Approximations, Series Acceleration, Numerical Differentiation, Top
+@chapter Chebyshev Approximations
+@include cheb.texi
+
+@node Series Acceleration, Wavelet Transforms, Chebyshev Approximations, Top
+@chapter Series Acceleration
+@include sum.texi
+
+@node Wavelet Transforms, Discrete Hankel Transforms, Series Acceleration, Top
+@chapter Wavelet Transforms
+@include dwt.texi
+
+@node Discrete Hankel Transforms, One dimensional Root-Finding, Wavelet Transforms, Top
+@chapter Discrete Hankel Transforms
+@include dht.texi
+
+@node One dimensional Root-Finding, One dimensional Minimization, Discrete Hankel Transforms, Top
+@chapter One dimensional Root-Finding
+@include roots.texi
+
+@node One dimensional Minimization, Multidimensional Root-Finding, One dimensional Root-Finding, Top
+@chapter One dimensional Minimization
+@include min.texi
+
+@node Multidimensional Root-Finding, Multidimensional Minimization, One dimensional Minimization, Top
+@chapter Multidimensional Root-Finding
+@include multiroots.texi
+
+@node Multidimensional Minimization, Least-Squares Fitting, Multidimensional Root-Finding, Top
+@chapter Multidimensional Minimization
+@include multimin.texi
+
+@node Least-Squares Fitting, Nonlinear Least-Squares Fitting, Multidimensional Minimization, Top
+@chapter Least-Squares Fitting
+@include fitting.texi
+
+@node Nonlinear Least-Squares Fitting, Basis Splines, Least-Squares Fitting, Top
+@chapter Nonlinear Least-Squares Fitting
+@include multifit.texi
+
+@node Basis Splines, Physical Constants, Nonlinear Least-Squares Fitting, Top
+@chapter Basis Splines
+@include bspline.texi
+
+@node Physical Constants, IEEE floating-point arithmetic, Basis Splines, Top
+@chapter Physical Constants
+@include const.texi
+
+@node IEEE floating-point arithmetic, Debugging Numerical Programs, Physical Constants, Top
+@chapter IEEE floating-point arithmetic
+@include ieee754.texi
+
+@node Debugging Numerical Programs, Contributors to GSL, IEEE floating-point arithmetic, Top
+@appendix Debugging Numerical Programs
+@include debug.texi
+
+@node Contributors to GSL, Autoconf Macros, Debugging Numerical Programs, Top
+@appendix Contributors to GSL
+
+(See the AUTHORS file in the distribution for up-to-date information.)
+
+@table @strong
+@item Mark Galassi
+Conceived GSL (with James Theiler) and wrote the design document. Wrote
+the simulated annealing package and the relevant chapter in the manual.
+
+@item James Theiler
+Conceived GSL (with Mark Galassi). Wrote the random number generators
+and the relevant chapter in this manual.
+
+@item Jim Davies
+Wrote the statistical routines and the relevant chapter in this
+manual.
+
+@item Brian Gough
+FFTs, numerical integration, random number generators and distributions,
+root finding, minimization and fitting, polynomial solvers, complex
+numbers, physical constants, permutations, vector and matrix functions,
+histograms, statistics, ieee-utils, revised @sc{cblas} Level 2 & 3,
+matrix decompositions, eigensystems, cumulative distribution functions,
+testing, documentation and releases.
+
+@item Reid Priedhorsky
+Wrote and documented the initial version of the root finding routines
+while at Los Alamos National Laboratory, Mathematical Modeling and
+Analysis Group.
+@comment email: reid@reidster.net
+
+@item Gerard Jungman
+Special Functions, Series acceleration, ODEs, BLAS, Linear Algebra,
+Eigensystems, Hankel Transforms.
+
+@item Mike Booth
+Wrote the Monte Carlo library.
+
+@item Jorma Olavi T@"ahtinen
+Wrote the initial complex arithmetic functions.
+
+@item Thomas Walter
+Wrote the initial heapsort routines and cholesky decomposition.
+
+@item Fabrice Rossi
+Multidimensional minimization.
+
+@item Carlo Perassi
+Implementation of the random number generators in Knuth's
+@cite{Seminumerical Algorithms}, 3rd Ed.
+
+@item Szymon Jaroszewicz
+@comment <sj@cs.umb.edu>
+Wrote the routines for generating combinations.
+
+@item Nicolas Darnis
+Wrote the initial routines for canonical permutations.
+
+@item Jason H. Stover
+@comment (jason@sakla.net)
+Wrote the major cumulative distribution functions.
+
+@item Ivo Alxneit
+Wrote the routines for wavelet transforms.
+
+@item Tuomo Keskitalo
+Improved the implementation of the ODE solvers.
+
+@item Lowell Johnson
+Implementation of the Mathieu functions.
+
+@item Patrick Alken
+Implementation of non-symmetric eigensystems and B-splines.
+
+@end table
+
+Thanks to Nigel Lowry for help in proofreading the manual.
+
+The non-symmetric eigensystems routines contain code based on the
+LAPACK linear algebra library. LAPACK is distributed under the
+following license:
+
+@iftex
+@smallerfonts @rm
+@end iftex
+@sp 1
+@quotation
+Copyright (c) 1992-2006 The University of Tennessee. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+@bullet{} Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+@bullet{} Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer listed
+in this license in the documentation and/or other materials
+provided with the distribution.
+
+@bullet{} Neither the name of the copyright holders nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+@end quotation
+
+@iftex
+@textfonts @rm
+@end iftex
+
+
+
+@node Autoconf Macros, GSL CBLAS Library, Contributors to GSL, Top
+@appendix Autoconf Macros
+@include autoconf.texi
+
+@node GSL CBLAS Library, Free Software Needs Free Documentation, Autoconf Macros, Top
+@appendix GSL CBLAS Library
+@include cblas.texi
+
+@comment @node Copyright, GNU General Public License, Contributors to GSL, Top
+@comment @unnumbered Copyright
+@comment @include science.texi
+
+@node Free Software Needs Free Documentation, GNU General Public License, GSL CBLAS Library, Top
+@unnumbered Free Software Needs Free Documentation
+@include freemanuals.texi
+
+@node GNU General Public License, GNU Free Documentation License, Free Software Needs Free Documentation, Top
+@unnumbered GNU General Public License
+@include gpl.texi
+
+@node GNU Free Documentation License, Function Index, GNU General Public License, Top
+@unnumbered GNU Free Documentation License
+@include fdl.texi
+
+@comment htmlhelp: @printindex fn
+@comment htmlhelp: @printindex vr
+@comment htmlhelp: @printindex tp
+@comment htmlhelp: @printindex cp
+@comment htmlhelp: @bye
+
+@iftex
+@normalbottom
+@end iftex
+
+@node Function Index, Variable Index, GNU Free Documentation License, Top
+@unnumbered Function Index
+
+@printindex fn
+
+@node Variable Index, Type Index, Function Index, Top
+@unnumbered Variable Index
+
+@printindex vr
+
+@node Type Index, Concept Index, Variable Index, Top
+@unnumbered Type Index
+
+@printindex tp
+
+@node Concept Index, , Type Index, Top
+@unnumbered Concept Index
+
+@printindex cp
+
+@ifclear frontcontents
+@comment Use @setchapternewpage odd to ensure that the contents starts
+@comment on an odd page so that it can always be moved to the front when
+@comment printing two-up.
+@setchapternewpage odd
+@contents
+@end ifclear
+
+@ifset extrablankpages
+@comment final page must be blank for printed version
+@page
+@headings off
+@*
+@page
+@*
+@comment @page
+@comment @*
+@comment @page
+@comment @*
+@end ifset
+@bye
diff --git a/gsl-1.9/doc/gsl.3 b/gsl-1.9/doc/gsl.3
new file mode 100644
index 0000000..1f82292
--- /dev/null
+++ b/gsl-1.9/doc/gsl.3
@@ -0,0 +1,58 @@
+.TH GSL 3 "GNU Scientific Library" "GSL Team" \" -*- nroff -*-
+.SH NAME
+gsl - GNU Scientific Library
+.SH SYNOPSIS
+#include <gsl/...>
+.SH DESCRIPTION
+The GNU Scientific Library (GSL) is a collection of routines for
+numerical computing. The routines are written from scratch by the GSL
+team in C, and present a modern Applications Programming Interface
+(API) for C programmers, allowing wrappers to be written for very high
+level languages.
+.PP
+The library covers the following areas,
+.TP
+.nf
+.BR
+Complex Numbers
+Roots of Polynomials
+Special Functions
+Vectors and Matrices
+Permutations
+Combinations
+Sorting
+BLAS Support
+Linear Algebra
+Eigensystems
+Fast Fourier Transforms
+Quadrature
+Random Numbers
+Quasi-Random Sequences
+Random Distributions
+Statistics
+Histograms
+N-Tuples
+Monte Carlo Integration
+Simulated Annealing
+Differential Equations
+Interpolation
+Numerical Differentiation
+Chebyshev Approximations
+Series Acceleration
+Discrete Hankel Transforms
+Root-Finding
+Minimization
+Least-Squares Fitting
+Physical Constants
+IEEE Floating-Point
+.fi
+.PP
+For more information please consult the GSL Reference Manual, which is
+available as an info file. You can read it online using the shell
+command
+.B info gsl-ref
+(if the library is installed).
+.PP
+Please report any bugs to
+.B bug-gsl@gnu.org.
+
diff --git a/gsl-1.9/doc/histogram.eps b/gsl-1.9/doc/histogram.eps
new file mode 100644
index 0000000..93505f3
--- /dev/null
+++ b/gsl-1.9/doc/histogram.eps
@@ -0,0 +1,3088 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 1.6
+%%Title: PostScript plot
+%%CreationDate: Sat Aug 18 20:49:32 2001
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 97 195 494 580
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/arrowWidth 4 def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eofill
+} {
+eoclip
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eofill
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 97 195 494 580
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Poly
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2304 2304
+2304 9216
+9216 9216
+9216 2304
+4 Poly
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 112.7699 213.1332 ] concat
+%I
+[
+(-100)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 204.2139 213.1332 ] concat
+%I
+[
+(-50)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 9216
+4032 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 2304
+4032 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 300.956 213.1332 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 382.3119 213.1332 ] concat
+%I
+[
+(50)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 9216
+7488 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 2304
+7488 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 463.6679 213.1332 ] concat
+%I
+[
+(100)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 9216
+2650 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2650 2304
+2650 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 9216
+2995 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2995 2304
+2995 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 9216
+3341 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3341 2304
+3341 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 9216
+4032 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4032 2304
+4032 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 9216
+4378 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4378 2304
+4378 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 9216
+4723 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4723 2304
+4723 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 9216
+5414 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5414 2304
+5414 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 9216
+6106 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6106 2304
+6106 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 9216
+6797 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6797 2304
+6797 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 9216
+7142 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7142 2304
+7142 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 9216
+7488 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7488 2304
+7488 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 9216
+8179 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8179 2304
+8179 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 9216
+8525 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8525 2304
+8525 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 9216
+8870 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8870 2304
+8870 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 34952
+1 0 0 [ 1 3 1 3 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 9216
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 229.3306 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 107.8399 278.702 ] concat
+%I
+[
+(20)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3291
+9078 3291
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3291
+2442 3291
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 107.8399 328.0734 ] concat
+%I
+[
+(40)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4279
+9078 4279
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4279
+2442 4279
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 107.8399 377.4449 ] concat
+%I
+[
+(60)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5266
+9078 5266
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5266
+2442 5266
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 107.8399 426.8163 ] concat
+%I
+[
+(80)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6254
+9078 6254
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6254
+2442 6254
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 97.75181 476.1877 ] concat
+%I
+[
+(100)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7241
+9078 7241
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7241
+2442 7241
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 97.75181 525.5592 ] concat
+%I
+[
+(120)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8229
+9078 8229
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8229
+2442 8229
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 97.75181 574.9306 ] concat
+%I
+[
+(140)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2798
+9161 2798
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2798
+2359 2798
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3291
+9161 3291
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3291
+2359 3291
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3785
+9161 3785
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3785
+2359 3785
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4279
+9161 4279
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4279
+2359 4279
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4773
+9161 4773
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4773
+2359 4773
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5266
+9161 5266
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5266
+2359 5266
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6254
+9161 6254
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6254
+2359 6254
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6747
+9161 6747
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6747
+2359 6747
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7241
+9161 7241
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7241
+2359 7241
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7735
+9161 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7735
+2359 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8229
+9161 8229
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8229
+2359 8229
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8722
+9161 8722
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8722
+2359 8722
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 400
+2304 2748
+2339 2748
+2339 2501
+2373 2501
+2373 2896
+2408 2896
+2408 2896
+2442 2896
+2442 2896
+2477 2896
+2477 2650
+2511 2650
+2511 2650
+2546 2650
+2546 2896
+2580 2896
+2580 2896
+2615 2896
+2615 2650
+2650 2650
+2650 2551
+2684 2551
+2684 2847
+2719 2847
+2719 2650
+2753 2650
+2753 2847
+2788 2847
+2788 2995
+2822 2995
+2822 2896
+2857 2896
+2857 3291
+2892 3291
+2892 2650
+2926 2650
+2926 3291
+2961 3291
+2961 3094
+2995 3094
+2995 2798
+3030 2798
+3030 3045
+3064 3045
+3064 2896
+3099 2896
+3099 2847
+3133 2847
+3133 3143
+3168 3143
+3168 3193
+3203 3193
+3203 2748
+3237 2748
+3237 3193
+3272 3193
+3272 2896
+3306 2896
+3306 3390
+3341 3390
+3341 2995
+3375 2995
+3375 3143
+3410 3143
+3410 3242
+3444 3242
+3444 3440
+3479 3440
+3479 3291
+3514 3291
+3514 2995
+3548 2995
+3548 2748
+3583 2748
+3583 3193
+3617 3193
+3617 3094
+3652 3094
+3652 3291
+3686 3291
+3686 3143
+3721 3143
+3721 3785
+3756 3785
+3756 3341
+3790 3341
+3790 3637
+3825 3637
+3825 3983
+3859 3983
+3859 3440
+3894 3440
+3894 3538
+3928 3538
+3928 3538
+3963 3538
+3963 3736
+3997 3736
+3997 3588
+4032 3588
+4032 3538
+4067 3538
+4067 3390
+4101 3390
+4101 4279
+4136 4279
+4136 3686
+4170 3686
+4170 4476
+4205 4476
+4205 4032
+4239 4032
+4239 4328
+4274 4328
+4274 4081
+4308 4081
+4308 4773
+4343 4773
+4343 5168
+4378 5168
+4378 4032
+4412 4032
+4412 4229
+4447 4229
+4447 4476
+4481 4476
+4481 4921
+4516 4921
+4516 4180
+4550 4180
+4550 4378
+4585 4378
+4585 4871
+4620 4871
+4620 4921
+4654 4921
+4654 4180
+4689 4180
+4689 4526
+4723 4526
+4723 5464
+4758 5464
+4758 5711
+4792 5711
+4792 5563
+4827 5563
+4827 5316
+4861 5316
+4861 5217
+4896 5217
+4896 5908
+4931 5908
+4931 4921
+4965 4921
+4965 6106
+5000 6106
+5000 5612
+5034 5612
+5034 6056
+5069 6056
+5069 5908
+5103 5908
+5103 6204
+5138 6204
+5138 6698
+5172 6698
+5172 6994
+5207 6994
+5207 7044
+5242 7044
+5242 6994
+5276 6994
+5276 6599
+5311 6599
+5311 6846
+5345 6846
+5345 7093
+5380 7093
+5380 7636
+5414 7636
+5414 6056
+5449 6056
+5449 7340
+5484 7340
+5484 6994
+5518 6994
+5518 7439
+5553 7439
+5553 7241
+5587 7241
+5587 7192
+5622 7192
+5622 7932
+5656 7932
+5656 7389
+5691 7389
+5691 7192
+5725 7192
+5725 7340
+5760 7340
+5760 6550
+5795 6550
+5795 8278
+5829 8278
+5829 6994
+5864 6994
+5864 7291
+5898 7291
+5898 7636
+5933 7636
+5933 7241
+5967 7241
+5967 6945
+6002 6945
+6002 7537
+6036 7537
+6036 7587
+6071 7587
+6071 7241
+6106 7241
+6106 6599
+6140 6599
+6140 7587
+6175 7587
+6175 7932
+6209 7932
+6209 5859
+6244 5859
+6244 7340
+6278 7340
+6278 5661
+6313 5661
+6313 6352
+6348 6352
+6348 6303
+6382 6303
+6382 6254
+6417 6254
+6417 5957
+6451 5957
+6451 6106
+6486 6106
+6486 5414
+6520 5414
+6520 4773
+6555 4773
+6555 5019
+6589 5019
+6589 5563
+6624 5563
+6624 5661
+6659 5661
+6659 4822
+6693 4822
+6693 5266
+6728 5266
+6728 5266
+6762 5266
+6762 5069
+6797 5069
+6797 5168
+6831 5168
+6831 4229
+6866 4229
+6866 4526
+6900 4526
+6900 4674
+6935 4674
+6935 4921
+6970 4921
+6970 3835
+7004 3835
+7004 4229
+7039 4229
+7039 3983
+7073 3983
+7073 3835
+7108 3835
+7108 4279
+7142 4279
+7142 4229
+7177 4229
+7177 3884
+7212 3884
+7212 4427
+7246 4427
+7246 3637
+7281 3637
+7281 3983
+7315 3983
+7315 3637
+7350 3637
+7350 3686
+7384 3686
+7384 3884
+7419 3884
+7419 3538
+7453 3538
+7453 3637
+7488 3637
+7488 3785
+7523 3785
+7523 3291
+7557 3291
+7557 3835
+7592 3835
+7592 3045
+7626 3045
+7626 3390
+7661 3390
+7661 3736
+7695 3736
+7695 3785
+7730 3785
+7730 3440
+7764 3440
+7764 2946
+7799 2946
+7799 3094
+7834 3094
+7834 3045
+7868 3045
+7868 3094
+7903 3094
+7903 3686
+7937 3686
+7937 3242
+7972 3242
+7972 3686
+8006 3686
+8006 3242
+8041 3242
+8041 3637
+8076 3637
+8076 3242
+8110 3242
+8110 3143
+8145 3143
+8145 3143
+8179 3143
+8179 3291
+8214 3291
+8214 3094
+8248 3094
+8248 3045
+8283 3045
+8283 2896
+8317 2896
+8317 2748
+8352 2748
+8352 3440
+8387 3440
+8387 3045
+8421 3045
+8421 2798
+8456 2798
+8456 3143
+8490 3143
+8490 2798
+8525 2798
+8525 3045
+8559 3045
+8559 2551
+8594 2551
+8594 2798
+8628 2798
+8628 2995
+8663 2995
+8663 2946
+8698 2946
+8698 2699
+8732 2699
+8732 3045
+8767 3045
+8767 3094
+8801 3094
+8801 2650
+8836 2650
+8836 2798
+8870 2798
+8870 3045
+8905 3045
+8905 3045
+8940 3045
+8940 2798
+8974 2798
+8974 2748
+9009 2748
+9009 2798
+9043 2798
+9043 2650
+9078 2650
+9078 2650
+9112 2650
+9112 2995
+9147 2995
+9147 2847
+9181 2847
+9181 2748
+9216 2748
+400 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/histogram.texi b/gsl-1.9/doc/histogram.texi
new file mode 100644
index 0000000..f2fe423
--- /dev/null
+++ b/gsl-1.9/doc/histogram.texi
@@ -0,0 +1,1173 @@
+@cindex histograms
+@cindex binning data
+This chapter describes functions for creating histograms. Histograms
+provide a convenient way of summarizing the distribution of a set of
+data. A histogram consists of a set of @dfn{bins} which count the number
+of events falling into a given range of a continuous variable @math{x}.
+In GSL the bins of a histogram contain floating-point numbers, so they
+can be used to record both integer and non-integer distributions. The
+bins can use arbitrary sets of ranges (uniformly spaced bins are the
+default). Both one and two-dimensional histograms are supported.
+
+Once a histogram has been created it can also be converted into a
+probability distribution function. The library provides efficient
+routines for selecting random samples from probability distributions.
+This can be useful for generating simulations based on real data.
+
+The functions are declared in the header files @file{gsl_histogram.h}
+and @file{gsl_histogram2d.h}.
+
+@menu
+* The histogram struct::
+* Histogram allocation::
+* Copying Histograms::
+* Updating and accessing histogram elements::
+* Searching histogram ranges::
+* Histogram Statistics::
+* Histogram Operations::
+* Reading and writing histograms::
+* Resampling from histograms::
+* The histogram probability distribution struct::
+* Example programs for histograms::
+* Two dimensional histograms::
+* The 2D histogram struct::
+* 2D Histogram allocation::
+* Copying 2D Histograms::
+* Updating and accessing 2D histogram elements::
+* Searching 2D histogram ranges::
+* 2D Histogram Statistics::
+* 2D Histogram Operations::
+* Reading and writing 2D histograms::
+* Resampling from 2D histograms::
+* Example programs for 2D histograms::
+@end menu
+
+@node The histogram struct
+@section The histogram struct
+
+A histogram is defined by the following struct,
+
+@deftp {Data Type} {gsl_histogram}
+@table @code
+@item size_t n
+This is the number of histogram bins
+@item double * range
+The ranges of the bins are stored in an array of @math{@var{n}+1} elements
+pointed to by @var{range}.
+@item double * bin
+The counts for each bin are stored in an array of @var{n} elements
+pointed to by @var{bin}. The bins are floating-point numbers, so you can
+increment them by non-integer values if necessary.
+@end table
+@end deftp
+@comment
+
+@noindent
+The range for @var{bin}[i] is given by @var{range}[i] to
+@var{range}[i+1]. For @math{n} bins there are @math{n+1} entries in the
+array @var{range}. Each bin is inclusive at the lower end and exclusive
+at the upper end. Mathematically this means that the bins are defined by
+the following inequality,
+@tex
+\beforedisplay
+$$
+\hbox{bin[i] corresponds to range[i]} \le x < \hbox{range[i+1]}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@display
+bin[i] corresponds to range[i] <= x < range[i+1]
+@end display
+
+@end ifinfo
+@noindent
+Here is a diagram of the correspondence between ranges and bins on the
+number-line for @math{x},
+
+@smallexample
+
+ [ bin[0] )[ bin[1] )[ bin[2] )[ bin[3] )[ bin[4] )
+ ---|---------|---------|---------|---------|---------|--- x
+ r[0] r[1] r[2] r[3] r[4] r[5]
+
+@end smallexample
+
+@noindent
+In this picture the values of the @var{range} array are denoted by
+@math{r}. On the left-hand side of each bin the square bracket
+@samp{[} denotes an inclusive lower bound
+(@c{$r \le x$}
+@math{r <= x}), and the round parentheses @samp{)} on the right-hand
+side denote an exclusive upper bound (@math{x < r}). Thus any samples
+which fall on the upper end of the histogram are excluded. If you want
+to include this value for the last bin you will need to add an extra bin
+to your histogram.
+
+The @code{gsl_histogram} struct and its associated functions are defined
+in the header file @file{gsl_histogram.h}.
+
+@node Histogram allocation
+@section Histogram allocation
+The functions for allocating memory to a histogram follow the style of
+@code{malloc} and @code{free}. In addition they also perform their own
+error checking. If there is insufficient memory available to allocate a
+histogram then the functions call the error handler (with an error
+number of @code{GSL_ENOMEM}) in addition to returning a null pointer.
+Thus if you use the library error handler to abort your program then it
+isn't necessary to check every histogram @code{alloc}.
+
+@deftypefun {gsl_histogram *} gsl_histogram_alloc (size_t @var{n})
+This function allocates memory for a histogram with @var{n} bins, and
+returns a pointer to a newly created @code{gsl_histogram} struct. If
+insufficient memory is available a null pointer is returned and the
+error handler is invoked with an error code of @code{GSL_ENOMEM}. The
+bins and ranges are not initialized, and should be prepared using one of
+the range-setting functions below in order to make the histogram ready
+for use.
+@end deftypefun
+
+@comment @deftypefun {gsl_histogram *} gsl_histogram_calloc (size_t @var{n})
+@comment This function allocates memory for a histogram with @var{n} bins, and
+@comment returns a pointer to its newly initialized @code{gsl_histogram} struct.
+@comment The bins are uniformly spaced with a total range of
+@comment @c{$0 \le x < n$}
+@comment @math{0 <= x < n},
+@comment as shown in the table below.
+
+@comment @tex
+@comment \beforedisplay
+@comment $$
+@comment \matrix{
+@comment \hbox{bin[0]}&\hbox{corresponds to}& 0 \le x < 1\cr
+@comment \hbox{bin[1]}&\hbox{corresponds to}& 1 \le x < 2\cr
+@comment \dots&\dots&\dots\cr
+@comment \hbox{bin[n-1]}&\hbox{corresponds to}&n-1 \le x < n}
+@comment $$
+@comment \afterdisplay
+@comment @end tex
+@comment @ifinfo
+@comment @display
+@comment bin[0] corresponds to 0 <= x < 1
+@comment bin[1] corresponds to 1 <= x < 2
+@comment @dots{}
+@comment bin[n-1] corresponds to n-1 <= x < n
+@comment @end display
+@comment @end ifinfo
+@comment @noindent
+@comment The bins are initialized to zero so the histogram is ready for use.
+
+@comment If insufficient memory is available a null pointer is returned and the
+@comment error handler is invoked with an error code of @code{GSL_ENOMEM}.
+@comment @end deftypefun
+
+@comment @deftypefun {gsl_histogram *} gsl_histogram_calloc_uniform (size_t @var{n}, double @var{xmin}, double @var{xmax})
+@comment This function allocates memory for a histogram with @var{n} uniformly
+@comment spaced bins from @var{xmin} to @var{xmax}, and returns a pointer to the
+@comment newly initialized @code{gsl_histogram} struct.
+@comment If insufficient memory is available a null pointer is returned and the
+@comment error handler is invoked with an error code of @code{GSL_ENOMEM}.
+@comment @end deftypefun
+
+@comment @deftypefun {gsl_histogram *} gsl_histogram_calloc_range (size_t @var{n}, double * @var{range})
+@comment This function allocates a histogram of size @var{n} using the @math{n+1}
+@comment bin ranges specified by the array @var{range}.
+@comment @end deftypefun
+
+@deftypefun int gsl_histogram_set_ranges (gsl_histogram * @var{h}, const double @var{range}[], size_t @var{size})
+This function sets the ranges of the existing histogram @var{h} using
+the array @var{range} of size @var{size}. The values of the histogram
+bins are reset to zero. The @code{range} array should contain the
+desired bin limits. The ranges can be arbitrary, subject to the
+restriction that they are monotonically increasing.
+
+The following example shows how to create a histogram with logarithmic
+bins with ranges [1,10), [10,100) and [100,1000).
+
+@example
+gsl_histogram * h = gsl_histogram_alloc (3);
+
+/* bin[0] covers the range 1 <= x < 10 */
+/* bin[1] covers the range 10 <= x < 100 */
+/* bin[2] covers the range 100 <= x < 1000 */
+
+double range[4] = @{ 1.0, 10.0, 100.0, 1000.0 @};
+
+gsl_histogram_set_ranges (h, range, 4);
+@end example
+
+@noindent
+Note that the size of the @var{range} array should be defined to be one
+element bigger than the number of bins. The additional element is
+required for the upper value of the final bin.
+@end deftypefun
+
+@deftypefun int gsl_histogram_set_ranges_uniform (gsl_histogram * @var{h}, double @var{xmin}, double @var{xmax})
+This function sets the ranges of the existing histogram @var{h} to cover
+the range @var{xmin} to @var{xmax} uniformly. The values of the
+histogram bins are reset to zero. The bin ranges are shown in the table
+below,
+@tex
+\beforedisplay
+$$
+\matrix{\hbox{bin[0]}&\hbox{corresponds to}& xmin \le x < xmin + d\cr
+\hbox{bin[1]} &\hbox{corresponds to}& xmin + d \le x < xmin + 2 d\cr
+\dots&\dots&\dots\cr
+\hbox{bin[n-1]} & \hbox{corresponds to}& xmin + (n-1)d \le x < xmax}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@display
+bin[0] corresponds to xmin <= x < xmin + d
+bin[1] corresponds to xmin + d <= x < xmin + 2 d
+......
+bin[n-1] corresponds to xmin + (n-1)d <= x < xmax
+@end display
+
+@end ifinfo
+@noindent
+where @math{d} is the bin spacing, @math{d = (xmax-xmin)/n}.
+@end deftypefun
+
+@deftypefun void gsl_histogram_free (gsl_histogram * @var{h})
+This function frees the histogram @var{h} and all of the memory
+associated with it.
+@end deftypefun
+
+@node Copying Histograms
+@section Copying Histograms
+
+@deftypefun int gsl_histogram_memcpy (gsl_histogram * @var{dest}, const gsl_histogram * @var{src})
+This function copies the histogram @var{src} into the pre-existing
+histogram @var{dest}, making @var{dest} into an exact copy of @var{src}.
+The two histograms must be of the same size.
+@end deftypefun
+
+@deftypefun {gsl_histogram *} gsl_histogram_clone (const gsl_histogram * @var{src})
+This function returns a pointer to a newly created histogram which is an
+exact copy of the histogram @var{src}.
+@end deftypefun
+
+@node Updating and accessing histogram elements
+@section Updating and accessing histogram elements
+
+There are two ways to access histogram bins, either by specifying an
+@math{x} coordinate or by using the bin-index directly. The functions
+for accessing the histogram through @math{x} coordinates use a binary
+search to identify the bin which covers the appropriate range.
+
+@deftypefun int gsl_histogram_increment (gsl_histogram * @var{h}, double @var{x})
+This function updates the histogram @var{h} by adding one (1.0) to the
+bin whose range contains the coordinate @var{x}.
+
+If @var{x} lies in the valid range of the histogram then the function
+returns zero to indicate success. If @var{x} is less than the lower
+limit of the histogram then the function returns @code{GSL_EDOM}, and
+none of bins are modified. Similarly, if the value of @var{x} is greater
+than or equal to the upper limit of the histogram then the function
+returns @code{GSL_EDOM}, and none of the bins are modified. The error
+handler is not called, however, since it is often necessary to compute
+histograms for a small range of a larger dataset, ignoring the values
+outside the range of interest.
+@end deftypefun
+
+@deftypefun int gsl_histogram_accumulate (gsl_histogram * @var{h}, double @var{x}, double @var{weight})
+This function is similar to @code{gsl_histogram_increment} but increases
+the value of the appropriate bin in the histogram @var{h} by the
+floating-point number @var{weight}.
+@end deftypefun
+
+@deftypefun double gsl_histogram_get (const gsl_histogram * @var{h}, size_t @var{i})
+This function returns the contents of the @var{i}-th bin of the histogram
+@var{h}. If @var{i} lies outside the valid range of indices for the
+histogram then the error handler is called with an error code of
+@code{GSL_EDOM} and the function returns 0.
+@end deftypefun
+
+@deftypefun int gsl_histogram_get_range (const gsl_histogram * @var{h}, size_t @var{i}, double * @var{lower}, double * @var{upper})
+This function finds the upper and lower range limits of the @var{i}-th
+bin of the histogram @var{h}. If the index @var{i} is valid then the
+corresponding range limits are stored in @var{lower} and @var{upper}.
+The lower limit is inclusive (i.e. events with this coordinate are
+included in the bin) and the upper limit is exclusive (i.e. events with
+the coordinate of the upper limit are excluded and fall in the
+neighboring higher bin, if it exists). The function returns 0 to
+indicate success. If @var{i} lies outside the valid range of indices for
+the histogram then the error handler is called and the function returns
+an error code of @code{GSL_EDOM}.
+@end deftypefun
+
+@deftypefun double gsl_histogram_max (const gsl_histogram * @var{h})
+@deftypefunx double gsl_histogram_min (const gsl_histogram * @var{h})
+@deftypefunx size_t gsl_histogram_bins (const gsl_histogram * @var{h})
+These functions return the maximum upper and minimum lower range limits
+and the number of bins of the histogram @var{h}. They provide a way of
+determining these values without accessing the @code{gsl_histogram}
+struct directly.
+@end deftypefun
+
+@deftypefun void gsl_histogram_reset (gsl_histogram * @var{h})
+This function resets all the bins in the histogram @var{h} to zero.
+@end deftypefun
+
+@node Searching histogram ranges
+@section Searching histogram ranges
+
+The following functions are used by the access and update routines to
+locate the bin which corresponds to a given @math{x} coordinate.
+
+@deftypefun int gsl_histogram_find (const gsl_histogram * @var{h}, double @var{x}, size_t * @var{i})
+This function finds and sets the index @var{i} to the bin number which
+covers the coordinate @var{x} in the histogram @var{h}. The bin is
+located using a binary search. The search includes an optimization for
+histograms with uniform range, and will return the correct bin
+immediately in this case. If @var{x} is found in the range of the
+histogram then the function sets the index @var{i} and returns
+@code{GSL_SUCCESS}. If @var{x} lies outside the valid range of the
+histogram then the function returns @code{GSL_EDOM} and the error
+handler is invoked.
+@end deftypefun
+
+@node Histogram Statistics
+@section Histogram Statistics
+@cindex histogram statistics
+@cindex statistics, from histogram
+@cindex maximum value, from histogram
+@cindex minimum value, from histogram
+@deftypefun double gsl_histogram_max_val (const gsl_histogram * @var{h})
+This function returns the maximum value contained in the histogram bins.
+@end deftypefun
+
+@deftypefun size_t gsl_histogram_max_bin (const gsl_histogram * @var{h})
+This function returns the index of the bin containing the maximum
+value. In the case where several bins contain the same maximum value the
+smallest index is returned.
+@end deftypefun
+
+@deftypefun double gsl_histogram_min_val (const gsl_histogram * @var{h})
+This function returns the minimum value contained in the histogram bins.
+@end deftypefun
+
+@deftypefun size_t gsl_histogram_min_bin (const gsl_histogram * @var{h})
+This function returns the index of the bin containing the minimum
+value. In the case where several bins contain the same maximum value the
+smallest index is returned.
+@end deftypefun
+
+@cindex mean value, from histogram
+@deftypefun double gsl_histogram_mean (const gsl_histogram * @var{h})
+This function returns the mean of the histogrammed variable, where the
+histogram is regarded as a probability distribution. Negative bin values
+are ignored for the purposes of this calculation. The accuracy of the
+result is limited by the bin width.
+@end deftypefun
+
+@cindex standard deviation, from histogram
+@cindex variance, from histogram
+@deftypefun double gsl_histogram_sigma (const gsl_histogram * @var{h})
+This function returns the standard deviation of the histogrammed
+variable, where the histogram is regarded as a probability
+distribution. Negative bin values are ignored for the purposes of this
+calculation. The accuracy of the result is limited by the bin width.
+@end deftypefun
+
+@deftypefun double gsl_histogram_sum (const gsl_histogram * @var{h})
+This function returns the sum of all bin values. Negative bin values
+are included in the sum.
+@end deftypefun
+
+@node Histogram Operations
+@section Histogram Operations
+
+@deftypefun int gsl_histogram_equal_bins_p (const gsl_histogram * @var{h1}, const gsl_histogram * @var{h2})
+This function returns 1 if the all of the individual bin
+ranges of the two histograms are identical, and 0
+otherwise.
+@end deftypefun
+
+@deftypefun int gsl_histogram_add (gsl_histogram * @var{h1}, const gsl_histogram * @var{h2})
+This function adds the contents of the bins in histogram @var{h2} to the
+corresponding bins of histogram @var{h1}, i.e. @math{h'_1(i) = h_1(i) +
+h_2(i)}. The two histograms must have identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram_sub (gsl_histogram * @var{h1}, const gsl_histogram * @var{h2})
+This function subtracts the contents of the bins in histogram @var{h2}
+from the corresponding bins of histogram @var{h1}, i.e. @math{h'_1(i) =
+h_1(i) - h_2(i)}. The two histograms must have identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram_mul (gsl_histogram * @var{h1}, const gsl_histogram * @var{h2})
+This function multiplies the contents of the bins of histogram @var{h1}
+by the contents of the corresponding bins in histogram @var{h2},
+i.e. @math{h'_1(i) = h_1(i) * h_2(i)}. The two histograms must have
+identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram_div (gsl_histogram * @var{h1}, const gsl_histogram * @var{h2})
+This function divides the contents of the bins of histogram @var{h1} by
+the contents of the corresponding bins in histogram @var{h2},
+i.e. @math{h'_1(i) = h_1(i) / h_2(i)}. The two histograms must have
+identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram_scale (gsl_histogram * @var{h}, double @var{scale})
+This function multiplies the contents of the bins of histogram @var{h}
+by the constant @var{scale}, i.e. @c{$h'_1(i) = h_1(i) * \hbox{\it scale}$}
+@math{h'_1(i) = h_1(i) * scale}.
+@end deftypefun
+
+@deftypefun int gsl_histogram_shift (gsl_histogram * @var{h}, double @var{offset})
+This function shifts the contents of the bins of histogram @var{h} by
+the constant @var{offset}, i.e. @c{$h'_1(i) = h_1(i) + \hbox{\it offset}$}
+@math{h'_1(i) = h_1(i) + offset}.
+@end deftypefun
+
+@node Reading and writing histograms
+@section Reading and writing histograms
+
+The library provides functions for reading and writing histograms to a file
+as binary data or formatted text.
+
+@deftypefun int gsl_histogram_fwrite (FILE * @var{stream}, const gsl_histogram * @var{h})
+This function writes the ranges and bins of the histogram @var{h} to the
+stream @var{stream} in binary format. The return value is 0 for success
+and @code{GSL_EFAILED} if there was a problem writing to the file. Since
+the data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_histogram_fread (FILE * @var{stream}, gsl_histogram * @var{h})
+This function reads into the histogram @var{h} from the open stream
+@var{stream} in binary format. The histogram @var{h} must be
+preallocated with the correct size since the function uses the number of
+bins in @var{h} to determine how many bytes to read. The return value is
+0 for success and @code{GSL_EFAILED} if there was a problem reading from
+the file. The data is assumed to have been written in the native binary
+format on the same architecture.
+@end deftypefun
+
+@deftypefun int gsl_histogram_fprintf (FILE * @var{stream}, const gsl_histogram * @var{h}, const char * @var{range_format}, const char * @var{bin_format})
+This function writes the ranges and bins of the histogram @var{h}
+line-by-line to the stream @var{stream} using the format specifiers
+@var{range_format} and @var{bin_format}. These should be one of the
+@code{%g}, @code{%e} or @code{%f} formats for floating point
+numbers. The function returns 0 for success and @code{GSL_EFAILED} if
+there was a problem writing to the file. The histogram output is
+formatted in three columns, and the columns are separated by spaces,
+like this,
+
+@example
+range[0] range[1] bin[0]
+range[1] range[2] bin[1]
+range[2] range[3] bin[2]
+....
+range[n-1] range[n] bin[n-1]
+@end example
+
+@noindent
+The values of the ranges are formatted using @var{range_format} and the
+value of the bins are formatted using @var{bin_format}. Each line
+contains the lower and upper limit of the range of the bins and the
+value of the bin itself. Since the upper limit of one bin is the lower
+limit of the next there is duplication of these values between lines but
+this allows the histogram to be manipulated with line-oriented tools.
+@end deftypefun
+
+@deftypefun int gsl_histogram_fscanf (FILE * @var{stream}, gsl_histogram * @var{h})
+This function reads formatted data from the stream @var{stream} into the
+histogram @var{h}. The data is assumed to be in the three-column format
+used by @code{gsl_histogram_fprintf}. The histogram @var{h} must be
+preallocated with the correct length since the function uses the size of
+@var{h} to determine how many numbers to read. The function returns 0
+for success and @code{GSL_EFAILED} if there was a problem reading from
+the file.
+@end deftypefun
+
+@node Resampling from histograms
+@section Resampling from histograms
+@cindex resampling from histograms
+@cindex sampling from histograms
+@cindex probability distributions, from histograms
+
+A histogram made by counting events can be regarded as a measurement of
+a probability distribution. Allowing for statistical error, the height
+of each bin represents the probability of an event where the value of
+@math{x} falls in the range of that bin. The probability distribution
+function has the one-dimensional form @math{p(x)dx} where,
+@tex
+\beforedisplay
+$$
+p(x) = n_i/ (N w_i)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) = n_i/ (N w_i)
+@end example
+
+@end ifinfo
+@noindent
+In this equation @math{n_i} is the number of events in the bin which
+contains @math{x}, @math{w_i} is the width of the bin and @math{N} is
+the total number of events. The distribution of events within each bin
+is assumed to be uniform.
+
+@node The histogram probability distribution struct
+@section The histogram probability distribution struct
+@cindex probability distribution, from histogram
+@cindex sampling from histograms
+@cindex random sampling from histograms
+@cindex histograms, random sampling from
+The probability distribution function for a histogram consists of a set
+of @dfn{bins} which measure the probability of an event falling into a
+given range of a continuous variable @math{x}. A probability
+distribution function is defined by the following struct, which actually
+stores the cumulative probability distribution function. This is the
+natural quantity for generating samples via the inverse transform
+method, because there is a one-to-one mapping between the cumulative
+probability distribution and the range [0,1]. It can be shown that by
+taking a uniform random number in this range and finding its
+corresponding coordinate in the cumulative probability distribution we
+obtain samples with the desired probability distribution.
+
+@deftp {Data Type} {gsl_histogram_pdf}
+@table @code
+@item size_t n
+This is the number of bins used to approximate the probability
+distribution function.
+@item double * range
+The ranges of the bins are stored in an array of @math{@var{n}+1} elements
+pointed to by @var{range}.
+@item double * sum
+The cumulative probability for the bins is stored in an array of
+@var{n} elements pointed to by @var{sum}.
+@end table
+@end deftp
+@comment
+
+@noindent
+The following functions allow you to create a @code{gsl_histogram_pdf}
+struct which represents this probability distribution and generate
+random samples from it.
+
+@deftypefun {gsl_histogram_pdf *} gsl_histogram_pdf_alloc (size_t @var{n})
+This function allocates memory for a probability distribution with
+@var{n} bins and returns a pointer to a newly initialized
+@code{gsl_histogram_pdf} struct. If insufficient memory is available a
+null pointer is returned and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun int gsl_histogram_pdf_init (gsl_histogram_pdf * @var{p}, const gsl_histogram * @var{h})
+This function initializes the probability distribution @var{p} with
+the contents of the histogram @var{h}. If any of the bins of @var{h} are
+negative then the error handler is invoked with an error code of
+@code{GSL_EDOM} because a probability distribution cannot contain
+negative values.
+@end deftypefun
+
+@deftypefun void gsl_histogram_pdf_free (gsl_histogram_pdf * @var{p})
+This function frees the probability distribution function @var{p} and
+all of the memory associated with it.
+@end deftypefun
+
+@deftypefun double gsl_histogram_pdf_sample (const gsl_histogram_pdf * @var{p}, double @var{r})
+This function uses @var{r}, a uniform random number between zero and
+one, to compute a single random sample from the probability distribution
+@var{p}. The algorithm used to compute the sample @math{s} is given by
+the following formula,
+@tex
+\beforedisplay
+$$
+s = \hbox{range}[i] + \delta * (\hbox{range}[i+1] - \hbox{range}[i])
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+s = range[i] + delta * (range[i+1] - range[i])
+@end example
+
+@end ifinfo
+@noindent
+where @math{i} is the index which satisfies
+@c{$sum[i] \le r < sum[i+1]$}
+@math{sum[i] <= r < sum[i+1]} and
+@math{delta} is
+@c{$(r - sum[i])/(sum[i+1] - sum[i])$}
+@math{(r - sum[i])/(sum[i+1] - sum[i])}.
+@end deftypefun
+
+@node Example programs for histograms
+@section Example programs for histograms
+
+The following program shows how to make a simple histogram of a column
+of numerical data supplied on @code{stdin}. The program takes three
+arguments, specifying the upper and lower bounds of the histogram and
+the number of bins. It then reads numbers from @code{stdin}, one line at
+a time, and adds them to the histogram. When there is no more data to
+read it prints out the accumulated histogram using
+@code{gsl_histogram_fprintf}.
+
+@example
+@verbatiminclude examples/histogram.c
+@end example
+
+@noindent
+Here is an example of the program in use. We generate 10000 random
+samples from a Cauchy distribution with a width of 30 and histogram
+them over the range -100 to 100, using 200 bins.
+
+@example
+$ gsl-randist 0 10000 cauchy 30
+ | gsl-histogram -100 100 200 > histogram.dat
+@end example
+
+@noindent
+A plot of the resulting histogram shows the familiar shape of the
+Cauchy distribution and the fluctuations caused by the finite sample
+size.
+
+@example
+$ awk '@{print $1, $3 ; print $2, $3@}' histogram.dat
+ | graph -T X
+@end example
+
+@iftex
+@sp 1
+@center @image{histogram,3.0in,2.8in}
+@end iftex
+
+@node Two dimensional histograms
+@section Two dimensional histograms
+@cindex two dimensional histograms
+@cindex 2D histograms
+
+A two dimensional histogram consists of a set of @dfn{bins} which count
+the number of events falling in a given area of the @math{(x,y)}
+plane. The simplest way to use a two dimensional histogram is to record
+two-dimensional position information, @math{n(x,y)}. Another possibility
+is to form a @dfn{joint distribution} by recording related
+variables. For example a detector might record both the position of an
+event (@math{x}) and the amount of energy it deposited @math{E}. These
+could be histogrammed as the joint distribution @math{n(x,E)}.
+
+@node The 2D histogram struct
+@section The 2D histogram struct
+
+Two dimensional histograms are defined by the following struct,
+
+@deftp {Data Type} {gsl_histogram2d}
+@table @code
+@item size_t nx, ny
+This is the number of histogram bins in the x and y directions.
+@item double * xrange
+The ranges of the bins in the x-direction are stored in an array of
+@math{@var{nx} + 1} elements pointed to by @var{xrange}.
+@item double * yrange
+The ranges of the bins in the y-direction are stored in an array of
+@math{@var{ny} + 1} elements pointed to by @var{yrange}.
+@item double * bin
+The counts for each bin are stored in an array pointed to by @var{bin}.
+The bins are floating-point numbers, so you can increment them by
+non-integer values if necessary. The array @var{bin} stores the two
+dimensional array of bins in a single block of memory according to the
+mapping @code{bin(i,j)} = @code{bin[i * ny + j]}.
+@end table
+@end deftp
+@comment
+
+@noindent
+The range for @code{bin(i,j)} is given by @code{xrange[i]} to
+@code{xrange[i+1]} in the x-direction and @code{yrange[j]} to
+@code{yrange[j+1]} in the y-direction. Each bin is inclusive at the lower
+end and exclusive at the upper end. Mathematically this means that the
+bins are defined by the following inequality,
+@tex
+\beforedisplay
+$$
+\matrix{
+\hbox{bin(i,j) corresponds to} &
+ \hbox{\it xrange}[i] \le x < \hbox{\it xrange}[i+1] \cr
+ \hbox{and} & \hbox{\it yrange}[j] \le y < \hbox{\it yrange}[j+1]}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+@display
+bin(i,j) corresponds to xrange[i] <= x < xrange[i+1]
+ and yrange[j] <= y < yrange[j+1]
+@end display
+
+@end ifinfo
+@noindent
+Note that any samples which fall on the upper sides of the histogram are
+excluded. If you want to include these values for the side bins you will
+need to add an extra row or column to your histogram.
+
+The @code{gsl_histogram2d} struct and its associated functions are
+defined in the header file @file{gsl_histogram2d.h}.
+
+@node 2D Histogram allocation
+@section 2D Histogram allocation
+
+The functions for allocating memory to a 2D histogram follow the style
+of @code{malloc} and @code{free}. In addition they also perform their
+own error checking. If there is insufficient memory available to
+allocate a histogram then the functions call the error handler (with
+an error number of @code{GSL_ENOMEM}) in addition to returning a null
+pointer. Thus if you use the library error handler to abort your program
+then it isn't necessary to check every 2D histogram @code{alloc}.
+
+@deftypefun {gsl_histogram2d *} gsl_histogram2d_alloc (size_t @var{nx}, size_t @var{ny})
+This function allocates memory for a two-dimensional histogram with
+@var{nx} bins in the x direction and @var{ny} bins in the y direction.
+The function returns a pointer to a newly created @code{gsl_histogram2d}
+struct. If insufficient memory is available a null pointer is returned
+and the error handler is invoked with an error code of
+@code{GSL_ENOMEM}. The bins and ranges must be initialized with one of
+the functions below before the histogram is ready for use.
+@end deftypefun
+
+@comment @deftypefun {gsl_histogram2d *} gsl_histogram2d_calloc (size_t @var{nx}, size_t @var{ny})
+@comment This function allocates memory for a two-dimensional histogram with
+@comment @var{nx} bins in the x direction and @var{ny} bins in the y
+@comment direction. The function returns a pointer to a newly initialized
+@comment @code{gsl_histogram2d} struct. The bins are uniformly spaced with a
+@comment total range of
+@comment @c{$0 \le x < nx$}
+@comment @math{0 <= x < nx} in the x-direction and
+@comment @c{$0 \le y < ny$}
+@comment @math{0 <= y < ny} in the y-direction, as shown in the table below.
+@comment
+@comment The bins are initialized to zero so the histogram is ready for use.
+@comment
+@comment If insufficient memory is available a null pointer is returned and the
+@comment error handler is invoked with an error code of @code{GSL_ENOMEM}.
+@comment @end deftypefun
+@comment
+@comment @deftypefun {gsl_histogram2d *} gsl_histogram2d_calloc_uniform (size_t @var{nx}, size_t @var{ny}, double @var{xmin}, double @var{xmax}, double @var{ymin}, double @var{ymax})
+@comment This function allocates a histogram of size @var{nx}-by-@var{ny} which
+@comment uniformly covers the ranges @var{xmin} to @var{xmax} and @var{ymin} to
+@comment @var{ymax} in the @math{x} and @math{y} directions respectively.
+@comment @end deftypefun
+@comment
+@comment @deftypefun {gsl_histogram2d *} gsl_histogram2d_calloc_range (size_t @var{nx}, size_t @var{ny}, double * @var{xrange}, double * @var{yrange})
+@comment This function allocates a histogram of size @var{nx}-by-@var{ny} using
+@comment the @math{nx+1} and @math{ny+1} bin ranges specified by the arrays
+@comment @var{xrange} and @var{xyrange}.
+@comment @end deftypefun
+
+@deftypefun int gsl_histogram2d_set_ranges (gsl_histogram2d * @var{h}, const double @var{xrange}[], size_t @var{xsize}, const double @var{yrange}[], size_t @var{ysize})
+This function sets the ranges of the existing histogram @var{h} using
+the arrays @var{xrange} and @var{yrange} of size @var{xsize} and
+@var{ysize} respectively. The values of the histogram bins are reset to
+zero.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_set_ranges_uniform (gsl_histogram2d * @var{h}, double @var{xmin}, double @var{xmax}, double @var{ymin}, double @var{ymax})
+This function sets the ranges of the existing histogram @var{h} to cover
+the ranges @var{xmin} to @var{xmax} and @var{ymin} to @var{ymax}
+uniformly. The values of the histogram bins are reset to zero.
+@end deftypefun
+
+@deftypefun void gsl_histogram2d_free (gsl_histogram2d * @var{h})
+This function frees the 2D histogram @var{h} and all of the memory
+associated with it.
+@end deftypefun
+
+@node Copying 2D Histograms
+@section Copying 2D Histograms
+
+@deftypefun int gsl_histogram2d_memcpy (gsl_histogram2d * @var{dest}, const gsl_histogram2d * @var{src})
+This function copies the histogram @var{src} into the pre-existing
+histogram @var{dest}, making @var{dest} into an exact copy of @var{src}.
+The two histograms must be of the same size.
+@end deftypefun
+
+@deftypefun {gsl_histogram2d *} gsl_histogram2d_clone (const gsl_histogram2d * @var{src})
+This function returns a pointer to a newly created histogram which is an
+exact copy of the histogram @var{src}.
+@end deftypefun
+
+@node Updating and accessing 2D histogram elements
+@section Updating and accessing 2D histogram elements
+
+You can access the bins of a two-dimensional histogram either by
+specifying a pair of @math{(x,y)} coordinates or by using the bin
+indices @math{(i,j)} directly. The functions for accessing the histogram
+through @math{(x,y)} coordinates use binary searches in the x and y
+directions to identify the bin which covers the appropriate range.
+
+@deftypefun int gsl_histogram2d_increment (gsl_histogram2d * @var{h}, double @var{x}, double @var{y})
+This function updates the histogram @var{h} by adding one (1.0) to the
+bin whose x and y ranges contain the coordinates (@var{x},@var{y}).
+
+If the point @math{(x,y)} lies inside the valid ranges of the
+histogram then the function returns zero to indicate success. If
+@math{(x,y)} lies outside the limits of the histogram then the
+function returns @code{GSL_EDOM}, and none of the bins are modified. The
+error handler is not called, since it is often necessary to compute
+histograms for a small range of a larger dataset, ignoring any
+coordinates outside the range of interest.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_accumulate (gsl_histogram2d * @var{h}, double @var{x}, double @var{y}, double @var{weight})
+This function is similar to @code{gsl_histogram2d_increment} but increases
+the value of the appropriate bin in the histogram @var{h} by the
+floating-point number @var{weight}.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_get (const gsl_histogram2d * @var{h}, size_t @var{i}, size_t @var{j})
+This function returns the contents of the (@var{i},@var{j})-th bin of the
+histogram @var{h}. If (@var{i},@var{j}) lies outside the valid range of
+indices for the histogram then the error handler is called with an error
+code of @code{GSL_EDOM} and the function returns 0.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_get_xrange (const gsl_histogram2d * @var{h}, size_t @var{i}, double * @var{xlower}, double * @var{xupper})
+@deftypefunx int gsl_histogram2d_get_yrange (const gsl_histogram2d * @var{h}, size_t @var{j}, double * @var{ylower}, double * @var{yupper})
+These functions find the upper and lower range limits of the @var{i}-th
+and @var{j}-th bins in the x and y directions of the histogram @var{h}.
+The range limits are stored in @var{xlower} and @var{xupper} or
+@var{ylower} and @var{yupper}. The lower limits are inclusive
+(i.e. events with these coordinates are included in the bin) and the
+upper limits are exclusive (i.e. events with the value of the upper
+limit are not included and fall in the neighboring higher bin, if it
+exists). The functions return 0 to indicate success. If @var{i} or
+@var{j} lies outside the valid range of indices for the histogram then
+the error handler is called with an error code of @code{GSL_EDOM}.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_xmax (const gsl_histogram2d * @var{h})
+@deftypefunx double gsl_histogram2d_xmin (const gsl_histogram2d * @var{h})
+@deftypefunx size_t gsl_histogram2d_nx (const gsl_histogram2d * @var{h})
+@deftypefunx double gsl_histogram2d_ymax (const gsl_histogram2d * @var{h})
+@deftypefunx double gsl_histogram2d_ymin (const gsl_histogram2d * @var{h})
+@deftypefunx size_t gsl_histogram2d_ny (const gsl_histogram2d * @var{h})
+These functions return the maximum upper and minimum lower range limits
+and the number of bins for the x and y directions of the histogram
+@var{h}. They provide a way of determining these values without
+accessing the @code{gsl_histogram2d} struct directly.
+@end deftypefun
+
+@deftypefun void gsl_histogram2d_reset (gsl_histogram2d * @var{h})
+This function resets all the bins of the histogram @var{h} to zero.
+@end deftypefun
+
+@node Searching 2D histogram ranges
+@section Searching 2D histogram ranges
+
+The following functions are used by the access and update routines to
+locate the bin which corresponds to a given @math{(x,y)} coordinate.
+
+@deftypefun int gsl_histogram2d_find (const gsl_histogram2d * @var{h}, double @var{x}, double @var{y}, size_t * @var{i}, size_t * @var{j})
+This function finds and sets the indices @var{i} and @var{j} to the to
+the bin which covers the coordinates (@var{x},@var{y}). The bin is
+located using a binary search. The search includes an optimization for
+histograms with uniform ranges, and will return the correct bin immediately
+in this case. If @math{(x,y)} is found then the function sets the
+indices (@var{i},@var{j}) and returns @code{GSL_SUCCESS}. If
+@math{(x,y)} lies outside the valid range of the histogram then the
+function returns @code{GSL_EDOM} and the error handler is invoked.
+@end deftypefun
+
+@node 2D Histogram Statistics
+@section 2D Histogram Statistics
+
+@deftypefun double gsl_histogram2d_max_val (const gsl_histogram2d * @var{h})
+This function returns the maximum value contained in the histogram bins.
+@end deftypefun
+
+@deftypefun void gsl_histogram2d_max_bin (const gsl_histogram2d * @var{h}, size_t * @var{i}, size_t * @var{j})
+This function finds the indices of the bin containing the maximum value
+in the histogram @var{h} and stores the result in (@var{i},@var{j}). In
+the case where several bins contain the same maximum value the first bin
+found is returned.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_min_val (const gsl_histogram2d * @var{h})
+This function returns the minimum value contained in the histogram bins.
+@end deftypefun
+
+@deftypefun void gsl_histogram2d_min_bin (const gsl_histogram2d * @var{h}, size_t * @var{i}, size_t * @var{j})
+This function finds the indices of the bin containing the minimum value
+in the histogram @var{h} and stores the result in (@var{i},@var{j}). In
+the case where several bins contain the same maximum value the first bin
+found is returned.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_xmean (const gsl_histogram2d * @var{h})
+This function returns the mean of the histogrammed x variable, where the
+histogram is regarded as a probability distribution. Negative bin values
+are ignored for the purposes of this calculation.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_ymean (const gsl_histogram2d * @var{h})
+This function returns the mean of the histogrammed y variable, where the
+histogram is regarded as a probability distribution. Negative bin values
+are ignored for the purposes of this calculation.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_xsigma (const gsl_histogram2d * @var{h})
+This function returns the standard deviation of the histogrammed
+x variable, where the histogram is regarded as a probability
+distribution. Negative bin values are ignored for the purposes of this
+calculation.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_ysigma (const gsl_histogram2d * @var{h})
+This function returns the standard deviation of the histogrammed
+y variable, where the histogram is regarded as a probability
+distribution. Negative bin values are ignored for the purposes of this
+calculation.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_cov (const gsl_histogram2d * @var{h})
+This function returns the covariance of the histogrammed x and y
+variables, where the histogram is regarded as a probability
+distribution. Negative bin values are ignored for the purposes of this
+calculation.
+@end deftypefun
+
+@deftypefun double gsl_histogram2d_sum (const gsl_histogram2d * @var{h})
+This function returns the sum of all bin values. Negative bin values
+are included in the sum.
+@end deftypefun
+
+@node 2D Histogram Operations
+@section 2D Histogram Operations
+
+@deftypefun int gsl_histogram2d_equal_bins_p (const gsl_histogram2d * @var{h1}, const gsl_histogram2d * @var{h2})
+This function returns 1 if all the individual bin ranges of the two
+histograms are identical, and 0 otherwise.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_add (gsl_histogram2d * @var{h1}, const gsl_histogram2d * @var{h2})
+This function adds the contents of the bins in histogram @var{h2} to the
+corresponding bins of histogram @var{h1},
+i.e. @math{h'_1(i,j) = h_1(i,j) + h_2(i,j)}.
+The two histograms must have identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_sub (gsl_histogram2d * @var{h1}, const gsl_histogram2d * @var{h2})
+This function subtracts the contents of the bins in histogram @var{h2} from the
+corresponding bins of histogram @var{h1},
+i.e. @math{h'_1(i,j) = h_1(i,j) - h_2(i,j)}.
+The two histograms must have identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_mul (gsl_histogram2d * @var{h1}, const gsl_histogram2d * @var{h2})
+This function multiplies the contents of the bins of histogram @var{h1}
+by the contents of the corresponding bins in histogram @var{h2},
+i.e. @math{h'_1(i,j) = h_1(i,j) * h_2(i,j)}.
+The two histograms must have identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_div (gsl_histogram2d * @var{h1}, const gsl_histogram2d * @var{h2})
+This function divides the contents of the bins of histogram @var{h1}
+by the contents of the corresponding bins in histogram @var{h2},
+i.e. @math{h'_1(i,j) = h_1(i,j) / h_2(i,j)}.
+The two histograms must have identical bin ranges.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_scale (gsl_histogram2d * @var{h}, double @var{scale})
+This function multiplies the contents of the bins of histogram @var{h}
+by the constant @var{scale}, i.e. @c{$h'_1(i,j) = h_1(i,j) * \hbox{\it scale}$}
+@math{h'_1(i,j) = h_1(i,j) scale}.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_shift (gsl_histogram2d * @var{h}, double @var{offset})
+This function shifts the contents of the bins of histogram @var{h}
+by the constant @var{offset}, i.e. @c{$h'_1(i,j) = h_1(i,j) + \hbox{\it offset}$}
+@math{h'_1(i,j) = h_1(i,j) + offset}.
+@end deftypefun
+
+@node Reading and writing 2D histograms
+@section Reading and writing 2D histograms
+
+The library provides functions for reading and writing two dimensional
+histograms to a file as binary data or formatted text.
+
+@deftypefun int gsl_histogram2d_fwrite (FILE * @var{stream}, const gsl_histogram2d * @var{h})
+This function writes the ranges and bins of the histogram @var{h} to the
+stream @var{stream} in binary format. The return value is 0 for success
+and @code{GSL_EFAILED} if there was a problem writing to the file. Since
+the data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_fread (FILE * @var{stream}, gsl_histogram2d * @var{h})
+This function reads into the histogram @var{h} from the stream
+@var{stream} in binary format. The histogram @var{h} must be
+preallocated with the correct size since the function uses the number of
+x and y bins in @var{h} to determine how many bytes to read. The return
+value is 0 for success and @code{GSL_EFAILED} if there was a problem
+reading from the file. The data is assumed to have been written in the
+native binary format on the same architecture.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_fprintf (FILE * @var{stream}, const gsl_histogram2d * @var{h}, const char * @var{range_format}, const char * @var{bin_format})
+This function writes the ranges and bins of the histogram @var{h}
+line-by-line to the stream @var{stream} using the format specifiers
+@var{range_format} and @var{bin_format}. These should be one of the
+@code{%g}, @code{%e} or @code{%f} formats for floating point
+numbers. The function returns 0 for success and @code{GSL_EFAILED} if
+there was a problem writing to the file. The histogram output is
+formatted in five columns, and the columns are separated by spaces,
+like this,
+
+@smallexample
+xrange[0] xrange[1] yrange[0] yrange[1] bin(0,0)
+xrange[0] xrange[1] yrange[1] yrange[2] bin(0,1)
+xrange[0] xrange[1] yrange[2] yrange[3] bin(0,2)
+....
+xrange[0] xrange[1] yrange[ny-1] yrange[ny] bin(0,ny-1)
+
+xrange[1] xrange[2] yrange[0] yrange[1] bin(1,0)
+xrange[1] xrange[2] yrange[1] yrange[2] bin(1,1)
+xrange[1] xrange[2] yrange[1] yrange[2] bin(1,2)
+....
+xrange[1] xrange[2] yrange[ny-1] yrange[ny] bin(1,ny-1)
+
+....
+
+xrange[nx-1] xrange[nx] yrange[0] yrange[1] bin(nx-1,0)
+xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,1)
+xrange[nx-1] xrange[nx] yrange[1] yrange[2] bin(nx-1,2)
+....
+xrange[nx-1] xrange[nx] yrange[ny-1] yrange[ny] bin(nx-1,ny-1)
+@end smallexample
+
+@noindent
+Each line contains the lower and upper limits of the bin and the
+contents of the bin. Since the upper limits of the each bin are the
+lower limits of the neighboring bins there is duplication of these
+values but this allows the histogram to be manipulated with
+line-oriented tools.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_fscanf (FILE * @var{stream}, gsl_histogram2d * @var{h})
+This function reads formatted data from the stream @var{stream} into the
+histogram @var{h}. The data is assumed to be in the five-column format
+used by @code{gsl_histogram_fprintf}. The histogram @var{h} must be
+preallocated with the correct lengths since the function uses the sizes
+of @var{h} to determine how many numbers to read. The function returns 0
+for success and @code{GSL_EFAILED} if there was a problem reading from
+the file.
+@end deftypefun
+
+@node Resampling from 2D histograms
+@section Resampling from 2D histograms
+
+As in the one-dimensional case, a two-dimensional histogram made by
+counting events can be regarded as a measurement of a probability
+distribution. Allowing for statistical error, the height of each bin
+represents the probability of an event where (@math{x},@math{y}) falls in
+the range of that bin. For a two-dimensional histogram the probability
+distribution takes the form @math{p(x,y) dx dy} where,
+@tex
+\beforedisplay
+$$
+p(x,y) = n_{ij}/ (N A_{ij})
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x,y) = n_@{ij@}/ (N A_@{ij@})
+@end example
+
+@end ifinfo
+@noindent
+In this equation
+@c{$n_{ij}$}
+@math{n_@{ij@}} is the number of events in the bin which
+contains @math{(x,y)},
+@c{$A_{ij}$}
+@math{A_@{ij@}} is the area of the bin and @math{N} is
+the total number of events. The distribution of events within each bin
+is assumed to be uniform.
+
+@deftp {Data Type} {gsl_histogram2d_pdf}
+@table @code
+@item size_t nx, ny
+This is the number of histogram bins used to approximate the probability
+distribution function in the x and y directions.
+@item double * xrange
+The ranges of the bins in the x-direction are stored in an array of
+@math{@var{nx} + 1} elements pointed to by @var{xrange}.
+@item double * yrange
+The ranges of the bins in the y-direction are stored in an array of
+@math{@var{ny} + 1} pointed to by @var{yrange}.
+@item double * sum
+The cumulative probability for the bins is stored in an array of
+@var{nx}*@var{ny} elements pointed to by @var{sum}.
+@end table
+@end deftp
+@comment
+
+@noindent
+The following functions allow you to create a @code{gsl_histogram2d_pdf}
+struct which represents a two dimensional probability distribution and
+generate random samples from it.
+
+@deftypefun {gsl_histogram2d_pdf *} gsl_histogram2d_pdf_alloc (size_t @var{nx}, size_t @var{ny})
+This function allocates memory for a two-dimensional probability
+distribution of size @var{nx}-by-@var{ny} and returns a pointer to a
+newly initialized @code{gsl_histogram2d_pdf} struct. If insufficient
+memory is available a null pointer is returned and the error handler is
+invoked with an error code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_pdf_init (gsl_histogram2d_pdf * @var{p}, const gsl_histogram2d * @var{h})
+This function initializes the two-dimensional probability distribution
+calculated @var{p} from the histogram @var{h}. If any of the bins of
+@var{h} are negative then the error handler is invoked with an error
+code of @code{GSL_EDOM} because a probability distribution cannot
+contain negative values.
+@end deftypefun
+
+@deftypefun void gsl_histogram2d_pdf_free (gsl_histogram2d_pdf * @var{p})
+This function frees the two-dimensional probability distribution
+function @var{p} and all of the memory associated with it.
+@end deftypefun
+
+@deftypefun int gsl_histogram2d_pdf_sample (const gsl_histogram2d_pdf * @var{p}, double @var{r1}, double @var{r2}, double * @var{x}, double * @var{y})
+This function uses two uniform random numbers between zero and one,
+@var{r1} and @var{r2}, to compute a single random sample from the
+two-dimensional probability distribution @var{p}.
+@end deftypefun
+
+@page
+@node Example programs for 2D histograms
+@section Example programs for 2D histograms
+This program demonstrates two features of two-dimensional histograms.
+First a 10-by-10 two-dimensional histogram is created with x and y running
+from 0 to 1. Then a few sample points are added to the histogram, at
+(0.3,0.3) with a height of 1, at (0.8,0.1) with a height of 5 and at
+(0.7,0.9) with a height of 0.5. This histogram with three events is
+used to generate a random sample of 1000 simulated events, which are
+printed out.
+
+@example
+@verbatiminclude examples/histogram2d.c
+@end example
+
+@noindent
+@iftex
+The following plot shows the distribution of the simulated events. Using
+a higher resolution grid we can see the original underlying histogram
+and also the statistical fluctuations caused by the events being
+uniformly distributed over the area of the original bins.
+
+@sp 1
+@center @image{histogram2d,3.4in}
+@end iftex
+
diff --git a/gsl-1.9/doc/histogram2d.eps b/gsl-1.9/doc/histogram2d.eps
new file mode 100644
index 0000000..a26062a
--- /dev/null
+++ b/gsl-1.9/doc/histogram2d.eps
@@ -0,0 +1,776 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%BoundingBox: 0 0 567 567
+%%Title: paw.eps
+%%Creator: HIGZ Version 1.23/07
+%%CreationDate: 98/05/04 19.25
+%%EndComments
+%%BeginProlog
+80 dict begin
+/s {stroke} def /l {lineto} def /m {moveto} def /t {translate} def
+/sw {stringwidth} def /r {rotate} def /rl {roll} def /R {repeat} def
+/d {rlineto} def /rm {rmoveto} def /gr {grestore} def /f {eofill} def
+/c {setrgbcolor} def /lw {setlinewidth} def /sd {setdash} def
+/cl {closepath} def /sf {scalefont setfont} def /black {0 setgray} def
+/box {m dup 0 exch d exch 0 d 0 exch neg d cl} def
+/NC{systemdict begin initclip end}def/C{NC box clip newpath}def
+/bl {box s} def /bf {box f} def /Y { 0 exch d} def /X { 0 d} def
+/mp {newpath /y exch def /x exch def} def
+/side {[w .77 mul w .23 mul] .385 w mul sd w 0 l currentpoint t -144 r} def
+/mr {mp x y w2 0 360 arc} def /m24 {mr s} def /m20 {mr f} def
+/mb {mp x y w2 add m w2 neg 0 d 0 w neg d w 0 d 0 w d cl} def
+/mt {mp x y w2 add m w2 neg w neg d w 0 d cl} def
+/m21 {mb f} def /m25 {mb s} def /m22 {mt f} def /m26 {mt s} def
+/m23 {mp x y w2 sub m w2 w d w neg 0 d cl f} def
+/m27 {mp x y w2 add m w3 neg w2 neg d w3 w2 neg d w3 w2 d cl s} def
+/m28 {mp x w2 sub y w2 sub w3 add m w3 0 d 0 w3 neg d w3 0 d 0 w3 d w3 0 d
+ 0 w3 d w3 neg 0 d 0 w3 d w3 neg 0 d
+ 0 w3 neg d w3 neg 0 d cl s } def
+/m29 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 4 {side} repeat cl fill gr} def
+/m30 {mp gsave x w2 sub y w2 add w3 sub m currentpoint t
+ 5 {side} repeat s gr} def
+/m31 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d
+ x w2 sub y w2 add m w w neg d x w2 sub y w2
+ sub m w w d s} def
+/m2 {mp x y w2 sub m 0 w d x w2 sub y m w 0 d s} def
+/m5 {mp x w2 sub y w2 sub m w w d x w2 sub y w2 add m w w neg d s} def
+/DP {/PT exch def gsave 47.2 47.2 scale PT 1 eq { 16 16 1 [ 16 0 0 16 neg 0 16
+] { < AA AA 55 55 AA AA 55 55 AA AA 55 55 AA AA 55 55 AA AA 55 55 AA AA 55 55
+AA AA 55 55 AA AA 55 55 > } image } if PT 2 eq { 16 16 1 [ 16 0 0 16 neg 0 16
+] { < BB BB EE EE BB BB EE EE BB BB EE EE BB BB EE EE BB BB EE EE BB BB EE EE
+BB BB EE EE BB BB EE EE > } image } if PT 3 eq { 16 16 1 [ 16 0 0 16 neg 0 16
+] { < FF FF BB BB FF FF EE EE FF FF BB BB FF FF EE EE FF FF BB BB FF FF EE EE
+FF FF BB BB FF FF EE EE > } image } if PT 4 eq { 16 16 1 [ 16 0 0 16 neg 0 16
+] { < DF DF BF BF 7F 7F FE FE FD FD FB FB F7 F7 EF EF DF DF BF BF 7F 7F FE FE
+FD FD FB FB F7 F7 EF EF > } image } if PT 5 eq { 16 16 1 [ 16 0 0 16 neg 0 16
+] { < 7F 7F BF B F DF DF EF EF F7 F7 FB FB FD FD FE FE 7F 7F BF BF DF DF EF
+EF F7 F7 FB FB FD FD FE FE > } image } if PT 6 eq { 16 16 1 [ 16 0 0 16 neg 0
+16 ] { < BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB
+BB BB BB BB BB BB BB BB BB > } image } if PT 7 eq { 16 16 1 [ 16 0 0 16 neg 0
+16 ] { < FF FF FF FF FF FF 00 00 FF FF FF FF FF FF 00 00 FF FF FF FF FF FF 00
+00 FF FF FF FF FF FF 00 00 > } image } if PT 8 eq { 16 16 1 [ 16 0 0 16 neg 0
+16 ] { < EE EE 47 47 83 83 C5 C5 EE EE 5C 5C 38 38 74 74 EE EE 47 47 83 83 C5
+C5 EE EE 5C 5C 38 38 74 74 > } image } if PT 9 eq { 16 16 1 [ 16 0 0 16 neg 0
+16 ] { < EF EF EF EF D7 D7 38 38 FE FE FE FE 7D 7D 83 83 EF EF EF EF D7 D7 38
+38 FE FE FE FE 7D 7D 83 83 > } image } if PT 10 eq { 16 16 1 [ 16 0 0 16 neg
+0 16 ] { < EF EF EF EF EF EF 00 00 FE FE FE FE FE FE 00 00 EF EF EF EF EF EF
+00 00 FE FE FE FE FE FE 00 00 > } image } if PT 11 eq { 16 16 1 [ 16 0 0 16
+neg 0 16 ] { < F7 F7 B6 B6 D5 D5 E3 E3 D5 D5 B6 B6 F7 F7 FF FF 7F 7F 6B 6B 5D
+5D 3E 3E 5D 5D 6B 6B 7F 7F FF FF > } image } if PT 12 eq { 16 16 1 [ 16 0 0
+16 neg 0 16 ] { < E3 E3 DD DD BE BE BE BE BE BE DD DD E3 E3 FF FF 3E 3E DD DD
+EB EB EB EB EB EB DD DD 3E 3E FF FF > } image } if PT 13 eq { 16 16 1 [ 16 0
+0 16 neg 0 16 ] { < FE FE 7D 7D BB BB D7 D7 EF EF D7 D7 BB BB 7D 7D FE FE 7D
+7D BB BB D7 D7 EF EF D7 D7 BB BB 7D 7D > } image } if PT 14 eq { 16 16 1 [ 16
+0 0 16 neg 0 16 ] { < 00 00 EE EF EE EF EE EF 0E E0 EE EE EE EE EE EE 00 EE
+FE EE FE EE FE EE 00 00 FE EF FE EF FE EF > } image } if PT 15 eq { 16 16 1 [
+16 0 0 16 neg 0 16 ] { < DD DD AA AA DD DD FF FF 77 77 AA AA 77 77 FF FF DD
+DD AA AA DD DD FF FF 77 77 AA AA 77 77 FF FF > } image } if PT 16 eq { 16 16
+1 [ 16 0 0 16 neg 0 16 ] { < F1 F1 EE EE 1F 1F FF FF F1 F1 EE EE 1F 1F FF FF
+F1 F1 EE EE 1F 1F FF FF F1 F1 EE EE 1F 1F FF FF > } image } if PT 17 eq { 16
+16 1 [ 16 0 0 16 neg 0 16 ] { < EE EE DD DD BB BB FF FF EE EE DD DD BB BB FF
+ FF EE EE DD DD BB BB FF FF EE EE DD DD BB BB FF FF > } image } if PT 18 eq {
+16 16 1 [ 16 0 0 16 neg 0 16 ] { < BB BB DD DD EE EE FF FF BB BB DD DD EE EE
+FF FF BB BB DD DD EE EE FF FF BB BB DD DD EE EE FF FF > } image } if PT 19 eq
+{ 16 16 1 [ 16 0 0 16 neg 0 16 ] { < 1F FC 67 F3 7B EF BD DE BD DE DE BD E6
+B3 F8 0F E6 B3 DE BD BD DE BD DE 7B EF 67 F3 1F FC 7F FF > } image } if PT
+20 eq { 16 16 1 [ 16 0 0 16 neg 0 16 ] { < DD DD EE EE EE EE EE EE DD DD BB
+BB BB BB BB BB DD DD EE EE EE EE EE EE DD DD BB BB BB BB BB BB > } image }
+if PT 21 eq { 16 16 1 [ 16 0 0 16 neg 0 16 ] { < 0E 0E EF EF EF EF EF EF E0
+E0 FE FE FE FE FE FE 0E 0E EF EF EF EF EF EF E0 E0 FE FE FE FE FE FE > }
+image } if PT 22 eq { 16 16 1 [ 16 0 0 16 neg 0 16 ] { < 70 70 F7 F7 F7 F7 F7
+F7 07 07 7F 7F 7F 7F 7F 7F 70 70 F7 F7 F7 F7 F7 F7 07 07 7F 7F 7F 7F 7F 7F >
+} image } if PT 23 eq { 16 16 1 [ 16 0 0 16 neg 0 16 ] { < AA AA 55 55 A9 A9
+D1 D1 E1 E1 D1 D1 A9 A9 55 55 AA AA 55 55 A9 A9 D1 D1 E1 E1 D1 D1 A9 A9 55 55
+> } image } if PT 24 eq { 16 16 1 [ 16 0 0 16 neg 0 16 ] { < FF FE FF FC EA
+A8 D5 54 EA A8 D5 54 E8 28 D4 54 E8 E8 D4 D4 E8 EA 54 D5 A8 EA 54 D5 00 C0 00
+80 > } image } if PT 25 eq { 16 16 1 [ 16 0 0 16 neg 0 16 ] { < FF FE FF FC
+FF F8 FF F0 F0 00 F0 00 F0 20 F0 60 F0 E0 F1 E0 F3 E0 F0 00 E0 00 C0 00 80 00
+00 00 > } image } if gr } def /FA { /PT exch def gsave clip 0 0 translate 1 1
+54 { 1 sub 47.2 mul /Xcurr exch def 1 1 74 { 1 sub 47.2 mul /Ycurr exch def
+gsave Xcurr Ycurr translate PT DP gr } for } for gr newpath } def
+/reencdict 24 dict def /ReEncode {reencdict begin /nco&na exch def
+/nfnam exch def /basefontname exch def /basefontdict basefontname findfont def
+/newfont basefontdict maxlength dict def basefontdict {exch dup /FID ne
+{dup /Encoding eq {exch dup length array copy newfont 3 1 roll put} {exch
+newfont 3 1 roll put} ifelse} {pop pop} ifelse } forall newfont
+/FontName nfnam put nco&na aload pop nco&na length 2 idiv {newfont
+/Encoding get 3 1 roll put} repeat nfnam newfont definefont pop end } def
+/accvec [ 176 /agrave 181 /Agrave 190 /acircumflex 192 /Acircumflex
+201 /adieresis 204 /Adieresis 209 /ccedilla 210 /Ccedilla 211 /eacute
+212 /Eacute 213 /egrave 214 /Egrave 215 /ecircumflex 216 /Ecircumflex
+217 /edieresis 218 /Edieresis 219 /icircumflex 220 /Icircumflex
+221 /idieresis 222 /Idieresis 223 /ntilde 224 /Ntilde 226 /ocircumflex
+228 /Ocircumflex 229 /odieresis 230 /Odieresis 231 /ucircumflex 236 /Ucircumflex
+237 /udieresis 238 /Udieresis 239 /aring 242 /Aring 243 /ydieresis
+244 /Ydieresis 246 /aacute 247 /Aacute 252 /ugrave 253 /Ugrave] def
+/Times-Roman /Times-Roman accvec ReEncode
+/Times-Italic /Times-Italic accvec ReEncode
+/Times-Bold /Times-Bold accvec ReEncode
+/Times-BoldItalic /Times-BoldItalic accvec ReEncode
+/Helvetica /Helvetica accvec ReEncode
+/Helvetica-Oblique /Helvetica-Oblique accvec ReEncode
+/Helvetica-Bold /Helvetica-Bold accvec ReEncode
+/Helvetica-BoldOblique /Helvetica-BoldOblique accvec ReEncode
+/Courier /Courier accvec ReEncode
+/Courier-Oblique /Courier-Oblique accvec ReEncode
+/Courier-Bold /Courier-Bold accvec ReEncode
+/Courier-BoldOblique /Courier-BoldOblique accvec ReEncode
+/oshow {gsave [] 0 sd true charpath stroke gr} def
+/stwn { /fs exch def /fn exch def /text exch def fn findfont fs sf
+ text sw pop xs add /xs exch def} def
+/stwb { /fs exch def /fn exch def /nbas exch def /textf exch def
+textf length /tlen exch def nbas tlen gt {/nbas tlen def} if
+fn findfont fs sf textf dup length nbas sub nbas getinterval sw
+pop neg xs add /xs exch def} def
+/accspe [ 65 /plusminus 66 /bar 67 /existential 68 /universal
+69 /exclam 70 /numbersign 71 /greater 72 /question 73 /integral
+74 /colon 75 /semicolon 76 /less 77 /bracketleft 78 /bracketright
+79 /greaterequal 80 /braceleft 81 /braceright 82 /radical
+83 /spade 84 /heart 85 /diamond 86 /club 87 /lessequal
+88 /multiply 89 /percent 90 /infinity 48 /circlemultiply 49 /circleplus
+50 /emptyset 51 /lozenge 52 /bullet 53 /arrowright 54 /arrowup
+55 /arrowleft 56 /arrowdown 57 /arrowboth 48 /degree 44 /comma 43 /plus
+ 45 /angle 42 /angleleft 47 /divide 61 /notequal 40 /equivalence 41 /second
+ 97 /approxequal 98 /congruent 99 /perpendicular 100 /partialdiff 101 /florin
+ 102 /intersection 103 /union 104 /propersuperset 105 /reflexsuperset
+ 106 /notsubset 107 /propersubset 108 /reflexsubset 109 /element 110 /notelement
+ 111 /gradient 112 /logicaland 113 /logicalor 114 /arrowdblboth
+ 115 /arrowdblleft 116 /arrowdblup 117 /arrowdblright 118 /arrowdbldown
+ 119 /ampersand 120 /omega1 121 /similar 122 /aleph ] def
+/Symbol /Special accspe ReEncode
+%%EndProlog
+ gsave .25 .25 scale gsave 0 0 t black [] 0 sd 1 lw 2268 2268 0 0 bl 2268 2268
+ 0 0 C 1814 1814 227 227 C NC 891 227 m 38 10 d s 907 253 m 22 -16 d s 869 244 m
+ 38 9 d s 869 244 m 22 -17 d s 929 237 m 39 9 d s 945 263 m 23 -17 d s 907 253 m
+ 38 10 d s 968 246 m 38 10 d s 984 273 m 22 -17 d s 945 263 m 39 10 d s 1006 256
+ m 38 10 d s 1022 283 m 22 -17 d s 984 273 m 38 10 d s 1044 266 m 39 10 d s 1060
+ 293 m 23 -17 d s 1022 283 m 38 10 d s 1083 276 m 38 9 d s 1099 302 m 22 -17 d s
+ 1060 293 m 39 9 d s 1121 285 m 38 10 d s 1137 312 m 22 -17 d s 1099 302 m 38 10
+ d s 1159 295 m 39 10 d s 1176 322 m 22 -17 d s 1137 312 m 39 10 d s 1198 305 m
+ 38 10 d s 1214 332 m 22 -17 d s 1176 322 m 38 10 d s 1236 315 m 38 9 d s 1252
+ 341 m 22 -17 d s 1214 332 m 38 9 d s 1274 324 m 39 10 d s 1291 351 m 22 -17 d s
+ 1252 341 m 39 10 d s 1313 334 m 38 10 d s 1329 361 m 22 -17 d s 1291 351 m 38
+ 10 d s 1351 344 m 38 10 d s 1367 371 m 22 -17 d s 1329 361 m 38 10 d s 1329 361
+ m 12 -10 d s 1389 354 m 39 9 d s 1406 380 m 22 -17 d s 1367 371 m 39 9 d s 1428
+ 363 m 38 10 d s 1444 390 m 22 -17 d s 1406 380 m 38 10 d s 1466 373 m 38 10 d s
+ 1482 400 m 22 -17 d s 1444 390 m 38 10 d s 1504 383 m 39 10 d s 1521 410 m 22
+ -17 d s 1482 400 m 39 10 d s 1543 393 m 38 9 d s 1559 419 m 22 -17 d s 1521 410
+ m 38 9 d s 1581 402 m 38 10 d s 1597 429 m 22 -17 d s 1559 419 m 38 10 d s 1619
+ 412 m 39 10 d s 1636 439 m 22 -17 d s 1597 429 m 39 10 d s 1658 422 m 38 10 d s
+ 1674 449 m 22 -17 d s 1636 439 m 38 10 d s 1696 432 m 38 10 d s 1712 458 m 22
+ -16 d s 1674 449 m 38 9 d s 1734 442 m 39 9 d s 1751 468 m 22 -17 d s 1712 458
+ m 39 10 d s 1773 451 m 38 10 d s 1789 478 m 22 -17 d s 1751 468 m 38 10 d s
+ 1811 461 m 38 10 d s 1827 488 m 22 -17 d s 1789 478 m 38 10 d s 1849 471 m 39
+ 10 d s 1866 497 m 22 -16 d s 1827 488 m 39 9 d s 1888 481 m 38 9 d s 1904 507 m
+ 22 -17 d s 1866 497 m 38 10 d s 1926 490 m 39 10 d s 1942 517 m 23 -17 d s 1904
+ 507 m 38 10 d s 1965 500 m 38 10 d s 1981 527 m 22 -17 d s 1942 517 m 39 10 d s
+ 2003 510 m 38 10 d s 2019 537 m 22 -17 d s 1981 527 m 38 10 d s 885 270 m 22
+ -17 d s 847 261 m 38 9 d s 847 261 m 22 -17 d s 923 280 m 22 -17 d s 885 270 m
+ 38 10 d s 962 290 m 22 -17 d s 923 280 m 39 10 d s 1000 300 m 22 -17 d s 962
+ 290 m 38 10 d s 1038 309 m 22 -16 d s 1000 300 m 38 9 d s 1077 319 m 22 -17 d s
+ 1038 309 m 39 10 d s 1115 329 m 22 -17 d s 1077 319 m 38 10 d s 1153 339 m 23
+ -17 d s 1115 329 m 38 10 d s 1192 348 m 22 -16 d s 1153 339 m 39 9 d s 1230 358
+ m 22 -17 d s 1192 348 m 38 10 d s 1268 368 m 23 -17 d s 1230 358 m 38 10 d s
+ 1307 378 m 22 -17 d s 1268 368 m 39 10 d s 1345 388 m 22 -17 d s 1307 378 m 38
+ 10 d s 1319 368 m 10 -7 d s 1383 397 m 23 -17 d s 1345 388 m 38 9 d s 1422 407
+ m 22 -17 d s 1383 397 m 39 10 d s 1460 417 m 22 -17 d s 1422 407 m 38 10 d s
+ 1498 427 m 23 -17 d s 1460 417 m 38 10 d s 1537 436 m 22 -17 d s 1498 427 m 39
+ 9 d s 1575 446 m 22 -17 d s 1537 436 m 38 10 d s 1613 456 m 23 -17 d s 1575 446
+ m 38 10 d s 1652 466 m 22 -17 d s 1613 456 m 39 10 d s 1690 475 m 22 -17 d s
+ 1652 466 m 38 9 d s 1729 485 m 22 -17 d s 1690 475 m 39 10 d s 1767 495 m 22
+ -17 d s 1729 485 m 38 10 d s 1805 505 m 22 -17 d s 1767 495 m 38 10 d s 1844
+ 514 m 22 -17 d s 1805 505 m 39 9 d s 1882 524 m 22 -17 d s 1844 514 m 38 10 d s
+ 1920 534 m 22 -17 d s 1882 524 m 38 10 d s 1959 544 m 22 -17 d s 1920 534 m 39
+ 10 d s 1997 553 m 22 -16 d s 1959 544 m 38 9 d s 863 287 m 22 -17 d s 825 278 m
+ 38 9 d s 825 278 m 22 -17 d s 901 297 m 22 -17 d s 863 287 m 38 10 d s 940 307
+ m 22 -17 d s 901 297 m 39 10 d s 978 317 m 22 -17 d s 940 307 m 38 10 d s 1016
+ 326 m 22 -17 d s 978 317 m 38 9 d s 1055 336 m 22 -17 d s 1016 326 m 39 10 d s
+ 1093 346 m 22 -17 d s 1055 336 m 38 10 d s 1131 356 m 22 -17 d s 1093 346 m 38
+ 10 d s 1170 365 m 22 -17 d s 1131 356 m 39 9 d s 1208 375 m 22 -17 d s 1170 365
+ m 38 10 d s 1246 385 m 22 -17 d s 1208 375 m 38 10 d s 1285 395 m 22 -17 d s
+ 1246 385 m 39 10 d s 1323 404 m 22 -16 d s 1285 395 m 38 9 d s 1361 414 m 22
+ -17 d s 1323 404 m 38 10 d s 1400 424 m 22 -17 d s 1361 414 m 39 10 d s 1438
+ 434 m 22 -17 d s 1400 424 m 38 10 d s 1476 443 m 22 -16 d s 1438 434 m 38 9 d s
+ 1515 453 m 22 -17 d s 1476 443 m 39 10 d s 1553 463 m 22 -17 d s 1515 453 m 38
+ 10 d s 1591 473 m 22 -17 d s 1553 463 m 38 10 d s 1630 482 m 22 -16 d s 1591
+ 473 m 39 9 d s 1594 471 m 3 -2 d s 1602 464 m 3 -2 d s 1605 462 m 3 -2 d s 1668
+ 492 m 22 -17 d s 1630 482 m 38 10 d s 1706 502 m 23 -17 d s 1668 492 m 38 10 d
+ s 1745 512 m 22 -17 d s 1706 502 m 39 10 d s 1783 522 m 22 -17 d s 1745 512 m
+ 38 10 d s 1821 531 m 23 -17 d s 1783 522 m 38 9 d s 1860 541 m 22 -17 d s 1821
+ 531 m 39 10 d s 1898 551 m 22 -17 d s 1860 541 m 38 10 d s 1936 561 m 23 -17 d
+ s 1898 551 m 38 10 d s 1975 570 m 22 -17 d s 1936 561 m 39 9 d s 841 304 m 22
+ -17 d s 802 294 m 39 10 d s 802 294 m 23 -16 d s 879 314 m 22 -17 d s 841 304 m
+ 38 10 d s 917 324 m 23 -17 d s 879 314 m 38 10 d s 956 333 m 22 -16 d s 917 324
+ m 39 9 d s 994 343 m 22 -17 d s 956 333 m 38 10 d s 1032 353 m 23 -17 d s 994
+ 343 m 38 10 d s 1071 363 m 22 -17 d s 1032 353 m 39 10 d s 1109 373 m 22 -17 d
+ s 1071 363 m 38 10 d s 1147 382 m 23 -17 d s 1109 373 m 38 9 d s 1186 392 m 22
+ -17 d s 1147 382 m 39 10 d s 1224 402 m 22 -17 d s 1186 392 m 38 10 d s 1262
+ 412 m 23 -17 d s 1224 402 m 38 10 d s 1301 421 m 22 -17 d s 1262 412 m 39 9 d s
+ 1339 431 m 22 -17 d s 1301 421 m 38 10 d s 1378 441 m 22 -17 d s 1339 431 m 39
+ 10 d s 1416 451 m 22 -17 d s 1378 441 m 38 10 d s 1454 460 m 22 -17 d s 1416
+ 451 m 38 9 d s 1493 470 m 22 -17 d s 1454 460 m 39 10 d s 1531 480 m 22 -17 d s
+ 1493 470 m 38 10 d s 1501 464 m 3 -2 d s 1509 457 m 3 -2 d s 1512 455 m 3 -2 d
+ s 1569 490 m 22 -17 d s 1531 480 m 38 10 d s 1608 499 m 22 -17 d s 1569 490 m
+ 39 9 d s 1646 509 m 22 -17 d s 1608 499 m 38 10 d s 1684 519 m 22 -17 d s 1646
+ 509 m 38 10 d s 1723 529 m 22 -17 d s 1684 519 m 39 10 d s 1761 538 m 22 -16 d
+ s 1723 529 m 38 9 d s 1799 548 m 22 -17 d s 1761 538 m 38 10 d s 1838 558 m 22
+ -17 d s 1799 548 m 39 10 d s 1876 568 m 22 -17 d s 1838 558 m 38 10 d s 1914
+ 577 m 22 -16 d s 1876 568 m 38 9 d s 1953 587 m 22 -17 d s 1914 577 m 39 10 d s
+ 819 321 m 22 -17 d s 780 311 m 39 10 d s 780 311 m 22 -17 d s 857 331 m 22 -17
+ d s 819 321 m 38 10 d s 895 341 m 22 -17 d s 857 331 m 38 10 d s 934 350 m 22
+ -17 d s 895 341 m 39 9 d s 972 360 m 22 -17 d s 934 350 m 38 10 d s 1010 370 m
+ 22 -17 d s 972 360 m 38 10 d s 1049 380 m 22 -17 d s 1010 370 m 39 10 d s 1087
+ 389 m 22 -16 d s 1049 380 m 38 9 d s 1125 399 m 22 -17 d s 1087 389 m 38 10 d s
+ 1164 409 m 22 -17 d s 1125 399 m 39 10 d s 1202 419 m 22 -17 d s 1164 409 m 38
+ 10 d s 1240 428 m 22 -16 d s 1202 419 m 38 9 d s 1279 438 m 22 -17 d s 1240 428
+ m 39 10 d s 1317 448 m 22 -17 d s 1279 438 m 38 10 d s 1355 458 m 23 -17 d s
+ 1317 448 m 38 10 d s 1394 468 m 22 -17 d s 1355 458 m 39 10 d s 1432 477 m 22
+ -17 d s 1394 468 m 38 9 d s 1470 487 m 23 -17 d s 1432 477 m 38 10 d s 1509 497
+ m 22 -17 d s 1470 487 m 39 10 d s 1547 507 m 22 -17 d s 1509 497 m 38 10 d s
+ 1585 516 m 23 -17 d s 1547 507 m 38 9 d s 1624 526 m 22 -17 d s 1585 516 m 39
+ 10 d s 1662 536 m 22 -17 d s 1624 526 m 38 10 d s 1700 546 m 23 -17 d s 1662
+ 536 m 38 10 d s 1739 555 m 22 -17 d s 1700 546 m 39 9 d s 1777 565 m 22 -17 d s
+ 1739 555 m 38 10 d s 1815 575 m 23 -17 d s 1777 565 m 38 10 d s 1854 585 m 22
+ -17 d s 1815 575 m 39 10 d s 1892 594 m 22 -17 d s 1854 585 m 38 9 d s 1931 604
+ m 22 -17 d s 1892 594 m 39 10 d s 796 338 m 23 -17 d s 758 328 m 38 10 d s 758
+ 328 m 22 -17 d s 835 348 m 22 -17 d s 796 338 m 39 10 d s 873 358 m 22 -17 d s
+ 835 348 m 38 10 d s 911 367 m 23 -17 d s 873 358 m 38 9 d s 950 377 m 22 -17 d
+ s 911 367 m 39 10 d s 988 387 m 22 -17 d s 950 377 m 38 10 d s 1026 397 m 23
+ -17 d s 988 387 m 38 10 d s 1065 406 m 22 -17 d s 1026 397 m 39 9 d s 1103 416
+ m 22 -17 d s 1065 406 m 38 10 d s 1142 426 m 22 -17 d s 1103 416 m 39 10 d s
+ 1180 436 m 22 -17 d s 1142 426 m 38 10 d s 1218 445 m 22 -17 d s 1180 436 m 38
+ 9 d s 1257 455 m 22 -17 d s 1218 445 m 39 10 d s 1295 465 m 22 -17 d s 1257 455
+ m 38 10 d s 1333 475 m 22 -17 d s 1295 465 m 38 10 d s 1372 484 m 22 -16 d s
+ 1333 475 m 39 9 d s 1410 494 m 22 -17 d s 1372 484 m 38 10 d s 1448 504 m 22
+ -17 d s 1410 494 m 38 10 d s 1487 514 m 22 -17 d s 1448 504 m 39 10 d s 1525
+ 523 m 22 -16 d s 1487 514 m 38 9 d s 1563 533 m 22 -17 d s 1525 523 m 38 10 d s
+ 1602 543 m 22 -17 d s 1563 533 m 39 10 d s 1640 553 m 22 -17 d s 1602 543 m 38
+ 10 d s 1678 562 m 22 -16 d s 1640 553 m 38 9 d s 1717 572 m 22 -17 d s 1678 562
+ m 39 10 d s 1755 582 m 22 -17 d s 1717 572 m 38 10 d s 1793 592 m 22 -17 d s
+ 1755 582 m 38 10 d s 1832 602 m 22 -17 d s 1793 592 m 39 10 d s 1870 611 m 22
+ -17 d s 1832 602 m 38 9 d s 1908 621 m 23 -17 d s 1870 611 m 38 10 d s 774 355
+ m 22 -17 d s 736 345 m 38 10 d s 736 345 m 22 -17 d s 813 365 m 22 -17 d s 774
+ 355 m 39 10 d s 851 374 m 22 -16 d s 813 365 m 38 9 d s 889 384 m 22 -17 d s
+ 851 374 m 38 10 d s 927 371 m 2 1 d s 932 372 m 2 1 d s 937 374 m 13 3 d s 928
+ 394 m 22 -17 d s 889 384 m 39 10 d s 950 377 m 10 3 d s 963 380 m 5 2 d s 970
+ 382 m 3 1 d s 978 384 m 2 1 d s 966 404 m 22 -17 d s 928 394 m 38 10 d s 1004
+ 413 m 22 -16 d s 966 404 m 38 9 d s 1043 423 m 22 -17 d s 1004 413 m 39 10 d s
+ 1081 433 m 22 -17 d s 1043 423 m 38 10 d s 1119 443 m 23 -17 d s 1081 433 m 38
+ 10 d s 1158 453 m 22 -17 d s 1119 443 m 39 10 d s 1196 462 m 22 -17 d s 1158
+ 453 m 38 9 d s 1228 448 m 3 1 d s 1236 450 m 3 1 d s 1241 451 m 5 2 d s 1249
+ 453 m 8 2 d s 1234 472 m 23 -17 d s 1196 462 m 38 10 d s 1257 455 m 12 3 d s
+ 1276 460 m 9 2 d s 1273 482 m 22 -17 d s 1234 472 m 39 10 d s 1311 492 m 22 -17
+ d s 1273 482 m 38 10 d s 1349 501 m 23 -17 d s 1311 492 m 38 9 d s 1388 511 m
+ 22 -17 d s 1349 501 m 39 10 d s 1426 521 m 22 -17 d s 1388 511 m 38 10 d s 1448
+ 504 m 16 4 d s 1466 508 m 3 1 d s 1471 510 m 3 X s 1464 531 m 23 -17 d s 1426
+ 521 m 38 10 d s 1497 516 m 2 1 d s 1504 518 m 3 1 d s 1510 520 m 5 1 d s 1517
+ 522 m 8 1 d s 1503 540 m 22 -17 d s 1464 531 m 39 9 d s 1541 550 m 22 -17 d s
+ 1503 540 m 38 10 d s 1579 560 m 23 -17 d s 1541 550 m 38 10 d s 1618 570 m 22
+ -17 d s 1579 560 m 39 10 d s 1656 579 m 22 -17 d s 1618 570 m 38 9 d s 1695 589
+ m 22 -17 d s 1656 579 m 39 10 d s 1717 572 m 15 4 d s 1735 577 m 2 X s 1740 578
+ m 2 1 d s 1733 599 m 22 -17 d s 1695 589 m 38 10 d s 1771 609 m 22 -17 d s 1733
+ 599 m 38 10 d s 1810 618 m 22 -16 d s 1771 609 m 39 9 d s 1848 628 m 22 -17 d s
+ 1810 618 m 38 10 d s 1886 638 m 22 -17 d s 1848 628 m 38 10 d s 752 372 m 22
+ -17 d s 714 362 m 38 10 d s 714 362 m 22 -17 d s 791 382 m 22 -17 d s 752 372 m
+ 39 10 d s 829 391 m 22 -17 d s 791 382 m 38 9 d s 867 401 m 22 -17 d s 829 391
+ m 38 10 d s 906 411 m 22 -17 d s 867 401 m 39 10 d s 944 421 m 22 -17 d s 906
+ 411 m 38 10 d s 982 430 m 22 -17 d s 944 421 m 38 9 d s 1021 440 m 22 -17 d s
+ 982 430 m 39 10 d s 1059 450 m 22 -17 d s 1021 440 m 38 10 d s 1097 460 m 22
+ -17 d s 1059 450 m 38 10 d s 1136 469 m 22 -16 d s 1097 460 m 39 9 d s 1174 479
+ m 22 -17 d s 1136 469 m 38 10 d s 1212 489 m 22 -17 d s 1174 479 m 38 10 d s
+ 1251 499 m 22 -17 d s 1212 489 m 39 10 d s 1289 508 m 22 -16 d s 1251 499 m 38
+ 9 d s 1327 518 m 22 -17 d s 1289 508 m 38 10 d s 1366 528 m 22 -17 d s 1327 518
+ m 39 10 d s 1404 538 m 22 -17 d s 1366 528 m 38 10 d s 1442 548 m 22 -17 d s
+ 1404 538 m 38 10 d s 1481 557 m 22 -17 d s 1442 548 m 39 9 d s 1519 567 m 22
+ -17 d s 1481 557 m 38 10 d s 1557 577 m 22 -17 d s 1519 567 m 38 10 d s 1596
+ 587 m 22 -17 d s 1557 577 m 39 10 d s 1634 596 m 22 -17 d s 1596 587 m 38 9 d s
+ 1672 606 m 23 -17 d s 1634 596 m 38 10 d s 1711 616 m 22 -17 d s 1672 606 m 39
+ 10 d s 1749 626 m 22 -17 d s 1711 616 m 38 10 d s 1787 635 m 23 -17 d s 1749
+ 626 m 38 9 d s 1826 645 m 22 -17 d s 1787 635 m 39 10 d s 1864 655 m 22 -17 d s
+ 1826 645 m 38 10 d s 730 389 m 22 -17 d s 692 379 m 38 10 d s 692 379 m 22 -17
+ d s 768 398 m 23 -16 d s 730 389 m 38 9 d s 807 408 m 22 -17 d s 768 398 m 39
+ 10 d s 845 418 m 22 -17 d s 807 408 m 38 10 d s 883 428 m 23 -17 d s 845 418 m
+ 38 10 d s 922 438 m 22 -17 d s 883 428 m 39 10 d s 960 447 m 22 -17 d s 922 438
+ m 38 9 d s 998 457 m 23 -17 d s 960 447 m 38 10 d s 1037 467 m 22 -17 d s 998
+ 457 m 39 10 d s 1075 477 m 22 -17 d s 1037 467 m 38 10 d s 1113 486 m 23 -17 d
+ s 1075 477 m 38 9 d s 1152 496 m 22 -17 d s 1113 486 m 39 10 d s 1190 506 m 22
+ -17 d s 1152 496 m 38 10 d s 1228 516 m 23 -17 d s 1190 506 m 38 10 d s 1267
+ 525 m 22 -17 d s 1228 516 m 39 9 d s 1305 535 m 22 -17 d s 1267 525 m 38 10 d s
+ 1344 545 m 22 -17 d s 1305 535 m 39 10 d s 1382 555 m 22 -17 d s 1344 545 m 38
+ 10 d s 1420 564 m 22 -16 d s 1382 555 m 38 9 d s 1459 574 m 22 -17 d s 1420 564
+ m 39 10 d s 1497 584 m 22 -17 d s 1459 574 m 38 10 d s 1535 594 m 22 -17 d s
+ 1497 584 m 38 10 d s 1574 603 m 22 -16 d s 1535 594 m 39 9 d s 1612 613 m 22
+ -17 d s 1574 603 m 38 10 d s 1650 623 m 22 -17 d s 1612 613 m 38 10 d s 1689
+ 633 m 22 -17 d s 1650 623 m 39 10 d s 1727 643 m 22 -17 d s 1689 633 m 38 10 d
+ s 1765 652 m 22 -17 d s 1727 643 m 38 9 d s 1804 662 m 22 -17 d s 1765 652 m 39
+ 10 d s 1842 672 m 22 -17 d s 1804 662 m 38 10 d s 708 406 m 22 -17 d s 670 396
+ m 38 10 d s 670 396 m 22 -17 d s 746 415 m 22 -17 d s 708 406 m 38 9 d s 785
+ 425 m 22 -17 d s 746 415 m 39 10 d s 823 435 m 22 -17 d s 785 425 m 38 10 d s
+ 861 445 m 22 -17 d s 823 435 m 38 10 d s 900 454 m 22 -16 d s 861 445 m 39 9 d
+ s 938 464 m 22 -17 d s 900 454 m 38 10 d s 976 474 m 22 -17 d s 938 464 m 38 10
+ d s 1015 484 m 22 -17 d s 976 474 m 39 10 d s 1075 477 m 206 Y s 1037 674 m 38
+ 9 d s 1037 467 m 207 Y s 1015 691 m 22 -17 d s 1015 484 m 207 Y s 1053 700 m 22
+ -17 d s 1015 691 m 38 9 d s 1113 486 m 148 Y s 1075 624 m 38 10 d s 1091 651 m
+ 22 -17 d s 1076 647 m 15 4 d s 1152 496 m 187 Y s 1113 673 m 39 10 d s 1113 634
+ m 39 Y s 1091 690 m 22 -17 d s 1091 651 m 39 Y s 1130 700 m 22 -17 d s 1091 690
+ m 39 10 d s 1168 523 m 22 -17 d s 1153 519 m 15 4 d s 1206 533 m 22 -17 d s
+ 1168 523 m 38 10 d s 1245 542 m 22 -17 d s 1206 533 m 39 9 d s 1283 552 m 22
+ -17 d s 1245 542 m 38 10 d s 1321 562 m 23 -17 d s 1283 552 m 38 10 d s 1360
+ 572 m 22 -17 d s 1321 562 m 39 10 d s 1398 581 m 22 -17 d s 1360 572 m 38 9 d s
+ 1436 591 m 23 -17 d s 1398 581 m 38 10 d s 1475 601 m 22 -17 d s 1436 591 m 39
+ 10 d s 1513 611 m 22 -17 d s 1475 601 m 38 10 d s 1551 620 m 23 -17 d s 1513
+ 611 m 38 9 d s 1590 630 m 22 -17 d s 1551 620 m 39 10 d s 1628 640 m 22 -17 d s
+ 1590 630 m 38 10 d s 1666 650 m 23 -17 d s 1628 640 m 38 10 d s 1705 659 m 22
+ -16 d s 1666 650 m 39 9 d s 1743 669 m 22 -17 d s 1705 659 m 38 10 d s 1781 679
+ m 23 -17 d s 1743 669 m 38 10 d s 1820 689 m 22 -17 d s 1781 679 m 39 10 d s
+ 686 423 m 22 -17 d s 647 413 m 39 10 d s 647 413 m 23 -17 d s 724 432 m 22 -17
+ d s 686 423 m 38 9 d s 762 442 m 23 -17 d s 724 432 m 38 10 d s 801 452 m 22
+ -17 d s 762 442 m 39 10 d s 839 462 m 22 -17 d s 801 452 m 38 10 d s 877 471 m
+ 23 -17 d s 839 462 m 38 9 d s 916 481 m 22 -17 d s 877 471 m 39 10 d s 954 491
+ m 22 -17 d s 916 481 m 38 10 d s 992 501 m 23 -17 d s 954 491 m 38 10 d s 992
+ 629 m 23 -17 d s 992 501 m 128 Y s 992 629 m 23 6 d s 1076 657 m 15 4 d s 1077
+ 672 m 14 -11 d s 1151 535 m 17 -12 d s 1184 549 m 22 -16 d s 1151 541 m 33 8 d
+ s 1223 559 m 22 -17 d s 1184 549 m 39 10 d s 1261 569 m 22 -17 d s 1223 559 m
+ 38 10 d s 1299 579 m 22 -17 d s 1261 569 m 38 10 d s 1338 588 m 22 -16 d s 1299
+ 579 m 39 9 d s 1376 598 m 22 -17 d s 1338 588 m 38 10 d s 1414 608 m 22 -17 d s
+ 1376 598 m 38 10 d s 1453 618 m 22 -17 d s 1414 608 m 39 10 d s 1491 628 m 22
+ -17 d s 1453 618 m 38 10 d s 1529 637 m 22 -17 d s 1491 628 m 38 9 d s 1568 647
+ m 22 -17 d s 1529 637 m 39 10 d s 1606 657 m 22 -17 d s 1568 647 m 38 10 d s
+ 1644 667 m 22 -17 d s 1606 657 m 38 10 d s 1683 676 m 22 -17 d s 1644 667 m 39
+ 9 d s 1721 686 m 22 -17 d s 1683 676 m 38 10 d s 1759 696 m 22 -17 d s 1721 686
+ m 38 10 d s 1798 706 m 22 -17 d s 1759 696 m 39 10 d s 664 439 m 22 -16 d s 625
+ 430 m 39 9 d s 625 430 m 22 -17 d s 702 449 m 22 -17 d s 664 439 m 38 10 d s
+ 740 459 m 22 -17 d s 702 449 m 38 10 d s 779 469 m 22 -17 d s 740 459 m 39 10 d
+ s 817 478 m 22 -16 d s 779 469 m 38 9 d s 855 488 m 22 -17 d s 817 478 m 38 10
+ d s 894 498 m 22 -17 d s 855 488 m 39 10 d s 932 508 m 22 -17 d s 894 498 m 38
+ 10 d s 970 518 m 22 -17 d s 932 508 m 38 10 d s 1031 694 m 23 Y s 992 707 m 39
+ 10 d s 992 629 m 78 Y s 970 724 m 22 -17 d s 970 518 m 206 Y s 1009 734 m 22
+ -17 d s 970 724 m 39 10 d s 1069 689 m 18 Y s 1031 697 m 38 10 d s 1047 724 m
+ 22 -17 d s 1028 719 m 19 5 d s 1162 566 m 22 -17 d s 1152 564 m 10 2 d s 1200
+ 576 m 23 -17 d s 1162 566 m 38 10 d s 1239 586 m 22 -17 d s 1200 576 m 39 10 d
+ s 1277 596 m 22 -17 d s 1239 586 m 38 10 d s 1315 605 m 23 -17 d s 1277 596 m
+ 38 9 d s 1354 615 m 22 -17 d s 1315 605 m 39 10 d s 1392 625 m 22 -17 d s 1354
+ 615 m 38 10 d s 1430 635 m 23 -17 d s 1392 625 m 38 10 d s 1469 644 m 22 -16 d
+ s 1430 635 m 39 9 d s 1507 654 m 22 -17 d s 1469 644 m 38 10 d s 1545 664 m 23
+ -17 d s 1507 654 m 38 10 d s 1584 674 m 22 -17 d s 1545 664 m 39 10 d s 1622
+ 683 m 22 -16 d s 1584 674 m 38 9 d s 1661 693 m 22 -17 d s 1622 683 m 39 10 d s
+ 1699 703 m 22 -17 d s 1661 693 m 38 10 d s 1737 713 m 22 -17 d s 1699 703 m 38
+ 10 d s 1776 723 m 22 -17 d s 1737 713 m 39 10 d s 641 434 m 2 X s 646 435 m 2 1
+ d s 651 436 m 13 3 d s 641 456 m 23 -17 d s 603 447 m 38 9 d s 603 447 m 22 -17
+ d s 664 439 m 38 10 d s 680 466 m 22 -17 d s 641 456 m 39 10 d s 702 449 m 15 4
+ d s 720 454 m 2 X s 725 455 m 3 1 d s 718 476 m 22 -17 d s 680 466 m 38 10 d s
+ 757 486 m 22 -17 d s 718 476 m 39 10 d s 795 495 m 22 -17 d s 757 486 m 38 9 d
+ s 833 505 m 22 -17 d s 795 495 m 38 10 d s 872 515 m 22 -17 d s 833 505 m 39 10
+ d s 909 502 m 3 1 d s 914 503 m 3 1 d s 919 505 m 13 3 d s 910 525 m 22 -17 d s
+ 872 515 m 38 10 d s 932 508 m 38 10 d s 948 534 m 22 -16 d s 910 525 m 38 9 d s
+ 948 534 m 21 6 d s 1152 574 m 10 -8 d s 1177 570 m 3 1 d s 1183 572 m 2 X s
+ 1188 573 m 12 3 d s 1178 593 m 22 -17 d s 1153 586 m 25 7 d s 1211 579 m 2 X s
+ 1218 581 m 3 X s 1223 582 m 6 1 d s 1231 584 m 8 2 d s 1217 603 m 22 -17 d s
+ 1178 593 m 39 10 d s 1239 586 m 12 3 d s 1258 591 m 10 2 d s 1255 613 m 22 -17
+ d s 1217 603 m 38 10 d s 1293 622 m 22 -17 d s 1255 613 m 38 9 d s 1332 632 m
+ 22 -17 d s 1293 622 m 39 10 d s 1370 642 m 22 -17 d s 1332 632 m 38 10 d s 1392
+ 625 m 38 10 d s 1408 652 m 22 -17 d s 1370 642 m 38 10 d s 1430 635 m 39 9 d s
+ 1447 661 m 22 -17 d s 1408 652 m 39 9 d s 1485 671 m 22 -17 d s 1447 661 m 38
+ 10 d s 1523 681 m 22 -17 d s 1485 671 m 38 10 d s 1562 691 m 22 -17 d s 1523
+ 681 m 39 10 d s 1592 676 m 2 X s 1604 679 m 11 3 d s 1617 682 m 5 1 d s 1600
+ 700 m 22 -17 d s 1562 691 m 38 9 d s 1622 683 m 39 10 d s 1638 710 m 23 -17 d s
+ 1600 700 m 38 10 d s 1661 693 m 38 10 d s 1677 720 m 22 -17 d s 1638 710 m 39
+ 10 d s 1699 703 m 38 10 d s 1715 730 m 22 -17 d s 1677 720 m 38 10 d s 1744 715
+ m 5 1 d s 1756 718 m 10 2 d s 1771 721 m 5 2 d s 1753 739 m 23 -16 d s 1715 730
+ m 38 9 d s 619 473 m 22 -17 d s 581 463 m 38 10 d s 581 463 m 22 -16 d s 658
+ 483 m 22 -17 d s 619 473 m 39 10 d s 696 493 m 22 -17 d s 658 483 m 38 10 d s
+ 734 503 m 23 -17 d s 696 493 m 38 10 d s 773 512 m 22 -17 d s 734 503 m 39 9 d
+ s 811 522 m 22 -17 d s 773 512 m 38 10 d s 849 532 m 23 -17 d s 811 522 m 38 10
+ d s 888 542 m 22 -17 d s 849 532 m 39 10 d s 926 551 m 22 -17 d s 888 542 m 38
+ 9 d s 964 561 m 5 -4 d s 926 551 m 38 10 d s 964 561 m 6 1 d s 1156 610 m 22
+ -17 d s 1151 609 m 5 1 d s 1194 620 m 23 -17 d s 1156 610 m 38 10 d s 1233 629
+ m 22 -16 d s 1194 620 m 39 9 d s 1271 639 m 22 -17 d s 1233 629 m 38 10 d s
+ 1310 649 m 22 -17 d s 1271 639 m 39 10 d s 1348 659 m 22 -17 d s 1310 649 m 38
+ 10 d s 1386 668 m 22 -16 d s 1348 659 m 38 9 d s 1425 678 m 22 -17 d s 1386 668
+ m 39 10 d s 1463 688 m 22 -17 d s 1425 678 m 38 10 d s 1501 698 m 22 -17 d s
+ 1463 688 m 38 10 d s 1540 708 m 22 -17 d s 1501 698 m 39 10 d s 1578 717 m 22
+ -17 d s 1540 708 m 38 9 d s 1616 727 m 22 -17 d s 1578 717 m 38 10 d s 1655 737
+ m 22 -17 d s 1616 727 m 39 10 d s 1693 747 m 22 -17 d s 1655 737 m 38 10 d s
+ 1731 756 m 22 -17 d s 1693 747 m 38 9 d s 597 490 m 22 -17 d s 559 480 m 38 10
+ d s 559 480 m 22 -17 d s 636 500 m 22 -17 d s 597 490 m 39 10 d s 674 510 m 22
+ -17 d s 636 500 m 38 10 d s 712 519 m 22 -16 d s 674 510 m 38 9 d s 751 529 m
+ 22 -17 d s 712 519 m 39 10 d s 789 539 m 22 -17 d s 751 529 m 38 10 d s 827 549
+ m 22 -17 d s 789 539 m 38 10 d s 866 558 m 22 -16 d s 827 549 m 39 9 d s 904
+ 568 m 22 -17 d s 866 558 m 38 10 d s 942 578 m 22 -17 d s 904 568 m 38 10 d s
+ 942 578 m 28 7 d s 1151 614 m 5 -4 d s 1172 637 m 22 -17 d s 1152 631 m 20 6 d
+ s 1211 646 m 22 -17 d s 1172 637 m 39 9 d s 1249 656 m 22 -17 d s 1211 646 m 38
+ 10 d s 1287 666 m 23 -17 d s 1249 656 m 38 10 d s 1326 676 m 22 -17 d s 1287
+ 666 m 39 10 d s 1364 685 m 22 -17 d s 1326 676 m 38 9 d s 1402 695 m 23 -17 d s
+ 1364 685 m 38 10 d s 1441 705 m 22 -17 d s 1402 695 m 39 10 d s 1479 715 m 22
+ -17 d s 1441 705 m 38 10 d s 1517 724 m 23 -16 d s 1479 715 m 38 9 d s 1556 734
+ m 22 -17 d s 1517 724 m 39 10 d s 1594 744 m 22 -17 d s 1556 734 m 38 10 d s
+ 1632 754 m 23 -17 d s 1594 744 m 38 10 d s 1671 763 m 22 -16 d s 1632 754 m 39
+ 9 d s 1709 773 m 22 -17 d s 1671 763 m 38 10 d s 575 507 m 22 -17 d s 537 497 m
+ 38 10 d s 537 497 m 22 -17 d s 613 517 m 23 -17 d s 575 507 m 38 10 d s 652 527
+ m 22 -17 d s 613 517 m 39 10 d s 690 536 m 22 -17 d s 652 527 m 38 9 d s 728
+ 546 m 23 -17 d s 690 536 m 38 10 d s 767 556 m 22 -17 d s 728 546 m 39 10 d s
+ 805 566 m 22 -17 d s 767 556 m 38 10 d s 843 575 m 23 -17 d s 805 566 m 38 9 d
+ s 882 585 m 22 -17 d s 843 575 m 39 10 d s 920 595 m 22 -17 d s 882 585 m 38 10
+ d s 958 605 m 12 -9 d s 920 595 m 38 10 d s 958 605 m 11 2 d s 1153 652 m 19
+ -15 d s 1189 663 m 22 -17 d s 1153 654 m 36 9 d s 1227 673 m 22 -17 d s 1189
+ 663 m 38 10 d s 1265 683 m 22 -17 d s 1227 673 m 38 10 d s 1304 693 m 22 -17 d
+ s 1265 683 m 39 10 d s 1342 702 m 22 -17 d s 1304 693 m 38 9 d s 1380 712 m 22
+ -17 d s 1342 702 m 38 10 d s 1419 722 m 22 -17 d s 1380 712 m 39 10 d s 1457
+ 732 m 22 -17 d s 1419 722 m 38 10 d s 1495 741 m 22 -17 d s 1457 732 m 38 9 d s
+ 1534 751 m 22 -17 d s 1495 741 m 39 10 d s 1572 761 m 22 -17 d s 1534 751 m 38
+ 10 d s 1610 771 m 22 -17 d s 1572 761 m 38 10 d s 1649 780 m 22 -17 d s 1610
+ 771 m 39 9 d s 1687 790 m 22 -17 d s 1649 780 m 38 10 d s 553 524 m 22 -17 d s
+ 515 514 m 38 10 d s 515 514 m 22 -17 d s 591 534 m 22 -17 d s 553 524 m 38 10 d
+ s 630 543 m 22 -16 d s 591 534 m 39 9 d s 668 553 m 22 -17 d s 630 543 m 38 10
+ d s 706 563 m 22 -17 d s 668 553 m 38 10 d s 745 573 m 22 -17 d s 706 563 m 39
+ 10 d s 783 583 m 22 -17 d s 745 573 m 38 10 d s 821 592 m 22 -17 d s 783 583 m
+ 38 9 d s 860 602 m 22 -17 d s 821 592 m 39 10 d s 898 612 m 22 -17 d s 860 602
+ m 38 10 d s 936 622 m 22 -17 d s 898 612 m 38 10 d s 936 622 m 34 8 d s 1166
+ 680 m 23 -17 d s 1151 676 m 15 4 d s 1205 690 m 22 -17 d s 1166 680 m 39 10 d s
+ 1243 700 m 22 -17 d s 1205 690 m 38 10 d s 1281 709 m 23 -16 d s 1243 700 m 38
+ 9 d s 1320 719 m 22 -17 d s 1281 709 m 39 10 d s 1358 729 m 22 -17 d s 1320 719
+ m 38 10 d s 1396 739 m 23 -17 d s 1358 729 m 38 10 d s 1435 748 m 22 -16 d s
+ 1396 739 m 39 9 d s 1473 758 m 22 -17 d s 1435 748 m 38 10 d s 1511 768 m 23
+ -17 d s 1473 758 m 38 10 d s 1550 778 m 22 -17 d s 1511 768 m 39 10 d s 1588
+ 788 m 22 -17 d s 1550 778 m 38 10 d s 1627 797 m 22 -17 d s 1588 788 m 39 9 d s
+ 1665 807 m 22 -17 d s 1627 797 m 38 10 d s 531 541 m 22 -17 d s 492 531 m 39 10
+ d s 492 531 m 23 -17 d s 569 551 m 22 -17 d s 531 541 m 38 10 d s 607 560 m 23
+ -17 d s 569 551 m 38 9 d s 646 570 m 22 -17 d s 607 560 m 39 10 d s 684 580 m
+ 22 -17 d s 646 570 m 38 10 d s 723 590 m 22 -17 d s 684 580 m 39 10 d s 761 599
+ m 22 -16 d s 723 590 m 38 9 d s 799 609 m 22 -17 d s 761 599 m 38 10 d s 838
+ 619 m 22 -17 d s 799 609 m 39 10 d s 876 629 m 22 -17 d s 838 619 m 38 10 d s
+ 914 638 m 22 -16 d s 876 629 m 38 9 d s 953 648 m 17 -13 d s 914 638 m 39 10 d
+ s 953 648 m 17 5 d s 953 648 m 12 -9 d s 1075 679 m 16 4 d s 1144 697 m 22 -17
+ d s 1136 695 m 8 2 d s 1183 707 m 22 -17 d s 1144 697 m 39 10 d s 1221 717 m 22
+ -17 d s 1183 707 m 38 10 d s 1259 726 m 22 -17 d s 1221 717 m 38 9 d s 1298 736
+ m 22 -17 d s 1259 726 m 39 10 d s 1336 746 m 22 -17 d s 1298 736 m 38 10 d s
+ 1374 756 m 22 -17 d s 1336 746 m 38 10 d s 1413 765 m 22 -17 d s 1374 756 m 39
+ 9 d s 1451 775 m 22 -17 d s 1413 765 m 38 10 d s 1489 785 m 22 -17 d s 1451 775
+ m 38 10 d s 1528 795 m 22 -17 d s 1489 785 m 39 10 d s 1566 804 m 22 -16 d s
+ 1528 795 m 38 9 d s 1604 814 m 23 -17 d s 1566 804 m 38 10 d s 1643 824 m 22
+ -17 d s 1604 814 m 39 10 d s 492 531 m s 509 558 m 22 -17 d s 470 548 m 39 10 d
+ s 470 548 m 22 -17 d s 547 568 m 22 -17 d s 509 558 m 38 10 d s 585 577 m 22
+ -17 d s 547 568 m 38 9 d s 624 587 m 22 -17 d s 585 577 m 39 10 d s 662 597 m
+ 22 -17 d s 624 587 m 38 10 d s 700 607 m 23 -17 d s 662 597 m 38 10 d s 739 616
+ m 22 -17 d s 700 607 m 39 9 d s 777 626 m 22 -17 d s 739 616 m 38 10 d s 815
+ 636 m 23 -17 d s 777 626 m 38 10 d s 854 646 m 22 -17 d s 815 636 m 39 10 d s
+ 892 655 m 22 -17 d s 854 646 m 38 9 d s 930 665 m 23 -17 d s 892 655 m 38 10 d
+ s 930 665 m 39 10 d s 930 665 m 9 -6 d s 941 657 m 6 -5 d s 1084 704 m 15 -12 d
+ s 1068 700 m 16 4 d s 1122 714 m 22 -17 d s 1084 704 m 38 10 d s 1160 724 m 23
+ -17 d s 1122 714 m 38 10 d s 1199 733 m 22 -16 d s 1160 724 m 39 9 d s 1237 743
+ m 22 -17 d s 1199 733 m 38 10 d s 1276 753 m 22 -17 d s 1237 743 m 39 10 d s
+ 1314 763 m 22 -17 d s 1276 753 m 38 10 d s 1352 773 m 22 -17 d s 1314 763 m 38
+ 10 d s 1391 782 m 22 -17 d s 1352 773 m 39 9 d s 1429 792 m 22 -17 d s 1391 782
+ m 38 10 d s 1467 802 m 22 -17 d s 1429 792 m 38 10 d s 1506 812 m 22 -17 d s
+ 1467 802 m 39 10 d s 1544 821 m 22 -17 d s 1506 812 m 38 9 d s 1582 831 m 22
+ -17 d s 1544 821 m 38 10 d s 1621 841 m 22 -17 d s 1582 831 m 39 10 d s 487 575
+ m 22 -17 d s 448 565 m 39 10 d s 448 565 m 22 -17 d s 525 584 m 22 -16 d s 487
+ 575 m 38 9 d s 563 594 m 22 -17 d s 525 584 m 38 10 d s 602 604 m 22 -17 d s
+ 563 594 m 39 10 d s 640 614 m 22 -17 d s 602 604 m 38 10 d s 678 623 m 22 -16 d
+ s 640 614 m 38 9 d s 717 633 m 22 -17 d s 678 623 m 39 10 d s 755 643 m 22 -17
+ d s 717 633 m 38 10 d s 793 653 m 22 -17 d s 755 643 m 38 10 d s 832 663 m 22
+ -17 d s 793 653 m 39 10 d s 870 672 m 22 -17 d s 832 663 m 38 9 d s 908 682 m
+ 22 -17 d s 870 672 m 38 10 d s 947 692 m 22 -17 d s 908 682 m 39 10 d s 916 676
+ m 5 -3 d s 926 669 m 4 -4 d s 947 692 m 23 6 d s 1062 721 m 22 -17 d s 1055 719
+ m 7 2 d s 1100 731 m 22 -17 d s 1062 721 m 38 10 d s 1138 741 m 22 -17 d s 1100
+ 731 m 38 10 d s 1177 750 m 22 -17 d s 1138 741 m 39 9 d s 1215 760 m 22 -17 d s
+ 1177 750 m 38 10 d s 1253 770 m 23 -17 d s 1215 760 m 38 10 d s 1292 780 m 22
+ -17 d s 1253 770 m 39 10 d s 1330 789 m 22 -16 d s 1292 780 m 38 9 d s 1368 799
+ m 23 -17 d s 1330 789 m 38 10 d s 1407 809 m 22 -17 d s 1368 799 m 39 10 d s
+ 1445 819 m 22 -17 d s 1407 809 m 38 10 d s 1483 828 m 23 -16 d s 1445 819 m 38
+ 9 d s 1522 838 m 22 -17 d s 1483 828 m 39 10 d s 1560 848 m 22 -17 d s 1522 838
+ m 38 10 d s 1598 858 m 23 -17 d s 1560 848 m 38 10 d s 464 592 m 23 -17 d s 426
+ 582 m 38 10 d s 426 582 m 22 -17 d s 503 601 m 22 -17 d s 464 592 m 39 9 d s
+ 541 611 m 22 -17 d s 503 601 m 38 10 d s 579 621 m 23 -17 d s 541 611 m 38 10 d
+ s 618 631 m 22 -17 d s 579 621 m 39 10 d s 656 640 m 22 -17 d s 618 631 m 38 9
+ d s 694 650 m 23 -17 d s 656 640 m 38 10 d s 733 660 m 22 -17 d s 694 650 m 39
+ 10 d s 771 670 m 22 -17 d s 733 660 m 38 10 d s 809 679 m 23 -16 d s 771 670 m
+ 38 9 d s 848 689 m 22 -17 d s 809 679 m 39 10 d s 886 699 m 22 -17 d s 848 689
+ m 38 10 d s 924 709 m 23 -17 d s 886 699 m 38 10 d s 963 718 m 7 -5 d s 924 709
+ m 39 9 d s 963 718 m 7 2 d s 1040 738 m 22 -17 d s 1011 731 m 29 7 d s 1078 748
+ m 22 -17 d s 1040 738 m 38 10 d s 1116 758 m 22 -17 d s 1078 748 m 38 10 d s
+ 1155 767 m 22 -17 d s 1116 758 m 39 9 d s 1193 777 m 22 -17 d s 1155 767 m 38
+ 10 d s 1231 787 m 22 -17 d s 1193 777 m 38 10 d s 1270 797 m 22 -17 d s 1231
+ 787 m 39 10 d s 1308 806 m 22 -17 d s 1270 797 m 38 9 d s 1346 816 m 22 -17 d s
+ 1308 806 m 38 10 d s 1385 826 m 22 -17 d s 1346 816 m 39 10 d s 1423 836 m 22
+ -17 d s 1385 826 m 38 10 d s 1461 845 m 22 -17 d s 1423 836 m 38 9 d s 1500 855
+ m 22 -17 d s 1461 845 m 39 10 d s 1538 865 m 22 -17 d s 1500 855 m 38 10 d s
+ 1576 875 m 22 -17 d s 1538 865 m 38 10 d s 442 609 m 22 -17 d s 404 599 m 38 10
+ d s 404 599 m 22 -17 d s 481 618 m 22 -17 d s 442 609 m 39 9 d s 519 628 m 22
+ -17 d s 481 618 m 38 10 d s 557 638 m 22 -17 d s 519 628 m 38 10 d s 596 648 m
+ 22 -17 d s 557 638 m 39 10 d s 634 657 m 22 -17 d s 596 648 m 38 9 d s 672 667
+ m 22 -17 d s 634 657 m 38 10 d s 711 677 m 22 -17 d s 672 667 m 39 10 d s 749
+ 687 m 22 -17 d s 711 677 m 38 10 d s 787 696 m 22 -17 d s 749 687 m 38 9 d s
+ 826 706 m 22 -17 d s 787 696 m 39 10 d s 864 716 m 22 -17 d s 826 706 m 38 10 d
+ s 902 726 m 22 -17 d s 864 716 m 38 10 d s 941 735 m 22 -17 d s 902 726 m 39 9
+ d s 979 745 m 18 -13 d s 941 735 m 38 10 d s 1017 755 m 23 -17 d s 979 745 m 38
+ 10 d s 1056 765 m 22 -17 d s 1017 755 m 39 10 d s 1094 774 m 22 -16 d s 1056
+ 765 m 38 9 d s 1132 784 m 23 -17 d s 1094 774 m 38 10 d s 1171 794 m 22 -17 d s
+ 1132 784 m 39 10 d s 1209 804 m 22 -17 d s 1171 794 m 38 10 d s 1247 813 m 23
+ -16 d s 1209 804 m 38 9 d s 1286 823 m 22 -17 d s 1247 813 m 39 10 d s 1324 833
+ m 22 -17 d s 1286 823 m 38 10 d s 1362 843 m 23 -17 d s 1324 833 m 38 10 d s
+ 1401 853 m 22 -17 d s 1362 843 m 39 10 d s 1439 862 m 22 -17 d s 1401 853 m 38
+ 9 d s 1500 855 m 158 Y s 1461 1003 m 39 10 d s 1461 845 m 158 Y s 1439 1020 m
+ 22 -17 d s 1439 862 m 158 Y s 1477 1030 m 23 -17 d s 1439 1020 m 38 10 d s 1538
+ 865 m 79 Y s 1500 934 m 38 10 d s 1516 961 m 22 -17 d s 1498 956 m 18 5 d s
+ 1576 875 m 108 Y s 1538 973 m 38 10 d s 1538 944 m 29 Y s 1516 990 m 22 -17 d s
+ 1516 961 m 29 Y s 1554 1000 m 22 -17 d s 1516 990 m 38 10 d s 420 625 m 22 -16
+ d s 382 616 m 38 9 d s 382 616 m 22 -17 d s 458 635 m 23 -17 d s 420 625 m 38
+ 10 d s 497 645 m 22 -17 d s 458 635 m 39 10 d s 535 655 m 22 -17 d s 497 645 m
+ 38 10 d s 573 664 m 23 -16 d s 535 655 m 38 9 d s 612 674 m 22 -17 d s 573 664
+ m 39 10 d s 650 684 m 22 -17 d s 612 674 m 38 10 d s 689 694 m 22 -17 d s 650
+ 684 m 39 10 d s 727 703 m 22 -16 d s 689 694 m 38 9 d s 765 713 m 22 -17 d s
+ 727 703 m 38 10 d s 804 723 m 22 -17 d s 765 713 m 39 10 d s 842 733 m 22 -17 d
+ s 804 723 m 38 10 d s 880 743 m 22 -17 d s 842 733 m 38 10 d s 919 752 m 22 -17
+ d s 880 743 m 39 9 d s 957 762 m 22 -17 d s 919 752 m 38 10 d s 995 772 m 22
+ -17 d s 957 762 m 38 10 d s 1034 782 m 22 -17 d s 995 772 m 39 10 d s 1072 791
+ m 22 -17 d s 1034 782 m 38 9 d s 1110 801 m 22 -17 d s 1072 791 m 38 10 d s
+ 1149 811 m 22 -17 d s 1110 801 m 39 10 d s 1187 821 m 22 -17 d s 1149 811 m 38
+ 10 d s 1225 830 m 22 -17 d s 1187 821 m 38 9 d s 1264 840 m 22 -17 d s 1225 830
+ m 39 10 d s 1302 850 m 22 -17 d s 1264 840 m 38 10 d s 1340 860 m 22 -17 d s
+ 1302 850 m 38 10 d s 1379 869 m 22 -16 d s 1340 860 m 39 9 d s 1417 879 m 22
+ -17 d s 1379 869 m 38 10 d s 1417 958 m 22 -17 d s 1417 879 m 79 Y s 1417 958 m
+ 23 6 d s 1498 966 m 18 4 d s 1499 984 m 17 -14 d s 1554 1000 m 20 Y s 1516 1010
+ m 38 10 d s 1516 990 m 20 Y s 1494 1027 m 22 -17 d s 1494 1017 m 10 Y s 1532
+ 1037 m 22 -17 d s 1494 1027 m 38 10 d s 398 642 m 22 -17 d s 360 633 m 38 9 d s
+ 360 633 m 22 -17 d s 436 652 m 22 -17 d s 398 642 m 38 10 d s 475 662 m 22 -17
+ d s 436 652 m 39 10 d s 513 672 m 22 -17 d s 475 662 m 38 10 d s 551 681 m 22
+ -17 d s 513 672 m 38 9 d s 590 691 m 22 -17 d s 551 681 m 39 10 d s 628 701 m
+ 22 -17 d s 590 691 m 38 10 d s 666 711 m 23 -17 d s 628 701 m 38 10 d s 705 720
+ m 22 -17 d s 666 711 m 39 9 d s 743 730 m 22 -17 d s 705 720 m 38 10 d s 781
+ 740 m 23 -17 d s 743 730 m 38 10 d s 820 750 m 22 -17 d s 781 740 m 39 10 d s
+ 858 759 m 22 -16 d s 820 750 m 38 9 d s 896 769 m 23 -17 d s 858 759 m 38 10 d
+ s 935 779 m 22 -17 d s 896 769 m 39 10 d s 973 789 m 22 -17 d s 935 779 m 38 10
+ d s 1011 798 m 23 -16 d s 973 789 m 38 9 d s 1050 808 m 22 -17 d s 1011 798 m
+ 39 10 d s 1088 818 m 22 -17 d s 1050 808 m 38 10 d s 1126 828 m 23 -17 d s 1088
+ 818 m 38 10 d s 1165 838 m 22 -17 d s 1126 828 m 39 10 d s 1203 847 m 22 -17 d
+ s 1165 838 m 38 9 d s 1242 857 m 22 -17 d s 1203 847 m 39 10 d s 1280 867 m 22
+ -17 d s 1242 857 m 38 10 d s 1318 877 m 22 -17 d s 1280 867 m 38 10 d s 1357
+ 886 m 22 -17 d s 1318 877 m 39 9 d s 1395 896 m 22 -17 d s 1357 886 m 38 10 d s
+ 1395 955 m 22 -17 d s 1395 896 m 59 Y s 1433 965 m 3 -2 d s 1395 955 m 38 10 d
+ s 376 659 m 22 -17 d s 337 649 m 39 10 d s 337 649 m 23 -16 d s 414 669 m 22
+ -17 d s 376 659 m 38 10 d s 453 679 m 22 -17 d s 414 669 m 39 10 d s 513 672 m
+ 787 Y s 475 1450 m 38 9 d s 475 662 m 788 Y s 453 1467 m 22 -17 d s 453 679 m
+ 788 Y s 491 1476 m 22 -17 d s 453 1467 m 38 9 d s 551 681 m 867 Y s 513 1538 m
+ 38 10 d s 513 1459 m 79 Y s 491 1555 m 22 -17 d s 491 1476 m 79 Y s 529 1565 m
+ 22 -17 d s 491 1555 m 38 10 d s 590 691 m 788 Y s 551 1469 m 39 10 d s 568 1496
+ m 22 -17 d s 552 1492 m 16 4 d s 606 718 m 22 -17 d s 591 714 m 15 4 d s 644
+ 728 m 22 -17 d s 606 718 m 38 10 d s 683 737 m 22 -17 d s 644 728 m 39 9 d s
+ 721 747 m 22 -17 d s 683 737 m 38 10 d s 759 757 m 22 -17 d s 721 747 m 38 10 d
+ s 798 767 m 22 -17 d s 759 757 m 39 10 d s 836 776 m 22 -17 d s 798 767 m 38 9
+ d s 874 786 m 22 -17 d s 836 776 m 38 10 d s 913 796 m 22 -17 d s 874 786 m 39
+ 10 d s 951 806 m 22 -17 d s 913 796 m 38 10 d s 989 815 m 22 -17 d s 951 806 m
+ 38 9 d s 1028 825 m 22 -17 d s 989 815 m 39 10 d s 1066 835 m 22 -17 d s 1028
+ 825 m 38 10 d s 1104 845 m 22 -17 d s 1066 835 m 38 10 d s 1143 854 m 22 -16 d
+ s 1104 845 m 39 9 d s 1181 864 m 22 -17 d s 1143 854 m 38 10 d s 1219 874 m 23
+ -17 d s 1181 864 m 38 10 d s 1258 884 m 22 -17 d s 1219 874 m 39 10 d s 1296
+ 893 m 22 -16 d s 1258 884 m 38 9 d s 1334 903 m 23 -17 d s 1296 893 m 38 10 d s
+ 1373 913 m 22 -17 d s 1334 903 m 39 10 d s 1373 913 m 23 6 d s 337 649 m cl s
+ 354 676 m 22 -17 d s 315 666 m 39 10 d s 315 666 m 22 -17 d s 392 686 m 22 -17
+ d s 354 676 m 38 10 d s 430 696 m 23 -17 d s 392 686 m 38 10 d s 453 1536 m 38
+ 9 d s 453 1467 m 69 Y s 430 1552 m 23 -16 d s 430 696 m 856 Y s 469 1562 m 22
+ -17 d s 430 1552 m 39 10 d s 568 1496 m 226 Y s 529 1713 m 39 9 d s 529 1565 m
+ 148 Y s 507 1730 m 22 -17 d s 507 1559 m 171 Y s 545 1739 m 23 -17 d s 507 1730
+ m 38 9 d s 589 730 m 17 -12 d s 622 744 m 22 -16 d s 589 736 m 33 8 d s 660 754
+ m 23 -17 d s 622 744 m 38 10 d s 699 764 m 22 -17 d s 660 754 m 39 10 d s 737
+ 774 m 22 -17 d s 699 764 m 38 10 d s 775 783 m 23 -16 d s 737 774 m 38 9 d s
+ 814 793 m 22 -17 d s 775 783 m 39 10 d s 852 803 m 22 -17 d s 814 793 m 38 10 d
+ s 890 813 m 23 -17 d s 852 803 m 38 10 d s 929 823 m 22 -17 d s 890 813 m 39 10
+ d s 967 832 m 22 -17 d s 929 823 m 38 9 d s 1006 842 m 22 -17 d s 967 832 m 39
+ 10 d s 1044 852 m 22 -17 d s 1006 842 m 38 10 d s 1082 862 m 22 -17 d s 1044
+ 852 m 38 10 d s 1121 871 m 22 -17 d s 1082 862 m 39 9 d s 1159 881 m 22 -17 d s
+ 1121 871 m 38 10 d s 1197 891 m 22 -17 d s 1159 881 m 38 10 d s 1236 901 m 22
+ -17 d s 1197 891 m 39 10 d s 1274 910 m 22 -17 d s 1236 901 m 38 9 d s 1312 920
+ m 22 -17 d s 1274 910 m 38 10 d s 1351 930 m 22 -17 d s 1312 920 m 39 10 d s
+ 1389 940 m 5 -5 d s 1351 930 m 38 10 d s 1389 940 m 5 1 d s 332 693 m 22 -17 d
+ s 293 683 m 39 10 d s 293 683 m 22 -17 d s 370 703 m 22 -17 d s 332 693 m 38 10
+ d s 408 713 m 22 -17 d s 370 703 m 38 10 d s 408 1530 m 22 -17 d s 408 713 m
+ 817 Y s 408 1530 m 23 6 d s 485 1658 m 22 -17 d s 485 1549 m 109 Y s 485 1658 m
+ 20 5 d s 600 761 m 22 -17 d s 590 759 m 10 2 d s 638 771 m 22 -17 d s 600 761 m
+ 38 10 d s 677 781 m 22 -17 d s 638 771 m 39 10 d s 715 791 m 22 -17 d s 677 781
+ m 38 10 d s 753 800 m 22 -17 d s 715 791 m 38 9 d s 792 810 m 22 -17 d s 753
+ 800 m 39 10 d s 830 820 m 22 -17 d s 792 810 m 38 10 d s 868 830 m 22 -17 d s
+ 830 820 m 38 10 d s 907 839 m 22 -16 d s 868 830 m 39 9 d s 945 849 m 22 -17 d
+ s 907 839 m 38 10 d s 983 859 m 23 -17 d s 945 849 m 38 10 d s 1022 869 m 22
+ -17 d s 983 859 m 39 10 d s 1060 878 m 22 -16 d s 1022 869 m 38 9 d s 1098 888
+ m 23 -17 d s 1060 878 m 38 10 d s 1137 898 m 22 -17 d s 1098 888 m 39 10 d s
+ 1175 908 m 22 -17 d s 1137 898 m 38 10 d s 1213 918 m 23 -17 d s 1175 908 m 38
+ 10 d s 1252 927 m 22 -17 d s 1213 918 m 39 9 d s 1290 937 m 22 -17 d s 1252 927
+ m 38 10 d s 1328 947 m 23 -17 d s 1290 937 m 38 10 d s 1367 957 m 22 -17 d s
+ 1328 947 m 39 10 d s 1405 966 m 8 -6 d s 1367 957 m 38 9 d s 1405 966 m 36 9 d
+ s 293 683 m cl s 309 710 m 23 -17 d s 271 700 m 38 10 d s 271 700 m 22 -17 d s
+ 348 720 m 22 -17 d s 309 710 m 39 10 d s 386 729 m 22 -16 d s 348 720 m 38 9 d
+ s 386 729 m 22 6 d s 590 769 m 10 -8 d s 616 788 m 22 -17 d s 591 782 m 25 6 d
+ s 655 798 m 22 -17 d s 616 788 m 39 10 d s 693 808 m 22 -17 d s 655 798 m 38 10
+ d s 731 817 m 22 -17 d s 693 808 m 38 9 d s 770 827 m 22 -17 d s 731 817 m 39
+ 10 d s 808 837 m 22 -17 d s 770 827 m 38 10 d s 846 847 m 22 -17 d s 808 837 m
+ 38 10 d s 885 856 m 22 -17 d s 846 847 m 39 9 d s 923 866 m 22 -17 d s 885 856
+ m 38 10 d s 961 876 m 22 -17 d s 923 866 m 38 10 d s 1000 886 m 22 -17 d s 961
+ 876 m 39 10 d s 1038 895 m 22 -17 d s 1000 886 m 38 9 d s 1076 905 m 22 -17 d s
+ 1038 895 m 38 10 d s 1115 915 m 22 -17 d s 1076 905 m 39 10 d s 1153 925 m 22
+ -17 d s 1115 915 m 38 10 d s 1191 934 m 22 -16 d s 1153 925 m 38 9 d s 1230 944
+ m 22 -17 d s 1191 934 m 39 10 d s 1268 954 m 22 -17 d s 1230 944 m 38 10 d s
+ 1323 946 m 3 X s 1306 964 m 22 -17 d s 1268 954 m 38 10 d s 1345 973 m 22 -16 d
+ s 1306 964 m 39 9 d s 1383 983 m 22 -17 d s 1345 973 m 38 10 d s 1438 975 m 3 X
+ s 1421 993 m 20 -15 d s 1383 983 m 38 10 d s 287 727 m 22 -17 d s 249 717 m 38
+ 10 d s 249 717 m 22 -17 d s 326 737 m 22 -17 d s 287 727 m 39 10 d s 364 746 m
+ 22 -17 d s 326 737 m 38 9 d s 402 756 m 5 -4 d s 364 746 m 38 10 d s 402 756 m
+ 5 1 d s 594 805 m 22 -17 d s 589 804 m 5 1 d s 632 815 m 23 -17 d s 594 805 m
+ 38 10 d s 671 824 m 22 -16 d s 632 815 m 39 9 d s 709 834 m 22 -17 d s 671 824
+ m 38 10 d s 747 844 m 23 -17 d s 709 834 m 38 10 d s 709 834 m 17 -13 d s 786
+ 854 m 22 -17 d s 747 844 m 39 10 d s 824 863 m 22 -16 d s 786 854 m 38 9 d s
+ 862 873 m 23 -17 d s 824 863 m 38 10 d s 901 883 m 22 -17 d s 862 873 m 39 10 d
+ s 939 893 m 22 -17 d s 901 883 m 38 10 d s 977 903 m 23 -17 d s 939 893 m 38 10
+ d s 1016 912 m 22 -17 d s 977 903 m 39 9 d s 1054 922 m 22 -17 d s 1016 912 m
+ 38 10 d s 1092 932 m 23 -17 d s 1054 922 m 38 10 d s 1131 942 m 22 -17 d s 1092
+ 932 m 39 10 d s 1169 951 m 22 -17 d s 1131 942 m 38 9 d s 1208 961 m 22 -17 d s
+ 1169 951 m 39 10 d s 1246 971 m 22 -17 d s 1208 961 m 38 10 d s 1284 981 m 22
+ -17 d s 1246 971 m 38 10 d s 1323 990 m 22 -17 d s 1284 981 m 39 9 d s 1361
+ 1000 m 22 -17 d s 1323 990 m 38 10 d s 1399 1010 m 22 -17 d s 1361 1000 m 38 10
+ d s 249 717 m cl s 265 744 m 22 -17 d s 227 734 m 38 10 d s 227 734 m 22 -17 d
+ s 303 754 m 23 -17 d s 265 744 m 38 10 d s 342 763 m 22 -17 d s 303 754 m 39 9
+ d s 380 773 m 22 -17 d s 342 763 m 38 10 d s 380 773 m 28 7 d s 589 809 m 5 -4
+ d s 610 832 m 22 -17 d s 590 826 m 20 6 d s 649 841 m 22 -17 d s 610 832 m 39 9
+ d s 687 851 m 22 -17 d s 649 841 m 38 10 d s 725 861 m 22 -17 d s 687 851 m 38
+ 10 d s 764 871 m 22 -17 d s 725 861 m 39 10 d s 802 880 m 22 -17 d s 764 871 m
+ 38 9 d s 840 890 m 22 -17 d s 802 880 m 38 10 d s 879 900 m 22 -17 d s 840 890
+ m 39 10 d s 917 910 m 22 -17 d s 879 900 m 38 10 d s 955 919 m 22 -16 d s 917
+ 910 m 38 9 d s 994 929 m 22 -17 d s 955 919 m 39 10 d s 1032 939 m 22 -17 d s
+ 994 929 m 38 10 d s 1070 949 m 22 -17 d s 1032 939 m 38 10 d s 1109 958 m 22
+ -16 d s 1070 949 m 39 9 d s 1147 968 m 22 -17 d s 1109 958 m 38 10 d s 1185 978
+ m 23 -17 d s 1147 968 m 38 10 d s 1224 988 m 22 -17 d s 1185 978 m 39 10 d s
+ 1279 979 m 3 1 d s 1262 998 m 22 -17 d s 1224 988 m 38 10 d s 1300 1007 m 23
+ -17 d s 1262 998 m 38 9 d s 1339 1017 m 22 -17 d s 1300 1007 m 39 10 d s 1377
+ 1027 m 22 -17 d s 1339 1017 m 38 10 d s [4 8] 0 sd 227 931 m 180 46 d s 589
+ 1023 m 788 201 d s 227 1128 m 180 46 d s 589 1220 m 788 201 d s 227 1325 m 180
+ 46 d s 589 1417 m 788 201 d s 227 1522 m 258 66 d s 566 1608 m 811 207 d s 227
+ 1719 m 1150 293 d s [] 0 sd 227 734 m s 758 869 m 44 11 d s 979 925 m 111 29 d
+ s 1244 993 m 133 34 d s 1377 1027 m 1014 Y s 227 1748 m 1150 293 d s 227 734 m
+ 1014 Y s [4 8] 0 sd 1377 1224 m 664 -507 d s 1377 1421 m 664 -507 d s 1377 1618
+ m 664 -507 d s 1377 1815 m 664 -508 d s 1377 2012 m 664 -508 d s [] 0 sd 1377
+ 1027 m s 1437 981 m 3 -3 d s 1619 842 m 7 -5 d s 1709 773 m s 1951 589 m 7 -6 d
+ s 2041 520 m 1014 Y s 1377 2041 m 664 -507 d s 227 734 m 664 -507 d s 891 227 m
+ 1014 Y s 227 1748 m 664 -507 d s 227 734 m 1014 Y s 891 227 m 1150 293 d s 2041
+ 520 m 1014 Y s 891 1241 m 1150 293 d s 891 1241 m cl s 891 227 m 1150 293 d s
+ 891 193 m 34 Y s 914 216 m 17 Y s 937 222 m 17 Y s 960 227 m 17 Y s 983 233 m
+ 17 Y s 1006 222 m 34 Y s 1029 245 m 17 Y s 1052 251 m 17 Y s 1075 257 m 17 Y s
+ 1098 262 m 18 Y s 1121 251 m 34 Y s 1144 274 m 17 Y s 1167 280 m 17 Y s 1190
+ 286 m 17 Y s 1213 292 m 17 Y s 1236 281 m 34 Y s 1259 303 m 18 Y s 1282 309 m
+ 17 Y s 1305 315 m 17 Y s 1328 321 m 17 Y s 1351 310 m 34 Y s 1374 333 m 17 Y s
+ 1397 339 m 17 Y s 1420 344 m 18 Y s 1443 350 m 17 Y s 1466 339 m 34 Y s 1489
+ 362 m 17 Y s 1512 368 m 17 Y s 1535 374 m 17 Y s 1558 380 m 17 Y s 1581 368 m
+ 34 Y s 1604 391 m 17 Y s 1627 397 m 17 Y s 1650 403 m 17 Y s 1673 409 m 17 Y s
+ 1696 398 m 34 Y s 1719 421 m 17 Y s 1742 426 m 17 Y s 1765 432 m 17 Y s 1788
+ 438 m 17 Y s 1811 427 m 34 Y s 1834 450 m 17 Y s 1857 456 m 17 Y s 1880 462 m
+ 17 Y s 1903 467 m 17 Y s 1926 456 m 34 Y s 1949 479 m 17 Y s 1972 485 m 17 Y s
+ 1995 491 m 17 Y s 2018 497 m 17 Y s 2041 486 m 34 Y s 893 174 m -4 -2 d -3 -5 d
+ -2 -7 d -5 Y 2 -7 d 3 -5 d 4 -1 d 3 X 5 1 d 3 5 d 1 7 d 5 Y -1 7 d -3 5 d -5 2
+ d -3 X cl s 994 203 m -5 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -4 d 5 -2 d 3 X 4 2
+ d 3 4 d 2 8 d 4 Y -2 8 d -3 4 d -4 2 d -3 X cl s 1018 174 m -2 -1 d 2 -2 d 1 2
+ d -1 1 d cl s 1034 197 m 3 1 d 5 5 d -32 Y s 1109 232 m -5 -1 d -3 -5 d -2 -8 d
+ -4 Y 2 -8 d 3 -4 d 5 -2 d 3 X 4 2 d 3 4 d 2 8 d 4 Y -2 8 d -3 5 d -4 1 d -3 X
+ cl s 1133 203 m -2 -1 d 2 -2 d 1 2 d -1 1 d cl s 1146 225 m 1 Y 2 3 d 1 2 d 3 1
+ d 6 X 3 -1 d 2 -2 d 1 -3 d -3 Y -1 -3 d -3 -5 d -15 -15 d 21 X s 1224 261 m -5
+ -1 d -3 -5 d -2 -7 d -5 Y 2 -7 d 3 -5 d 5 -1 d 3 X 4 1 d 3 5 d 2 7 d 5 Y -2 7 d
+ -3 5 d -4 1 d -3 X cl s 1248 233 m -2 -2 d 2 -1 d 1 1 d -1 2 d cl s 1263 261 m
+ 17 X -10 -12 d 5 X 3 -1 d 2 -2 d 1 -4 d -3 Y -1 -5 d -4 -3 d -4 -1 d -5 X -4 1
+ d -2 2 d -1 3 d s 1339 291 m -5 -2 d -3 -4 d -1 -8 d -5 Y 1 -7 d 3 -5 d 5 -1 d
+ 3 X 4 1 d 3 5 d 2 7 d 5 Y -2 8 d -3 4 d -4 2 d -3 X cl s 1363 262 m -2 -2 d 2
+ -1 d 1 1 d -1 2 d cl s 1390 291 m -15 -22 d 23 X s 1390 291 m -32 Y s 1454 320
+ m -5 -2 d -3 -4 d -1 -8 d -4 Y 1 -8 d 3 -4 d 5 -2 d 3 X 4 2 d 3 4 d 2 8 d 4 Y
+ -2 8 d -3 4 d -4 2 d -3 X cl s 1478 291 m -2 -1 d 2 -2 d 1 2 d -1 1 d cl s 1508
+ 320 m -15 X -2 -14 d 2 2 d 4 1 d 5 X 5 -1 d 3 -3 d 1 -5 d -3 Y -1 -4 d -3 -3 d
+ -5 -2 d -5 X -4 2 d -2 1 d -1 3 d s 1569 349 m -5 -1 d -3 -5 d -1 -7 d -5 Y 1
+ -8 d 3 -4 d 5 -2 d 3 X 4 2 d 3 4 d 2 8 d 5 Y -2 7 d -3 5 d -4 1 d -3 X cl s
+ 1593 320 m -2 -1 d 2 -2 d 1 2 d -1 1 d cl s 1625 345 m -2 3 d -4 1 d -3 X -5 -1
+ d -3 -5 d -2 -7 d -8 Y 2 -6 d 3 -3 d 5 -2 d 1 X 5 2 d 3 3 d 1 5 d 1 Y -1 5 d -3
+ 3 d -5 1 d -1 X -5 -1 d -3 -3 d -2 -5 d s 1684 378 m -5 -1 d -3 -5 d -1 -7 d -5
+ Y 1 -7 d 3 -5 d 5 -1 d 3 X 4 1 d 3 5 d 2 7 d 5 Y -2 7 d -3 5 d -4 1 d -3 X cl s
+ 1708 350 m -2 -2 d 2 -1 d 1 1 d -1 2 d cl s 1741 378 m -15 -31 d s 1720 378 m
+ 21 X s 1799 408 m -5 -2 d -3 -4 d -1 -8 d -4 Y 1 -8 d 3 -4 d 5 -2 d 3 X 4 2 d 3
+ 4 d 2 8 d 4 Y -2 8 d -3 4 d -4 2 d -3 X cl s 1823 379 m -2 -1 d 2 -2 d 1 2 d -1
+ 1 d cl s 1843 408 m -5 -2 d -1 -3 d -3 Y 1 -3 d 3 -1 d 6 -2 d 5 -1 d 3 -3 d 1
+ -3 d -5 Y -1 -3 d -2 -1 d -4 -2 d -6 X -5 2 d -1 1 d -2 3 d 5 Y 2 3 d 3 3 d 4 1
+ d 6 2 d 3 1 d 2 3 d 3 Y -2 3 d -4 2 d -6 X cl s 1914 437 m -5 -1 d -3 -5 d -1
+ -8 d -4 Y 1 -8 d 3 -4 d 5 -2 d 3 X 4 2 d 3 4 d 2 8 d 4 Y -2 8 d -3 5 d -4 1 d
+ -3 X cl s 1938 408 m -2 -1 d 2 -2 d 1 2 d -1 1 d cl s 1970 426 m -2 -4 d -3 -3
+ d -4 -2 d -2 X -4 2 d -3 3 d -2 4 d 2 Y 2 5 d 3 3 d 4 1 d 2 X 4 -1 d 3 -3 d 2
+ -7 d -7 Y -2 -8 d -3 -4 d -4 -2 d -3 X -5 2 d -1 3 d s 2039 460 m 3 2 d 5 4 d
+ -31 Y s 891 227 m -664 507 d s 891 193 m 34 Y s 878 220 m 17 Y s 864 230 m 17 Y
+ s 851 240 m 17 Y s 838 250 m 17 Y s 825 243 m 35 Y s 811 271 m 17 Y s 798 281 m
+ 17 Y s 785 291 m 17 Y s 771 301 m 17 Y s 758 294 m 34 Y s 745 321 m 17 Y s 732
+ 332 m 17 Y s 718 342 m 17 Y s 705 352 m 17 Y s 692 345 m 34 Y s 678 372 m 17 Y
+ s 665 382 m 17 Y s 652 392 m 17 Y s 639 403 m 17 Y s 625 396 m 34 Y s 612 423 m
+ 17 Y s 599 433 m 17 Y s 585 443 m 17 Y s 572 453 m 17 Y s 559 446 m 34 Y s 546
+ 474 m 17 Y s 532 484 m 17 Y s 519 494 m 17 Y s 506 504 m 17 Y s 492 497 m 34 Y
+ s 479 524 m 17 Y s 466 534 m 17 Y s 453 545 m 17 Y s 439 555 m 17 Y s 426 548 m
+ 34 Y s 413 575 m 17 Y s 399 585 m 17 Y s 386 595 m 17 Y s 373 605 m 17 Y s 360
+ 599 m 34 Y s 346 626 m 17 Y s 333 636 m 17 Y s 320 646 m 17 Y s 306 656 m 17 Y
+ s 293 649 m 34 Y s 280 676 m 17 Y s 267 687 m 17 Y s 253 697 m 17 Y s 240 707 m
+ 17 Y s 227 700 m 34 Y s 891 193 m 34 Y s 880 133 m -5 -2 d -3 -4 d -1 -8 d -4 Y
+ 1 -8 d 3 -5 d 5 -1 d 3 X 4 1 d 3 5 d 2 8 d 4 Y -2 8 d -3 4 d -4 2 d -3 X cl s
+ 771 183 m -4 -1 d -3 -5 d -2 -7 d -5 Y 2 -7 d 3 -5 d 4 -1 d 3 X 5 1 d 3 5 d 2 7
+ d 5 Y -2 7 d -3 5 d -5 1 d -3 X cl s 796 155 m -2 -2 d 2 -1 d 1 1 d -1 2 d cl s
+ 812 177 m 3 2 d 5 4 d -31 Y s 705 234 m -5 -1 d -3 -5 d -1 -7 d -5 Y 1 -8 d 3
+ -4 d 5 -2 d 3 X 5 2 d 3 4 d 1 8 d 5 Y -1 7 d -3 5 d -5 1 d -3 X cl s 729 205 m
+ -1 -1 d 1 -2 d 2 2 d -2 1 d cl s 743 227 m 1 Y 1 3 d 2 2 d 3 1 d 6 X 3 -1 d 1
+ -2 d 2 -3 d -3 Y -2 -3 d -3 -5 d -15 -15 d 21 X s 639 285 m -5 -2 d -3 -4 d -1
+ -8 d -4 Y 1 -8 d 3 -4 d 5 -2 d 3 X 4 2 d 3 4 d 2 8 d 4 Y -2 8 d -3 4 d -4 2 d
+ -3 X cl s 663 256 m -2 -1 d 2 -2 d 1 2 d -1 1 d cl s 678 285 m 17 X -10 -12 d 5
+ X 3 -2 d 2 -1 d 1 -5 d -3 Y -1 -4 d -3 -3 d -5 -2 d -5 X -4 2 d -2 1 d -1 3 d s
+ 572 336 m -4 -2 d -3 -4 d -2 -8 d -5 Y 2 -7 d 3 -5 d 4 -1 d 3 X 5 1 d 3 5 d 1 7
+ d 5 Y -1 8 d -3 4 d -5 2 d -3 X cl s 596 307 m -1 -2 d 1 -1 d 2 1 d -2 2 d cl s
+ 624 336 m -16 -22 d 23 X s 624 336 m -32 Y s 506 386 m -5 -1 d -3 -5 d -1 -7 d
+ -5 Y 1 -7 d 3 -5 d 5 -1 d 3 X 4 1 d 3 5 d 2 7 d 5 Y -2 7 d -3 5 d -4 1 d -3 X
+ cl s 530 358 m -2 -2 d 2 -1 d 1 1 d -1 2 d cl s 560 386 m -15 X -1 -13 d 1 1 d
+ 5 2 d 4 X 5 -2 d 3 -3 d 1 -4 d -3 Y -1 -5 d -3 -3 d -5 -1 d -4 X -5 1 d -1 2 d
+ -2 3 d s 439 437 m -4 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -4 d 4 -2 d 3 X 5 2 d
+ 3 4 d 1 8 d 4 Y -1 8 d -3 4 d -5 2 d -3 X cl s 464 408 m -2 -1 d 2 -2 d 1 2 d
+ -1 1 d cl s 495 432 m -1 3 d -5 2 d -3 X -4 -2 d -3 -4 d -2 -8 d -7 Y 2 -6 d 3
+ -3 d 4 -2 d 2 X 4 2 d 3 3 d 2 4 d 2 Y -2 4 d -3 3 d -4 2 d -2 X -4 -2 d -3 -3 d
+ -2 -4 d s 373 488 m -5 -2 d -3 -4 d -1 -8 d -4 Y 1 -8 d 3 -5 d 5 -1 d 3 X 4 1 d
+ 4 5 d 1 8 d 4 Y -1 8 d -4 4 d -4 2 d -3 X cl s 397 459 m -1 -2 d 1 -1 d 2 1 d
+ -2 2 d cl s 430 488 m -15 -32 d s 409 488 m 21 X s 307 538 m -5 -1 d -3 -5 d -2
+ -7 d -5 Y 2 -7 d 3 -5 d 5 -1 d 3 X 4 1 d 3 5 d 2 7 d 5 Y -2 7 d -3 5 d -4 1 d
+ -3 X cl s 331 510 m -2 -2 d 2 -1 d 1 1 d -1 2 d cl s 350 538 m -4 -1 d -2 -3 d
+ -3 Y 2 -3 d 3 -2 d 6 -1 d 4 -2 d 3 -3 d 2 -3 d -4 Y -2 -3 d -1 -2 d -5 -1 d -6
+ X -4 1 d -2 2 d -1 3 d 4 Y 1 3 d 3 3 d 5 2 d 6 1 d 3 2 d 1 3 d 3 Y -1 3 d -5 1
+ d -6 X cl s 240 589 m -4 -1 d -3 -5 d -2 -7 d -5 Y 2 -8 d 3 -4 d 4 -2 d 3 X 5 2
+ d 3 4 d 1 8 d 5 Y -1 7 d -3 5 d -5 1 d -3 X cl s 264 560 m -1 -1 d 1 -2 d 2 2 d
+ -2 1 d cl s 296 579 m -1 -5 d -3 -3 d -5 -2 d -2 X -4 2 d -3 3 d -2 5 d 1 Y 2 5
+ d 3 3 d 4 1 d 2 X 5 -1 d 3 -3 d 1 -6 d -8 Y -1 -8 d -3 -4 d -5 -2 d -3 X -5 2 d
+ -1 3 d s 211 634 m 3 1 d 5 5 d -32 Y s 227 734 m 1014 Y s 193 734 m 34 X s 210
+ 783 m 17 X s 210 832 m 17 X s 210 882 m 17 X s 193 931 m 34 X s 210 980 m 17 X
+ s 210 1029 m 17 X s 210 1079 m 17 X s 193 1128 m 34 X s 210 1177 m 17 X s 210
+ 1226 m 17 X s 210 1276 m 17 X s 193 1325 m 34 X s 210 1374 m 17 X s 210 1423 m
+ 17 X s 210 1473 m 17 X s 193 1522 m 34 X s 210 1571 m 17 X s 210 1620 m 17 X s
+ 210 1670 m 17 X s 193 1719 m 34 X s 193 1719 m 34 X s 153 750 m -4 -2 d -3 -4 d
+ -2 -8 d -4 Y 2 -8 d 3 -4 d 4 -2 d 3 X 5 2 d 3 4 d 2 8 d 4 Y -2 8 d -3 4 d -5 2
+ d -3 X cl s 116 939 m 2 Y 1 3 d 2 1 d 3 2 d 6 X 3 -2 d 1 -1 d 2 -3 d -3 Y -2 -3
+ d -3 -5 d -15 -15 d 21 X s 153 947 m -4 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -4 d
+ 4 -2 d 3 X 5 2 d 3 4 d 2 8 d 4 Y -2 8 d -3 4 d -5 2 d -3 X cl s 129 1144 m -15
+ -21 d 23 X s 129 1144 m -32 Y s 153 1144 m -4 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d
+ 3 -4 d 4 -2 d 3 X 5 2 d 3 4 d 2 8 d 4 Y -2 8 d -3 4 d -5 2 d -3 X cl s 134 1336
+ m -2 3 d -4 2 d -3 X -5 -2 d -3 -4 d -1 -8 d -7 Y 1 -6 d 3 -3 d 5 -2 d 1 X 5 2
+ d 3 3 d 1 4 d 2 Y -1 4 d -3 3 d -5 2 d -1 X -5 -2 d -3 -3 d -1 -4 d s 153 1341
+ m -4 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -4 d 4 -2 d 3 X 5 2 d 3 4 d 2 8 d 4 Y
+ -2 8 d -3 4 d -5 2 d -3 X cl s 122 1538 m -5 -2 d -1 -3 d -3 Y 1 -3 d 3 -1 d 6
+ -2 d 5 -1 d 3 -3 d 1 -3 d -5 Y -1 -3 d -2 -2 d -4 -1 d -6 X -5 1 d -1 2 d -2 3
+ d 5 Y 2 3 d 3 3 d 4 1 d 6 2 d 3 1 d 2 3 d 3 Y -2 3 d -4 2 d -6 X cl s 153 1538
+ m -4 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -5 d 4 -1 d 3 X 5 1 d 3 5 d 2 8 d 4 Y
+ -2 8 d -3 4 d -5 2 d -3 X cl s 88 1729 m 3 1 d 5 5 d -32 Y s 123 1735 m -4 -2 d
+ -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -5 d 4 -1 d 3 X 5 1 d 3 5 d 1 8 d 4 Y -1 8 d -3 4
+ d -5 2 d -3 X cl s 153 1735 m -4 -2 d -3 -4 d -2 -8 d -4 Y 2 -8 d 3 -5 d 4 -1 d
+ 3 X 5 1 d 3 5 d 2 8 d 4 Y -2 8 d -3 4 d -5 2 d -3 X cl s 1041 71 m 18 X 3 Y -1
+ 3 d -2 2 d -3 1 d -4 X -3 -1 d -3 -3 d -2 -5 d -3 Y 2 -4 d 3 -4 d 3 -1 d 4 X 3
+ 1 d 3 4 d s 1068 80 m 17 -21 d s 1085 80 m -17 -21 d s 1112 80 m -21 Y s 1112
+ 76 m -3 3 d -3 1 d -5 X -3 -1 d -3 -3 d -1 -5 d -3 Y 1 -4 d 3 -4 d 3 -1 d 5 X 3
+ 1 d 3 4 d s 1124 80 m -21 Y s 1124 74 m 5 5 d 3 1 d 4 X 3 -1 d 2 -5 d -15 Y s
+ 1141 74 m 4 5 d 3 1 d 5 X 3 -1 d 1 -5 d -15 Y s 1170 80 m -32 Y s 1170 76 m 3 3
+ d 3 1 d 4 X 3 -1 d 3 -3 d 2 -5 d -3 Y -2 -4 d -3 -4 d -3 -1 d -4 X -3 1 d -3 4
+ d s 1198 91 m -32 Y s 1209 71 m 18 X 3 Y -2 3 d -1 2 d -3 1 d -5 X -3 -1 d -3
+ -3 d -1 -5 d -3 Y 1 -4 d 3 -4 d 3 -1 d 5 X 3 1 d 3 4 d s
+ gr gr
+showpage
+end
+%%EOF
diff --git a/gsl-1.9/doc/ieee754.texi b/gsl-1.9/doc/ieee754.texi
new file mode 100644
index 0000000..4cfecda
--- /dev/null
+++ b/gsl-1.9/doc/ieee754.texi
@@ -0,0 +1,461 @@
+@cindex IEEE floating point
+
+This chapter describes functions for examining the representation of
+floating point numbers and controlling the floating point environment of
+your program. The functions described in this chapter are declared in
+the header file @file{gsl_ieee_utils.h}.
+
+@menu
+* Representation of floating point numbers::
+* Setting up your IEEE environment::
+* IEEE References and Further Reading::
+@end menu
+
+@node Representation of floating point numbers
+@section Representation of floating point numbers
+@cindex IEEE format for floating point numbers
+@cindex bias, IEEE format
+@cindex exponent, IEEE format
+@cindex sign bit, IEEE format
+@cindex mantissa, IEEE format
+The IEEE Standard for Binary Floating-Point Arithmetic defines binary
+formats for single and double precision numbers. Each number is composed
+of three parts: a @dfn{sign bit} (@math{s}), an @dfn{exponent}
+(@math{E}) and a @dfn{fraction} (@math{f}). The numerical value of the
+combination @math{(s,E,f)} is given by the following formula,
+@tex
+\beforedisplay
+$$
+(-1)^s (1 \cdot fffff\dots) 2^E
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+(-1)^s (1.fffff...) 2^E
+@end example
+
+@end ifinfo
+@noindent
+@cindex normalized form, IEEE format
+@cindex denormalized form, IEEE format
+The sign bit is either zero or one. The exponent ranges from a minimum value
+@c{$E_{min}$}
+@math{E_min}
+to a maximum value
+@c{$E_{max}$}
+@math{E_max} depending on the precision. The exponent is converted to an
+unsigned number
+@math{e}, known as the @dfn{biased exponent}, for storage by adding a
+@dfn{bias} parameter,
+@c{$e = E + \hbox{\it bias}$}
+@math{e = E + bias}.
+The sequence @math{fffff...} represents the digits of the binary
+fraction @math{f}. The binary digits are stored in @dfn{normalized
+form}, by adjusting the exponent to give a leading digit of @math{1}.
+Since the leading digit is always 1 for normalized numbers it is
+assumed implicitly and does not have to be stored.
+Numbers smaller than
+@c{$2^{E_{min}}$}
+@math{2^(E_min)}
+are be stored in @dfn{denormalized form} with a leading zero,
+@tex
+\beforedisplay
+$$
+(-1)^s (0 \cdot fffff\dots) 2^{E_{min}}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+(-1)^s (0.fffff...) 2^(E_min)
+@end example
+
+@end ifinfo
+@noindent
+@cindex zero, IEEE format
+@cindex infinity, IEEE format
+This allows gradual underflow down to
+@c{$2^{E_{min} - p}$}
+@math{2^(E_min - p)} for @math{p} bits of precision.
+A zero is encoded with the special exponent of
+@c{$2^{E_{min}-1}$}
+@math{2^(E_min - 1)} and infinities with the exponent of
+@c{$2^{E_{max}+1}$}
+@math{2^(E_max + 1)}.
+
+@noindent
+@cindex single precision, IEEE format
+The format for single precision numbers uses 32 bits divided in the
+following way,
+
+@smallexample
+seeeeeeeefffffffffffffffffffffff
+
+s = sign bit, 1 bit
+e = exponent, 8 bits (E_min=-126, E_max=127, bias=127)
+f = fraction, 23 bits
+@end smallexample
+
+@noindent
+@cindex double precision, IEEE format
+The format for double precision numbers uses 64 bits divided in the
+following way,
+
+@smallexample
+seeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffff
+
+s = sign bit, 1 bit
+e = exponent, 11 bits (E_min=-1022, E_max=1023, bias=1023)
+f = fraction, 52 bits
+@end smallexample
+
+@noindent
+It is often useful to be able to investigate the behavior of a
+calculation at the bit-level and the library provides functions for
+printing the IEEE representations in a human-readable form.
+
+@comment float vs double vs long double
+@comment (how many digits are available for each)
+
+@deftypefun void gsl_ieee_fprintf_float (FILE * @var{stream}, const float * @var{x})
+@deftypefunx void gsl_ieee_fprintf_double (FILE * @var{stream}, const double * @var{x})
+These functions output a formatted version of the IEEE floating-point
+number pointed to by @var{x} to the stream @var{stream}. A pointer is
+used to pass the number indirectly, to avoid any undesired promotion
+from @code{float} to @code{double}. The output takes one of the
+following forms,
+
+@table @code
+@item NaN
+the Not-a-Number symbol
+
+@item Inf, -Inf
+positive or negative infinity
+
+@item 1.fffff...*2^E, -1.fffff...*2^E
+a normalized floating point number
+
+@item 0.fffff...*2^E, -0.fffff...*2^E
+a denormalized floating point number
+
+@item 0, -0
+positive or negative zero
+
+@comment @item [non-standard IEEE float], [non-standard IEEE double]
+@comment an unrecognized encoding
+@end table
+
+The output can be used directly in GNU Emacs Calc mode by preceding it
+with @code{2#} to indicate binary.
+@end deftypefun
+
+@deftypefun void gsl_ieee_printf_float (const float * @var{x})
+@deftypefunx void gsl_ieee_printf_double (const double * @var{x})
+These functions output a formatted version of the IEEE floating-point
+number pointed to by @var{x} to the stream @code{stdout}.
+@end deftypefun
+
+@noindent
+The following program demonstrates the use of the functions by printing
+the single and double precision representations of the fraction
+@math{1/3}. For comparison the representation of the value promoted from
+single to double precision is also printed.
+
+@example
+@verbatiminclude examples/ieee.c
+@end example
+
+@noindent
+The binary representation of @math{1/3} is @math{0.01010101... }. The
+output below shows that the IEEE format normalizes this fraction to give
+a leading digit of 1,
+
+@smallexample
+ f= 1.01010101010101010101011*2^-2
+fd= 1.0101010101010101010101100000000000000000000000000000*2^-2
+ d= 1.0101010101010101010101010101010101010101010101010101*2^-2
+@end smallexample
+
+@noindent
+The output also shows that a single-precision number is promoted to
+double-precision by adding zeros in the binary representation.
+
+@comment importance of using 1.234L in long double calculations
+
+@comment @example
+@comment int main (void)
+@comment @{
+@comment long double x = 1.0, y = 1.0;
+
+@comment x = x + 0.2;
+@comment y = y + 0.2L;
+
+@comment printf(" d %.20Lf\n",x);
+@comment printf("ld %.20Lf\n",y);
+
+@comment return 1;
+@comment @}
+
+@comment d 1.20000000000000001110
+@comment ld 1.20000000000000000004
+@comment @end example
+
+
+@node Setting up your IEEE environment
+@section Setting up your IEEE environment
+@cindex IEEE exceptions
+@cindex precision, IEEE arithmetic
+@cindex rounding mode
+@cindex arithmetic exceptions
+@cindex exceptions, IEEE arithmetic
+@cindex division by zero, IEEE exceptions
+@cindex underflow, IEEE exceptions
+@cindex overflow, IEEE exceptions
+The IEEE standard defines several @dfn{modes} for controlling the
+behavior of floating point operations. These modes specify the important
+properties of computer arithmetic: the direction used for rounding (e.g.
+whether numbers should be rounded up, down or to the nearest number),
+the rounding precision and how the program should handle arithmetic
+exceptions, such as division by zero.
+
+Many of these features can now be controlled via standard functions such
+as @code{fpsetround}, which should be used whenever they are available.
+Unfortunately in the past there has been no universal API for
+controlling their behavior---each system has had its own low-level way
+of accessing them. To help you write portable programs GSL allows you
+to specify modes in a platform-independent way using the environment
+variable @code{GSL_IEEE_MODE}. The library then takes care of all the
+necessary machine-specific initializations for you when you call the
+function @code{gsl_ieee_env_setup}.
+
+@deftypefun void gsl_ieee_env_setup ()
+This function reads the environment variable @code{GSL_IEEE_MODE} and
+attempts to set up the corresponding specified IEEE modes. The
+environment variable should be a list of keywords, separated by
+commas, like this,
+
+@display
+@code{GSL_IEEE_MODE} = "@var{keyword},@var{keyword},..."
+@end display
+
+@noindent
+where @var{keyword} is one of the following mode-names,
+
+@itemize @asis
+@item
+@code{single-precision}
+@item
+@code{double-precision}
+@item
+@code{extended-precision}
+@item
+@code{round-to-nearest}
+@item
+@code{round-down}
+@item
+@code{round-up}
+@item
+@code{round-to-zero}
+@item
+@code{mask-all}
+@item
+@code{mask-invalid}
+@item
+@code{mask-denormalized}
+@item
+@code{mask-division-by-zero}
+@item
+@code{mask-overflow}
+@item
+@code{mask-underflow}
+@item
+@code{trap-inexact}
+@item
+@code{trap-common}
+@end itemize
+
+If @code{GSL_IEEE_MODE} is empty or undefined then the function returns
+immediately and no attempt is made to change the system's IEEE
+mode. When the modes from @code{GSL_IEEE_MODE} are turned on the
+function prints a short message showing the new settings to remind you
+that the results of the program will be affected.
+
+If the requested modes are not supported by the platform being used then
+the function calls the error handler and returns an error code of
+@code{GSL_EUNSUP}.
+
+When options are specified using this method, the resulting mode is
+based on a default setting of the highest available precision (double
+precision or extended precision, depending on the platform) in
+round-to-nearest mode, with all exceptions enabled apart from the
+@sc{inexact} exception. The @sc{inexact} exception is generated
+whenever rounding occurs, so it must generally be disabled in typical
+scientific calculations. All other floating-point exceptions are
+enabled by default, including underflows and the use of denormalized
+numbers, for safety. They can be disabled with the individual
+@code{mask-} settings or together using @code{mask-all}.
+
+The following adjusted combination of modes is convenient for many
+purposes,
+
+@example
+GSL_IEEE_MODE="double-precision,"\
+ "mask-underflow,"\
+ "mask-denormalized"
+@end example
+
+@noindent
+This choice ignores any errors relating to small numbers (either
+denormalized, or underflowing to zero) but traps overflows, division by
+zero and invalid operations.
+@end deftypefun
+
+@noindent
+To demonstrate the effects of different rounding modes consider the
+following program which computes @math{e}, the base of natural
+logarithms, by summing a rapidly-decreasing series,
+@tex
+\beforedisplay
+$$
+e = 1 + {1 \over 2!} + {1 \over 3!} + {1 \over 4!} + \dots
+ = 2.71828182846...
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+e = 1 + 1/2! + 1/3! + 1/4! + ...
+ = 2.71828182846...
+@end example
+@end ifinfo
+
+@example
+@verbatiminclude examples/ieeeround.c
+@end example
+
+@noindent
+Here are the results of running the program in @code{round-to-nearest}
+mode. This is the IEEE default so it isn't really necessary to specify
+it here,
+
+@example
+$ GSL_IEEE_MODE="round-to-nearest" ./a.out
+i= 1 sum=1.000000000000000000 error=-1.71828
+i= 2 sum=2.000000000000000000 error=-0.718282
+....
+i=18 sum=2.718281828459045535 error=4.44089e-16
+i=19 sum=2.718281828459045535 error=4.44089e-16
+@end example
+
+@noindent
+After nineteen terms the sum converges to within @c{$4 \times 10^{-16}$}
+@math{4 \times 10^-16} of the correct value.
+If we now change the rounding mode to
+@code{round-down} the final result is less accurate,
+
+@example
+$ GSL_IEEE_MODE="round-down" ./a.out
+i= 1 sum=1.000000000000000000 error=-1.71828
+....
+i=19 sum=2.718281828459041094 error=-3.9968e-15
+@end example
+
+@noindent
+The result is about
+@c{$4 \times 10^{-15}$}
+@math{4 \times 10^-15}
+below the correct value, an order of magnitude worse than the result
+obtained in the @code{round-to-nearest} mode.
+
+If we change to rounding mode to @code{round-up} then the series no
+longer converges (the reason is that when we add each term to the sum
+the final result is always rounded up. This is guaranteed to increase the sum
+by at least one tick on each iteration). To avoid this problem we would
+need to use a safer converge criterion, such as @code{while (fabs(sum -
+oldsum) > epsilon)}, with a suitably chosen value of epsilon.
+
+Finally we can see the effect of computing the sum using
+single-precision rounding, in the default @code{round-to-nearest}
+mode. In this case the program thinks it is still using double precision
+numbers but the CPU rounds the result of each floating point operation
+to single-precision accuracy. This simulates the effect of writing the
+program using single-precision @code{float} variables instead of
+@code{double} variables. The iteration stops after about half the number
+of iterations and the final result is much less accurate,
+
+@example
+$ GSL_IEEE_MODE="single-precision" ./a.out
+....
+i=12 sum=2.718281984329223633 error=1.5587e-07
+@end example
+
+@noindent
+with an error of
+@c{$O(10^{-7})$}
+@math{O(10^-7)}, which corresponds to single
+precision accuracy (about 1 part in @math{10^7}). Continuing the
+iterations further does not decrease the error because all the
+subsequent results are rounded to the same value.
+
+@node IEEE References and Further Reading
+@section References and Further Reading
+
+The reference for the IEEE standard is,
+
+@itemize @asis
+@item
+ANSI/IEEE Std 754-1985, IEEE Standard for Binary Floating-Point Arithmetic.
+@end itemize
+
+@noindent
+A more pedagogical introduction to the standard can be found in the
+following paper,
+
+@itemize @asis
+@item
+David Goldberg: What Every Computer Scientist Should Know About
+Floating-Point Arithmetic. @cite{ACM Computing Surveys}, Vol.@: 23, No.@: 1
+(March 1991), pages 5--48.
+
+Corrigendum: @cite{ACM Computing Surveys}, Vol.@: 23, No.@: 3 (September
+1991), page 413. and see also the sections by B. A. Wichmann and Charles
+B. Dunham in Surveyor's Forum: ``What Every Computer Scientist Should
+Know About Floating-Point Arithmetic''. @cite{ACM Computing Surveys},
+Vol.@: 24, No.@: 3 (September 1992), page 319.
+@end itemize
+
+@noindent
+
+A detailed textbook on IEEE arithmetic and its practical use is
+available from SIAM Press,
+
+@itemize @asis
+@item
+Michael L. Overton, @cite{Numerical Computing with IEEE Floating Point Arithmetic},
+SIAM Press, ISBN 0898715717.
+@end itemize
+
+@noindent
+
+@comment to turn on math exception handling use __setfpucw, see
+@comment /usr/include/i386/fpu_control.h
+@comment e.g.
+@comment #include <math.h>
+@comment #include <stdio.h>
+@comment #include <fpu_control.h>
+@comment double f (double x);
+@comment int main ()
+@comment {
+@comment double a = 0;
+@comment double y, z;
+@comment __setfpucw(0x1372);
+@comment mention extended vs double precision on Pentium, and how to get around
+@comment it (-ffloat-store, or selective use of volatile)
+
+@comment On the alpha the option -mieee is needed with gcc
+@comment In Digital's compiler the equivalent is -ieee, -ieee-with-no-inexact
+@comment and -ieee-with-inexact, or -fpe1 or -fpe2
diff --git a/gsl-1.9/doc/initial-route.eps b/gsl-1.9/doc/initial-route.eps
new file mode 100644
index 0000000..0f7e864
--- /dev/null
+++ b/gsl-1.9/doc/initial-route.eps
@@ -0,0 +1,11867 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Thu Jan 4 10:56:26 2007
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 101 194 489 610
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources:
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+/DrawDict 50 dict def
+DrawDict begin
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources:
+%%PageBoundingBox: 101 194 489 610
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3399 10017
+3399 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3414 10017
+3414 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+3311 10017
+3297 9930
+3297 10017
+3517 10017
+3517 9930
+3502 10017
+6 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3355 9710
+3458 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3781 9973
+3795 10017
+3795 9930
+3781 9973
+3751 10003
+3707 10017
+3663 10017
+3619 10003
+3590 9973
+3590 9944
+3605 9915
+3619 9900
+3649 9886
+3737 9856
+3766 9842
+3795 9812
+16 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3590 9944
+3619 9915
+3649 9900
+3737 9871
+3766 9856
+3781 9842
+3795 9812
+3795 9754
+3766 9724
+3722 9710
+3678 9710
+3634 9724
+3605 9754
+3590 9798
+3590 9710
+3605 9754
+16 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3913 10017
+3913 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3927 10017
+3927 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3869 10017
+4045 10017
+4089 10003
+4103 9988
+4118 9959
+4118 9915
+4103 9886
+4089 9871
+4045 9856
+3927 9856
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4045 10017
+4074 10003
+4089 9988
+4103 9959
+4103 9915
+4089 9886
+4074 9871
+4045 9856
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3869 9710
+3971 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4455 9842
+4719 9842
+2 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5100 10003
+5086 9988
+5071 10003
+5086 10017
+4 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5086 9915
+5086 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5100 9915
+5100 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5042 9915
+5100 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5042 9710
+5144 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5247 9915
+5247 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5261 9915
+5261 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5261 9871
+5291 9900
+5335 9915
+5364 9915
+5408 9900
+5423 9871
+5423 9710
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5364 9915
+5393 9900
+5408 9871
+5408 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5203 9915
+5261 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5203 9710
+5305 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5364 9710
+5467 9710
+2 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5584 10003
+5569 9988
+5555 10003
+5569 10017
+4 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5569 9915
+5569 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5584 9915
+5584 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5525 9915
+5584 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5525 9710
+5628 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5731 10017
+5731 9768
+5745 9724
+5775 9710
+5804 9710
+5833 9724
+5848 9754
+7 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5745 10017
+5745 9768
+5760 9724
+5775 9710
+4 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5687 9915
+5804 9915
+2 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5965 10003
+5951 9988
+5936 10003
+5951 10017
+4 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5951 9915
+5951 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5965 9915
+5965 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5907 9915
+5965 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5907 9710
+6009 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+6112 9886
+6112 9871
+6097 9871
+6097 9886
+6112 9900
+6141 9915
+6200 9915
+6229 9900
+6244 9886
+6259 9856
+6259 9754
+6273 9724
+6288 9710
+13 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+6244 9886
+6244 9754
+6259 9724
+6288 9710
+6302 9710
+5 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+6244 9856
+6229 9842
+6141 9827
+6097 9812
+6083 9783
+6083 9754
+6097 9724
+6141 9710
+6185 9710
+6215 9724
+6244 9754
+11 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6141 9827
+6112 9812
+6097 9783
+6097 9754
+6112 9724
+6141 9710
+6 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6405 10017
+6405 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6420 10017
+6420 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6361 10017
+6420 10017
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6361 9710
+6464 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 9842
+6816 9842
+2 MLine
+End
+
+Begin %I Poly
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7036 9915
+7080 9900
+7109 9871
+7124 9827
+7124 9798
+7109 9754
+7080 9724
+7036 9710
+7006 9710
+6962 9724
+6933 9754
+6918 9798
+6918 9827
+6933 9871
+6962 9900
+7006 9915
+16 Poly
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7006 9915
+6977 9900
+6948 9871
+6933 9827
+6933 9798
+6948 9754
+6977 9724
+7006 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7036 9710
+7065 9724
+7094 9754
+7109 9798
+7109 9827
+7094 9871
+7065 9900
+7036 9915
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7241 9915
+7241 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7256 9915
+7256 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7256 9827
+7270 9871
+7299 9900
+7329 9915
+7373 9915
+7387 9900
+7387 9886
+7373 9871
+7358 9886
+7373 9900
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7197 9915
+7256 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7197 9710
+7299 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7637 10017
+7637 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7651 10017
+7651 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+7637 9871
+7607 9900
+7578 9915
+7549 9915
+7505 9900
+7475 9871
+7461 9827
+7461 9798
+7475 9754
+7505 9724
+7549 9710
+7578 9710
+7607 9724
+7637 9754
+14 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7549 9915
+7519 9900
+7490 9871
+7475 9827
+7475 9798
+7490 9754
+7519 9724
+7549 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7593 10017
+7651 10017
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7637 9710
+7695 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+7783 9827
+7959 9827
+7959 9856
+7945 9886
+7930 9900
+7901 9915
+7857 9915
+7813 9900
+7783 9871
+7769 9827
+7769 9798
+7783 9754
+7813 9724
+7857 9710
+7886 9710
+7930 9724
+7959 9754
+17 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+7945 9827
+7945 9871
+7930 9900
+3 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7857 9915
+7827 9900
+7798 9871
+7783 9827
+7783 9798
+7798 9754
+7827 9724
+7857 9710
+8 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8077 9915
+8077 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8091 9915
+8091 9710
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8091 9827
+8106 9871
+8135 9900
+8165 9915
+8209 9915
+8223 9900
+8223 9886
+8209 9871
+8194 9886
+8209 9900
+10 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8033 9915
+8091 9915
+2 MLine
+End
+
+Begin %I MLine
+[1.040989 0 0 1.040989 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8033 9710
+8135 9710
+2 MLine
+End
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2059 2097
+2172 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2235 2147
+2247 2153
+2266 2172
+2266 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2260 2166
+2260 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2235 2040
+2291 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2361 2147
+2373 2153
+2392 2172
+2392 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2386 2166
+2386 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2361 2040
+2417 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2524 2159
+2524 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2530 2172
+2530 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2530 2172
+2461 2078
+2562 2078
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2505 2040
+2549 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2827 2097
+2940 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3003 2147
+3015 2153
+3034 2172
+3034 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3028 2166
+3028 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3003 2040
+3059 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3129 2147
+3141 2153
+3160 2172
+3160 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3154 2166
+3154 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3129 2040
+3185 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+3242 2147
+3248 2141
+3242 2134
+3235 2141
+3235 2147
+3242 2159
+3248 2166
+3267 2172
+3292 2172
+3311 2166
+3317 2159
+3323 2147
+3323 2134
+3317 2122
+3298 2109
+3267 2097
+3254 2090
+3242 2078
+3235 2059
+3235 2040
+20 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3292 2172
+3304 2166
+3311 2159
+3317 2147
+3317 2134
+3311 2122
+3292 2109
+3267 2097
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+3235 2053
+3242 2059
+3254 2059
+3286 2046
+3304 2046
+3317 2053
+3323 2059
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+3254 2059
+3286 2040
+3311 2040
+3317 2046
+3323 2059
+3323 2072
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 9216
+3072 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 2304
+3072 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3595 2097
+3708 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3771 2147
+3783 2153
+3802 2172
+3802 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3796 2166
+3796 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3771 2040
+3827 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+3897 2147
+3909 2153
+3928 2172
+3928 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3922 2166
+3922 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3897 2040
+3953 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4054 2172
+4072 2166
+4085 2147
+4091 2115
+4091 2097
+4085 2065
+4072 2046
+4054 2040
+4041 2040
+4022 2046
+4010 2065
+4003 2097
+4003 2115
+4010 2147
+4022 2166
+4041 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4041 2172
+4029 2166
+4022 2159
+4016 2147
+4010 2115
+4010 2097
+4016 2065
+4022 2053
+4029 2046
+4041 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4054 2040
+4066 2046
+4072 2053
+4079 2065
+4085 2097
+4085 2115
+4079 2147
+4072 2159
+4066 2166
+4054 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 9216
+3840 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 2304
+3840 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4363 2097
+4476 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4539 2147
+4551 2153
+4570 2172
+4570 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4564 2166
+4564 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4539 2040
+4595 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4696 2172
+4715 2166
+4727 2147
+4734 2115
+4734 2097
+4727 2065
+4715 2046
+4696 2040
+4683 2040
+4665 2046
+4652 2065
+4646 2097
+4646 2115
+4652 2147
+4665 2166
+4683 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4683 2172
+4671 2166
+4665 2159
+4658 2147
+4652 2115
+4652 2097
+4658 2065
+4665 2053
+4671 2046
+4683 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4696 2040
+4709 2046
+4715 2053
+4721 2065
+4727 2097
+4727 2115
+4721 2147
+4715 2159
+4709 2166
+4696 2172
+10 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+4828 2172
+4847 2166
+4853 2153
+4853 2134
+4847 2122
+4828 2115
+4803 2115
+4784 2122
+4778 2134
+4778 2153
+4784 2166
+4803 2172
+12 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+4803 2172
+4790 2166
+4784 2153
+4784 2134
+4790 2122
+4803 2115
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+4828 2115
+4840 2122
+4847 2134
+4847 2153
+4840 2166
+4828 2172
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4803 2115
+4784 2109
+4778 2103
+4771 2090
+4771 2065
+4778 2053
+4784 2046
+4803 2040
+4828 2040
+4847 2046
+4853 2053
+4859 2065
+4859 2090
+4853 2103
+4847 2109
+4828 2115
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4803 2115
+4790 2109
+4784 2103
+4778 2090
+4778 2065
+4784 2053
+4790 2046
+4803 2040
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4828 2040
+4840 2046
+4847 2053
+4853 2065
+4853 2090
+4847 2103
+4840 2109
+4828 2115
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5131 2097
+5244 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5307 2147
+5319 2153
+5338 2172
+5338 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5332 2166
+5332 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5307 2040
+5363 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5464 2172
+5483 2166
+5495 2147
+5502 2115
+5502 2097
+5495 2065
+5483 2046
+5464 2040
+5451 2040
+5433 2046
+5420 2065
+5414 2097
+5414 2115
+5420 2147
+5433 2166
+5451 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5451 2172
+5439 2166
+5433 2159
+5426 2147
+5420 2115
+5420 2097
+5426 2065
+5433 2053
+5439 2046
+5451 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5464 2040
+5477 2046
+5483 2053
+5489 2065
+5495 2097
+5495 2115
+5489 2147
+5483 2159
+5477 2166
+5464 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+5615 2153
+5608 2147
+5615 2141
+5621 2147
+5621 2153
+5615 2166
+5602 2172
+5583 2172
+5565 2166
+5552 2153
+5546 2141
+5539 2115
+5539 2078
+5546 2059
+5558 2046
+5577 2040
+5590 2040
+5608 2046
+5621 2059
+5627 2078
+5627 2084
+5621 2103
+5608 2115
+5590 2122
+5583 2122
+5565 2115
+5552 2103
+5546 2084
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+5583 2172
+5571 2166
+5558 2153
+5552 2141
+5546 2115
+5546 2078
+5552 2059
+5565 2046
+5577 2040
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5590 2040
+5602 2046
+5615 2059
+5621 2078
+5621 2084
+5615 2103
+5602 2115
+5590 2122
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 9216
+5376 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 2304
+5376 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5899 2097
+6012 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6075 2147
+6087 2153
+6106 2172
+6106 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6100 2166
+6100 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6075 2040
+6131 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6232 2172
+6251 2166
+6263 2147
+6270 2115
+6270 2097
+6263 2065
+6251 2046
+6232 2040
+6219 2040
+6201 2046
+6188 2065
+6182 2097
+6182 2115
+6188 2147
+6201 2166
+6219 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6219 2172
+6207 2166
+6201 2159
+6194 2147
+6188 2115
+6188 2097
+6194 2065
+6201 2053
+6207 2046
+6219 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6232 2040
+6245 2046
+6251 2053
+6257 2065
+6263 2097
+6263 2115
+6257 2147
+6251 2159
+6245 2166
+6232 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6364 2159
+6364 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6370 2172
+6370 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6370 2172
+6301 2078
+6402 2078
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6345 2040
+6389 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 9216
+6144 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 2304
+6144 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6667 2097
+6780 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6843 2147
+6855 2153
+6874 2172
+6874 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6868 2166
+6868 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6843 2040
+6899 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7000 2172
+7019 2166
+7031 2147
+7038 2115
+7038 2097
+7031 2065
+7019 2046
+7000 2040
+6987 2040
+6969 2046
+6956 2065
+6950 2097
+6950 2115
+6956 2147
+6969 2166
+6987 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6987 2172
+6975 2166
+6969 2159
+6962 2147
+6956 2115
+6956 2097
+6962 2065
+6969 2053
+6975 2046
+6987 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7000 2040
+7013 2046
+7019 2053
+7025 2065
+7031 2097
+7031 2115
+7025 2147
+7019 2159
+7013 2166
+7000 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+7082 2147
+7088 2141
+7082 2134
+7075 2141
+7075 2147
+7082 2159
+7088 2166
+7107 2172
+7132 2172
+7151 2166
+7157 2159
+7163 2147
+7163 2134
+7157 2122
+7138 2109
+7107 2097
+7094 2090
+7082 2078
+7075 2059
+7075 2040
+20 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7132 2172
+7144 2166
+7151 2159
+7157 2147
+7157 2134
+7151 2122
+7132 2109
+7107 2097
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7075 2053
+7082 2059
+7094 2059
+7126 2046
+7144 2046
+7157 2053
+7163 2059
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+7094 2059
+7126 2040
+7151 2040
+7157 2046
+7163 2059
+7163 2072
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7435 2097
+7548 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+7611 2147
+7623 2153
+7642 2172
+7642 2040
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7636 2166
+7636 2040
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7611 2040
+7667 2040
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7768 2172
+7787 2166
+7799 2147
+7806 2115
+7806 2097
+7799 2065
+7787 2046
+7768 2040
+7755 2040
+7737 2046
+7724 2065
+7718 2097
+7718 2115
+7724 2147
+7737 2166
+7755 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7755 2172
+7743 2166
+7737 2159
+7730 2147
+7724 2115
+7724 2097
+7730 2065
+7737 2053
+7743 2046
+7755 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7768 2040
+7781 2046
+7787 2053
+7793 2065
+7799 2097
+7799 2115
+7793 2147
+7787 2159
+7781 2166
+7768 2172
+10 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7894 2172
+7912 2166
+7925 2147
+7931 2115
+7931 2097
+7925 2065
+7912 2046
+7894 2040
+7881 2040
+7862 2046
+7850 2065
+7843 2097
+7843 2115
+7850 2147
+7862 2166
+7881 2172
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7881 2172
+7869 2166
+7862 2159
+7856 2147
+7850 2115
+7850 2097
+7856 2065
+7862 2053
+7869 2046
+7881 2040
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7894 2040
+7906 2046
+7912 2053
+7919 2065
+7925 2097
+7925 2115
+7919 2147
+7912 2159
+7906 2166
+7894 2172
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 9216
+7680 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 2304
+7680 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8266 2097
+8379 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+8505 2128
+8498 2109
+8486 2097
+8467 2090
+8461 2090
+8442 2097
+8429 2109
+8423 2128
+8423 2134
+8429 2153
+8442 2166
+8461 2172
+8473 2172
+8492 2166
+8505 2153
+8511 2134
+8511 2097
+8505 2072
+8498 2059
+8486 2046
+8467 2040
+8448 2040
+8435 2046
+8429 2059
+8429 2065
+8435 2072
+8442 2065
+8435 2059
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8461 2090
+8448 2097
+8435 2109
+8429 2128
+8429 2134
+8435 2153
+8448 2166
+8461 2172
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+8473 2172
+8486 2166
+8498 2153
+8505 2134
+8505 2097
+8498 2072
+8492 2059
+8479 2046
+8467 2040
+9 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+8605 2172
+8624 2166
+8630 2153
+8630 2134
+8624 2122
+8605 2115
+8580 2115
+8561 2122
+8555 2134
+8555 2153
+8561 2166
+8580 2172
+12 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8580 2172
+8567 2166
+8561 2153
+8561 2134
+8567 2122
+8580 2115
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8605 2115
+8618 2122
+8624 2134
+8624 2153
+8618 2166
+8605 2172
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8580 2115
+8561 2109
+8555 2103
+8549 2090
+8549 2065
+8555 2053
+8561 2046
+8580 2040
+8605 2040
+8624 2046
+8630 2053
+8637 2065
+8637 2090
+8630 2103
+8624 2109
+8605 2115
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8580 2115
+8567 2109
+8561 2103
+8555 2090
+8555 2065
+8561 2053
+8567 2046
+8580 2040
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+8605 2040
+8618 2046
+8624 2053
+8630 2065
+8630 2090
+8624 2103
+8618 2109
+8605 2115
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 9216
+8448 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 2304
+8448 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9034 2097
+9147 2097
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+9273 2128
+9266 2109
+9254 2097
+9235 2090
+9229 2090
+9210 2097
+9197 2109
+9191 2128
+9191 2134
+9197 2153
+9210 2166
+9229 2172
+9241 2172
+9260 2166
+9273 2153
+9279 2134
+9279 2097
+9273 2072
+9266 2059
+9254 2046
+9235 2040
+9216 2040
+9203 2046
+9197 2059
+9197 2065
+9203 2072
+9210 2065
+9203 2059
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+9229 2090
+9216 2097
+9203 2109
+9197 2128
+9197 2134
+9203 2153
+9216 2166
+9229 2172
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+9241 2172
+9254 2166
+9266 2153
+9273 2134
+9273 2097
+9266 2072
+9260 2059
+9247 2046
+9235 2040
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+9392 2153
+9386 2147
+9392 2141
+9398 2147
+9398 2153
+9392 2166
+9379 2172
+9361 2172
+9342 2166
+9329 2153
+9323 2141
+9317 2115
+9317 2078
+9323 2059
+9335 2046
+9354 2040
+9367 2040
+9386 2046
+9398 2059
+9405 2078
+9405 2084
+9398 2103
+9386 2115
+9367 2122
+9361 2122
+9342 2115
+9329 2103
+9323 2084
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+9361 2172
+9348 2166
+9335 2153
+9329 2141
+9323 2115
+9323 2078
+9329 2059
+9342 2046
+9354 2040
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+9367 2040
+9379 2046
+9392 2059
+9398 2078
+9398 2084
+9392 2103
+9379 2115
+9367 2122
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2688 9216
+2688 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2688 2304
+2688 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 9216
+3072 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3072 2304
+3072 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 9216
+3456 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 2304
+3456 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 9216
+3840 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3840 2304
+3840 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4224 9216
+4224 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4224 2304
+4224 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4992 9216
+4992 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4992 2304
+4992 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 9216
+5376 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5376 2304
+5376 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 9216
+6144 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6144 2304
+6144 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6528 9216
+6528 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6528 2304
+6528 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7296 9216
+7296 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7296 2304
+7296 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 9216
+7680 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7680 2304
+7680 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 9216
+8064 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 2304
+8064 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 9216
+8448 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8448 2304
+8448 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8832 9216
+8832 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8832 2304
+8832 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 2354
+1980 2348
+1974 2342
+1968 2348
+1968 2354
+1974 2367
+1980 2373
+1999 2379
+2024 2379
+2043 2373
+2050 2361
+2050 2342
+2043 2329
+2024 2323
+2006 2323
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 2379
+2037 2373
+2043 2361
+2043 2342
+2037 2329
+2024 2323
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 2323
+2037 2317
+2050 2304
+2056 2291
+2056 2273
+2050 2260
+2043 2254
+2024 2247
+1999 2247
+1980 2254
+1974 2260
+1968 2273
+1968 2279
+1974 2285
+1980 2279
+1974 2273
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 2310
+2050 2291
+2050 2273
+2043 2260
+2037 2254
+2024 2247
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+2100 2354
+2106 2348
+2100 2342
+2093 2348
+2093 2354
+2100 2367
+2106 2373
+2125 2379
+2150 2379
+2169 2373
+2175 2367
+2181 2354
+2181 2342
+2175 2329
+2156 2317
+2125 2304
+2112 2298
+2100 2285
+2093 2266
+2093 2247
+20 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2150 2379
+2163 2373
+2169 2367
+2175 2354
+2175 2342
+2169 2329
+2150 2317
+2125 2304
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2093 2260
+2100 2266
+2112 2266
+2144 2254
+2163 2254
+2175 2260
+2181 2266
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2112 2266
+2144 2247
+2169 2247
+2175 2254
+2181 2266
+2181 2279
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 3506
+1980 3500
+1974 3494
+1968 3500
+1968 3506
+1974 3519
+1980 3525
+1999 3531
+2024 3531
+2043 3525
+2050 3513
+2050 3494
+2043 3481
+2024 3475
+2006 3475
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 3531
+2037 3525
+2043 3513
+2043 3494
+2037 3481
+2024 3475
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 3475
+2037 3469
+2050 3456
+2056 3443
+2056 3425
+2050 3412
+2043 3406
+2024 3399
+1999 3399
+1980 3406
+1974 3412
+1968 3425
+1968 3431
+1974 3437
+1980 3431
+1974 3425
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 3462
+2050 3443
+2050 3425
+2043 3412
+2037 3406
+2024 3399
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+2100 3506
+2106 3500
+2100 3494
+2093 3500
+2093 3506
+2100 3519
+2106 3525
+2125 3531
+2150 3531
+2169 3525
+2175 3513
+2175 3494
+2169 3481
+2150 3475
+2131 3475
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2150 3531
+2163 3525
+2169 3513
+2169 3494
+2163 3481
+2150 3475
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2150 3475
+2163 3469
+2175 3456
+2181 3443
+2181 3425
+2175 3412
+2169 3406
+2150 3399
+2125 3399
+2106 3406
+2100 3412
+2093 3425
+2093 3431
+2100 3437
+2106 3431
+2100 3425
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2169 3462
+2175 3443
+2175 3425
+2169 3412
+2163 3406
+2150 3399
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9078 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2442 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 4658
+1980 4652
+1974 4646
+1968 4652
+1968 4658
+1974 4671
+1980 4677
+1999 4683
+2024 4683
+2043 4677
+2050 4665
+2050 4646
+2043 4633
+2024 4627
+2006 4627
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 4683
+2037 4677
+2043 4665
+2043 4646
+2037 4633
+2024 4627
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 4627
+2037 4621
+2050 4608
+2056 4595
+2056 4577
+2050 4564
+2043 4558
+2024 4551
+1999 4551
+1980 4558
+1974 4564
+1968 4577
+1968 4583
+1974 4589
+1980 4583
+1974 4577
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 4614
+2050 4595
+2050 4577
+2043 4564
+2037 4558
+2024 4551
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2150 4671
+2150 4551
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2156 4683
+2156 4551
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2156 4683
+2087 4589
+2188 4589
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2131 4551
+2175 4551
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9078 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2442 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 5810
+1980 5804
+1974 5798
+1968 5804
+1968 5810
+1974 5823
+1980 5829
+1999 5835
+2024 5835
+2043 5829
+2050 5817
+2050 5798
+2043 5785
+2024 5779
+2006 5779
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 5835
+2037 5829
+2043 5817
+2043 5798
+2037 5785
+2024 5779
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 5779
+2037 5773
+2050 5760
+2056 5747
+2056 5729
+2050 5716
+2043 5710
+2024 5703
+1999 5703
+1980 5710
+1974 5716
+1968 5729
+1968 5735
+1974 5741
+1980 5735
+1974 5729
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 5766
+2050 5747
+2050 5729
+2043 5716
+2037 5710
+2024 5703
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2106 5835
+2093 5773
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+2093 5773
+2106 5785
+2125 5791
+2144 5791
+2163 5785
+2175 5773
+2181 5754
+2181 5741
+2175 5722
+2163 5710
+2144 5703
+2125 5703
+2106 5710
+2100 5716
+2093 5729
+2093 5735
+2100 5741
+2106 5735
+2100 5729
+19 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2144 5791
+2156 5785
+2169 5773
+2175 5754
+2175 5741
+2169 5722
+2156 5710
+2144 5703
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2106 5835
+2169 5835
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2106 5829
+2137 5829
+2169 5835
+3 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9078 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2442 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 6962
+1980 6956
+1974 6950
+1968 6956
+1968 6962
+1974 6975
+1980 6981
+1999 6987
+2024 6987
+2043 6981
+2050 6969
+2050 6950
+2043 6937
+2024 6931
+2006 6931
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 6987
+2037 6981
+2043 6969
+2043 6950
+2037 6937
+2024 6931
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 6931
+2037 6925
+2050 6912
+2056 6899
+2056 6881
+2050 6868
+2043 6862
+2024 6855
+1999 6855
+1980 6862
+1974 6868
+1968 6881
+1968 6887
+1974 6893
+1980 6887
+1974 6881
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 6918
+2050 6899
+2050 6881
+2043 6868
+2037 6862
+2024 6855
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2169 6969
+2163 6962
+2169 6956
+2175 6962
+2175 6969
+2169 6981
+2156 6987
+2137 6987
+2119 6981
+2106 6969
+2100 6956
+2093 6931
+2093 6893
+2100 6874
+2112 6862
+2131 6855
+2144 6855
+2163 6862
+2175 6874
+2181 6893
+2181 6899
+2175 6918
+2163 6931
+2144 6937
+2137 6937
+2119 6931
+2106 6918
+2100 6899
+28 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2137 6987
+2125 6981
+2112 6969
+2106 6956
+2100 6931
+2100 6893
+2106 6874
+2119 6862
+2131 6855
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2144 6855
+2156 6862
+2169 6874
+2175 6893
+2175 6899
+2169 6918
+2156 6931
+2144 6937
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6912
+9078 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6912
+2442 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 8114
+1980 8108
+1974 8102
+1968 8108
+1968 8114
+1974 8127
+1980 8133
+1999 8139
+2024 8139
+2043 8133
+2050 8121
+2050 8102
+2043 8089
+2024 8083
+2006 8083
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 8139
+2037 8133
+2043 8121
+2043 8102
+2037 8089
+2024 8083
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 8083
+2037 8077
+2050 8064
+2056 8051
+2056 8033
+2050 8020
+2043 8014
+2024 8007
+1999 8007
+1980 8014
+1974 8020
+1968 8033
+1968 8039
+1974 8045
+1980 8039
+1974 8033
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 8070
+2050 8051
+2050 8033
+2043 8020
+2037 8014
+2024 8007
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2093 8139
+2093 8102
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2093 8114
+2100 8127
+2112 8139
+2125 8139
+2156 8121
+2169 8121
+2175 8127
+2181 8139
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2100 8127
+2112 8133
+2125 8133
+2156 8121
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2181 8139
+2181 8121
+2175 8102
+2150 8070
+2144 8058
+2137 8039
+2137 8007
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+2175 8102
+2144 8070
+2137 8058
+2131 8039
+2131 8007
+5 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8064
+9078 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8064
+2442 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1974 9266
+1980 9260
+1974 9254
+1968 9260
+1968 9266
+1974 9279
+1980 9285
+1999 9291
+2024 9291
+2043 9285
+2050 9273
+2050 9254
+2043 9241
+2024 9235
+2006 9235
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2024 9291
+2037 9285
+2043 9273
+2043 9254
+2037 9241
+2024 9235
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2024 9235
+2037 9229
+2050 9216
+2056 9203
+2056 9185
+2050 9172
+2043 9166
+2024 9159
+1999 9159
+1980 9166
+1974 9172
+1968 9185
+1968 9191
+1974 9197
+1980 9191
+1974 9185
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2043 9222
+2050 9203
+2050 9185
+2043 9172
+2037 9166
+2024 9159
+6 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+2150 9291
+2169 9285
+2175 9273
+2175 9254
+2169 9241
+2150 9235
+2125 9235
+2106 9241
+2100 9254
+2100 9273
+2106 9285
+2125 9291
+12 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2125 9291
+2112 9285
+2106 9273
+2106 9254
+2112 9241
+2125 9235
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2150 9235
+2163 9241
+2169 9254
+2169 9273
+2163 9285
+2150 9291
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2125 9235
+2106 9229
+2100 9222
+2093 9210
+2093 9185
+2100 9172
+2106 9166
+2125 9159
+2150 9159
+2169 9166
+2175 9172
+2181 9185
+2181 9210
+2175 9222
+2169 9229
+2150 9235
+16 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2125 9235
+2112 9229
+2106 9222
+2100 9210
+2100 9185
+2106 9172
+2112 9166
+2125 9159
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2150 9159
+2163 9166
+2169 9172
+2175 9185
+2175 9210
+2169 9222
+2163 9229
+2150 9235
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2880
+9161 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2880
+2359 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9161 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2359 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9161 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2359 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9161 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2359 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5184
+9161 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5184
+2359 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6336
+9161 6336
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6336
+2359 6336
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6912
+9161 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6912
+2359 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7488
+9161 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7488
+2359 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8064
+9161 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8064
+2359 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8640
+9161 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8640
+2359 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4384 1906
+4384 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4390 1906
+4390 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4365 1906
+4390 1906
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4365 1774
+4409 1774
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4491 1862
+4510 1856
+4522 1843
+4528 1824
+4528 1812
+4522 1793
+4510 1780
+4491 1774
+4478 1774
+4459 1780
+4447 1793
+4440 1812
+4440 1824
+4447 1843
+4459 1856
+4478 1862
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4478 1862
+4466 1856
+4453 1843
+4447 1824
+4447 1812
+4453 1793
+4466 1780
+4478 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+4491 1774
+4503 1780
+4516 1793
+4522 1812
+4522 1824
+4516 1843
+4503 1856
+4491 1862
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4579 1862
+4579 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4585 1862
+4585 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+4585 1843
+4598 1856
+4616 1862
+4629 1862
+4648 1856
+4654 1843
+4654 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4629 1862
+4642 1856
+4648 1843
+4648 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4560 1862
+4585 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4560 1774
+4604 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4629 1774
+4673 1774
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4748 1862
+4761 1856
+4767 1849
+4773 1837
+4773 1824
+4767 1812
+4761 1805
+4748 1799
+4736 1799
+4723 1805
+4717 1812
+4711 1824
+4711 1837
+4717 1849
+4723 1856
+4736 1862
+16 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4723 1856
+4717 1843
+4717 1818
+4723 1805
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4761 1805
+4767 1818
+4767 1843
+4761 1856
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+4767 1849
+4773 1856
+4786 1862
+4786 1856
+4773 1856
+5 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+4717 1812
+4711 1805
+4704 1793
+4704 1787
+4711 1774
+4729 1768
+4761 1768
+4780 1761
+4786 1755
+9 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+4704 1787
+4711 1780
+4729 1774
+4761 1774
+4780 1768
+4786 1755
+4786 1749
+4780 1736
+4761 1730
+4723 1730
+4704 1736
+4698 1749
+4698 1755
+4704 1768
+4723 1774
+15 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4843 1900
+4836 1893
+4830 1900
+4836 1906
+4 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4836 1862
+4836 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4843 1862
+4843 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4817 1862
+4843 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4817 1774
+4861 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+4905 1906
+4905 1799
+4912 1780
+4924 1774
+4937 1774
+4949 1780
+4956 1793
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4912 1906
+4912 1799
+4918 1780
+4924 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4887 1862
+4937 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5000 1862
+5000 1793
+5006 1780
+5025 1774
+5037 1774
+5056 1780
+5069 1793
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5006 1862
+5006 1793
+5012 1780
+5025 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 1862
+5069 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5075 1862
+5075 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4981 1862
+5006 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5050 1862
+5075 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 1774
+5094 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5201 1906
+5201 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5207 1906
+5207 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+5201 1843
+5188 1856
+5176 1862
+5163 1862
+5144 1856
+5132 1843
+5125 1824
+5125 1812
+5132 1793
+5144 1780
+5163 1774
+5176 1774
+5188 1780
+5201 1793
+14 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5163 1862
+5150 1856
+5138 1843
+5132 1824
+5132 1812
+5138 1793
+5150 1780
+5163 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5182 1906
+5207 1906
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5201 1774
+5226 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5264 1824
+5339 1824
+5339 1837
+5333 1849
+5326 1856
+5314 1862
+5295 1862
+5276 1856
+5264 1843
+5257 1824
+5257 1812
+5264 1793
+5276 1780
+5295 1774
+5308 1774
+5326 1780
+5339 1793
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5333 1824
+5333 1843
+5326 1856
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5295 1862
+5282 1856
+5270 1843
+5264 1824
+5264 1812
+5270 1793
+5282 1780
+5295 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5528 1931
+5515 1918
+5502 1900
+5490 1875
+5484 1843
+5484 1818
+5490 1787
+5502 1761
+5515 1743
+5528 1730
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5515 1918
+5502 1893
+5496 1875
+5490 1843
+5490 1818
+5496 1787
+5502 1768
+5515 1743
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5571 1831
+5685 1831
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5842 1862
+5842 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5848 1862
+5848 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5848 1843
+5861 1856
+5879 1862
+5892 1862
+5911 1856
+5917 1843
+5917 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5892 1862
+5905 1856
+5911 1843
+5911 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5917 1843
+5930 1856
+5949 1862
+5961 1862
+5980 1856
+5986 1843
+5986 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5961 1862
+5974 1856
+5980 1843
+5980 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5823 1862
+5848 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5823 1774
+5867 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5892 1774
+5936 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5961 1774
+6005 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+6043 1824
+6118 1824
+6118 1837
+6112 1849
+6106 1856
+6093 1862
+6074 1862
+6055 1856
+6043 1843
+6036 1824
+6036 1812
+6043 1793
+6055 1780
+6074 1774
+6087 1774
+6106 1780
+6118 1793
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6112 1824
+6112 1843
+6106 1856
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6074 1862
+6062 1856
+6049 1843
+6043 1824
+6043 1812
+6049 1793
+6062 1780
+6074 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+6168 1849
+6168 1843
+6162 1843
+6162 1849
+6168 1856
+6181 1862
+6206 1862
+6219 1856
+6225 1849
+6231 1837
+6231 1793
+6238 1780
+6244 1774
+13 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+6225 1849
+6225 1793
+6231 1780
+6244 1774
+6250 1774
+5 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+6225 1837
+6219 1831
+6181 1824
+6162 1818
+6156 1805
+6156 1793
+6162 1780
+6181 1774
+6200 1774
+6212 1780
+6225 1793
+11 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6181 1824
+6168 1818
+6162 1805
+6162 1793
+6168 1780
+6181 1774
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6294 1862
+6294 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6300 1862
+6300 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6300 1843
+6313 1856
+6332 1862
+6344 1862
+6363 1856
+6370 1843
+6370 1774
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6344 1862
+6357 1856
+6363 1843
+6363 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6275 1862
+6300 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6275 1774
+6319 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6344 1774
+6388 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6483 1849
+6489 1862
+6489 1837
+6483 1849
+6476 1856
+6464 1862
+6439 1862
+6426 1856
+6420 1849
+6420 1837
+6426 1831
+6439 1824
+6470 1812
+6483 1805
+6489 1799
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6420 1843
+6426 1837
+6439 1831
+6470 1818
+6483 1812
+6489 1805
+6489 1787
+6483 1780
+6470 1774
+6445 1774
+6432 1780
+6426 1787
+6420 1799
+6420 1774
+6426 1787
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6633 1862
+6659 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6640 1862
+6659 1793
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6684 1862
+6659 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6684 1862
+6709 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6690 1862
+6709 1793
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6734 1862
+6709 1774
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6615 1862
+6659 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6715 1862
+6753 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+6784 1824
+6860 1824
+6860 1837
+6853 1849
+6847 1856
+6835 1862
+6816 1862
+6797 1856
+6784 1843
+6778 1824
+6778 1812
+6784 1793
+6797 1780
+6816 1774
+6828 1774
+6847 1780
+6860 1793
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+6853 1824
+6853 1843
+6847 1856
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6816 1862
+6803 1856
+6791 1843
+6784 1824
+6784 1812
+6791 1793
+6803 1780
+6816 1774
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6960 1849
+6966 1862
+6966 1837
+6960 1849
+6954 1856
+6941 1862
+6916 1862
+6904 1856
+6897 1849
+6897 1837
+6904 1831
+6916 1824
+6948 1812
+6960 1805
+6966 1799
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+6897 1843
+6904 1837
+6916 1831
+6948 1818
+6960 1812
+6966 1805
+6966 1787
+6960 1780
+6948 1774
+6922 1774
+6910 1780
+6904 1787
+6897 1799
+6897 1774
+6904 1787
+15 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7017 1906
+7017 1799
+7023 1780
+7036 1774
+7048 1774
+7061 1780
+7067 1793
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+7023 1906
+7023 1799
+7029 1780
+7036 1774
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6998 1862
+7048 1862
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7098 1931
+7111 1918
+7124 1900
+7136 1875
+7142 1843
+7142 1818
+7136 1787
+7124 1761
+7111 1743
+7098 1730
+10 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7111 1918
+7124 1893
+7130 1875
+7136 1843
+7136 1818
+7130 1787
+7124 1768
+7111 1743
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 5370
+1804 5370
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 5377
+1804 5377
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 5352
+1672 5377
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 5352
+1804 5396
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+1729 5440
+1735 5440
+1735 5433
+1729 5433
+1723 5440
+1716 5452
+1716 5477
+1723 5490
+1729 5496
+1742 5502
+1786 5502
+1798 5509
+1804 5515
+13 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+1729 5496
+1786 5496
+1798 5502
+1804 5515
+1804 5521
+5 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+1742 5496
+1748 5490
+1754 5452
+1760 5433
+1773 5427
+1786 5427
+1798 5433
+1804 5452
+1804 5471
+1798 5484
+1786 5496
+11 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1754 5452
+1760 5440
+1773 5433
+1786 5433
+1798 5440
+1804 5452
+6 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1672 5565
+1779 5565
+1798 5571
+1804 5584
+1804 5597
+1798 5609
+1786 5615
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1672 5571
+1779 5571
+1798 5578
+1804 5584
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5546
+1716 5597
+2 MLine
+End
+
+Begin %I Poly
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1679 5666
+1685 5659
+1679 5653
+1672 5659
+4 Poly
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5659
+1804 5659
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5666
+1804 5666
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5641
+1716 5666
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 5641
+1804 5685
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1672 5729
+1779 5729
+1798 5735
+1804 5747
+1804 5760
+1798 5773
+1786 5779
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1672 5735
+1779 5735
+1798 5741
+1804 5747
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5710
+1716 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1716 5823
+1786 5823
+1798 5829
+1804 5848
+1804 5861
+1798 5879
+1786 5892
+7 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 5829
+1786 5829
+1798 5835
+1804 5848
+4 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5892
+1804 5892
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5898
+1804 5898
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5804
+1716 5829
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1716 5873
+1716 5898
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 5892
+1804 5917
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 6024
+1804 6024
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 6030
+1804 6030
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+1735 6024
+1723 6011
+1716 5999
+1716 5986
+1723 5967
+1735 5955
+1754 5949
+1767 5949
+1786 5955
+1798 5967
+1804 5986
+1804 5999
+1798 6011
+1786 6024
+14 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1716 5986
+1723 5974
+1735 5961
+1754 5955
+1767 5955
+1786 5961
+1798 5974
+1804 5986
+8 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1672 6005
+1672 6030
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1804 6024
+1804 6049
+2 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+1754 6087
+1754 6162
+1742 6162
+1729 6156
+1723 6150
+1716 6137
+1716 6118
+1723 6099
+1735 6087
+1754 6080
+1767 6080
+1786 6087
+1798 6099
+1804 6118
+1804 6131
+1798 6150
+1786 6162
+17 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1754 6156
+1735 6156
+1723 6150
+3 MLine
+End
+
+Begin %I MLine
+[0.4461382 0 0 0.4461382 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1716 6118
+1723 6106
+1735 6093
+1754 6087
+1767 6087
+1786 6093
+1798 6106
+1804 6118
+8 MLine
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5395 6543 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+3045 4078 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5138 5898 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6451 5080 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4658 8398 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8920 3214 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5407 6647 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4669 5933 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5268 6785 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5084 2696 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4385 8467 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4324 6359 32 Circ
+End
+
+Begin %I Circ
+[1.08 0 0 1.08 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5395 6543 32 Circ
+End
+
+Begin %I Poly
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+4324 6359
+4385 8467
+5084 2696
+5268 6785
+4669 5933
+5407 6647
+8920 3214
+4658 8398
+6451 5080
+5138 5898
+3045 4078
+5395 6543
+12 Poly
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/integration.texi b/gsl-1.9/doc/integration.texi
new file mode 100644
index 0000000..62afb3e
--- /dev/null
+++ b/gsl-1.9/doc/integration.texi
@@ -0,0 +1,854 @@
+@cindex quadrature
+@cindex numerical integration (quadrature)
+@cindex integration, numerical (quadrature)
+@cindex QUADPACK
+
+This chapter describes routines for performing numerical integration
+(quadrature) of a function in one dimension. There are routines for
+adaptive and non-adaptive integration of general functions, with
+specialised routines for specific cases. These include integration over
+infinite and semi-infinite ranges, singular integrals, including
+logarithmic singularities, computation of Cauchy principal values and
+oscillatory integrals. The library reimplements the algorithms used in
+@sc{quadpack}, a numerical integration package written by Piessens,
+Doncker-Kapenga, Uberhuber and Kahaner. Fortran code for @sc{quadpack} is
+available on Netlib.
+
+The functions described in this chapter are declared in the header file
+@file{gsl_integration.h}.
+
+@menu
+* Numerical Integration Introduction::
+* QNG non-adaptive Gauss-Kronrod integration::
+* QAG adaptive integration::
+* QAGS adaptive integration with singularities::
+* QAGP adaptive integration with known singular points::
+* QAGI adaptive integration on infinite intervals::
+* QAWC adaptive integration for Cauchy principal values::
+* QAWS adaptive integration for singular functions::
+* QAWO adaptive integration for oscillatory functions::
+* QAWF adaptive integration for Fourier integrals::
+* Numerical integration error codes::
+* Numerical integration examples::
+* Numerical integration References and Further Reading::
+@end menu
+
+@node Numerical Integration Introduction
+@section Introduction
+
+Each algorithm computes an approximation to a definite integral of the
+form,
+@tex
+\beforedisplay
+$$
+I = \int_a^b f(x) w(x) \,dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b f(x) w(x) dx
+@end example
+
+@end ifinfo
+@noindent
+where @math{w(x)} is a weight function (for general integrands @math{w(x)=1}).
+The user provides absolute and relative error bounds
+@c{$(\hbox{\it epsabs}, \hbox{\it epsrel}\,)$}
+@math{(epsabs, epsrel)} which specify the following accuracy requirement,
+@tex
+\beforedisplay
+$$
+|\hbox{\it RESULT} - I| \leq \max(\hbox{\it epsabs}, \hbox{\it epsrel}\, |I|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|RESULT - I| <= max(epsabs, epsrel |I|)
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$\hbox{\it RESULT}$}
+@math{RESULT} is the numerical approximation obtained by the
+algorithm. The algorithms attempt to estimate the absolute error
+@c{$\hbox{\it ABSERR} = |\hbox{\it RESULT} - I|$}
+@math{ABSERR = |RESULT - I|} in such a way that the following inequality
+holds,
+@tex
+\beforedisplay
+$$
+|\hbox{\it RESULT} - I| \leq \hbox{\it ABSERR} \leq \max(\hbox{\it epsabs}, \hbox{\it epsrel}\,|I|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|RESULT - I| <= ABSERR <= max(epsabs, epsrel |I|)
+@end example
+
+@end ifinfo
+@noindent
+The routines will fail to converge if the error bounds are too
+stringent, but always return the best approximation obtained up to that
+stage.
+
+The algorithms in @sc{quadpack} use a naming convention based on the
+following letters,
+
+@display
+@code{Q} - quadrature routine
+
+@code{N} - non-adaptive integrator
+@code{A} - adaptive integrator
+
+@code{G} - general integrand (user-defined)
+@code{W} - weight function with integrand
+
+@code{S} - singularities can be more readily integrated
+@code{P} - points of special difficulty can be supplied
+@code{I} - infinite range of integration
+@code{O} - oscillatory weight function, cos or sin
+@code{F} - Fourier integral
+@code{C} - Cauchy principal value
+@end display
+
+@noindent
+The algorithms are built on pairs of quadrature rules, a higher order
+rule and a lower order rule. The higher order rule is used to compute
+the best approximation to an integral over a small range. The
+difference between the results of the higher order rule and the lower
+order rule gives an estimate of the error in the approximation.
+
+@menu
+* Integrands without weight functions::
+* Integrands with weight functions::
+* Integrands with singular weight functions::
+@end menu
+
+@node Integrands without weight functions
+@subsection Integrands without weight functions
+@cindex Gauss-Kronrod quadrature
+The algorithms for general functions (without a weight function) are
+based on Gauss-Kronrod rules.
+
+A Gauss-Kronrod rule begins with a classical Gaussian quadrature rule of
+order @math{m}. This is extended with additional points between each of
+the abscissae to give a higher order Kronrod rule of order @math{2m+1}.
+The Kronrod rule is efficient because it reuses existing function
+evaluations from the Gaussian rule.
+
+The higher order Kronrod rule is used as the best approximation to the
+integral, and the difference between the two rules is used as an
+estimate of the error in the approximation.
+
+@node Integrands with weight functions
+@subsection Integrands with weight functions
+@cindex Clenshaw-Curtis quadrature
+@cindex Modified Clenshaw-Curtis quadrature
+For integrands with weight functions the algorithms use Clenshaw-Curtis
+quadrature rules.
+
+A Clenshaw-Curtis rule begins with an @math{n}-th order Chebyshev
+polynomial approximation to the integrand. This polynomial can be
+integrated exactly to give an approximation to the integral of the
+original function. The Chebyshev expansion can be extended to higher
+orders to improve the approximation and provide an estimate of the
+error.
+
+@node Integrands with singular weight functions
+@subsection Integrands with singular weight functions
+
+The presence of singularities (or other behavior) in the integrand can
+cause slow convergence in the Chebyshev approximation. The modified
+Clenshaw-Curtis rules used in @sc{quadpack} separate out several common
+weight functions which cause slow convergence.
+
+These weight functions are integrated analytically against the Chebyshev
+polynomials to precompute @dfn{modified Chebyshev moments}. Combining
+the moments with the Chebyshev approximation to the function gives the
+desired integral. The use of analytic integration for the singular part
+of the function allows exact cancellations and substantially improves
+the overall convergence behavior of the integration.
+
+
+@node QNG non-adaptive Gauss-Kronrod integration
+@section QNG non-adaptive Gauss-Kronrod integration
+@cindex QNG quadrature algorithm
+
+The QNG algorithm is a non-adaptive procedure which uses fixed
+Gauss-Kronrod abscissae to sample the integrand at a maximum of 87
+points. It is provided for fast integration of smooth functions.
+
+@deftypefun int gsl_integration_qng (const gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{epsabs}, double @var{epsrel}, double * @var{result}, double * @var{abserr}, size_t * @var{neval})
+
+This function applies the Gauss-Kronrod 10-point, 21-point, 43-point and
+87-point integration rules in succession until an estimate of the
+integral of @math{f} over @math{(a,b)} is achieved within the desired
+absolute and relative error limits, @var{epsabs} and @var{epsrel}. The
+function returns the final approximation, @var{result}, an estimate of
+the absolute error, @var{abserr} and the number of function evaluations
+used, @var{neval}. The Gauss-Kronrod rules are designed in such a way
+that each rule uses all the results of its predecessors, in order to
+minimize the total number of function evaluations.
+@end deftypefun
+
+
+@node QAG adaptive integration
+@section QAG adaptive integration
+@cindex QAG quadrature algorithm
+
+The QAG algorithm is a simple adaptive integration procedure. The
+integration region is divided into subintervals, and on each iteration
+the subinterval with the largest estimated error is bisected. This
+reduces the overall error rapidly, as the subintervals become
+concentrated around local difficulties in the integrand. These
+subintervals are managed by a @code{gsl_integration_workspace} struct,
+which handles the memory for the subinterval ranges, results and error
+estimates.
+
+@deftypefun {gsl_integration_workspace *} gsl_integration_workspace_alloc (size_t @var{n})
+This function allocates a workspace sufficient to hold @var{n} double
+precision intervals, their integration results and error estimates.
+@end deftypefun
+
+@deftypefun void gsl_integration_workspace_free (gsl_integration_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qag (const gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, int @var{key}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function applies an integration rule adaptively until an estimate
+of the integral of @math{f} over @math{(a,b)} is achieved within the
+desired absolute and relative error limits, @var{epsabs} and
+@var{epsrel}. The function returns the final approximation,
+@var{result}, and an estimate of the absolute error, @var{abserr}. The
+integration rule is determined by the value of @var{key}, which should
+be chosen from the following symbolic names,
+
+@example
+GSL_INTEG_GAUSS15 (key = 1)
+GSL_INTEG_GAUSS21 (key = 2)
+GSL_INTEG_GAUSS31 (key = 3)
+GSL_INTEG_GAUSS41 (key = 4)
+GSL_INTEG_GAUSS51 (key = 5)
+GSL_INTEG_GAUSS61 (key = 6)
+@end example
+
+@noindent
+corresponding to the 15, 21, 31, 41, 51 and 61 point Gauss-Kronrod
+rules. The higher-order rules give better accuracy for smooth functions,
+while lower-order rules save time when the function contains local
+difficulties, such as discontinuities.
+
+On each iteration the adaptive integration strategy bisects the interval
+with the largest error estimate. The subintervals and their results are
+stored in the memory provided by @var{workspace}. The maximum number of
+subintervals is given by @var{limit}, which may not exceed the allocated
+size of the workspace.
+@end deftypefun
+
+
+@node QAGS adaptive integration with singularities
+@section QAGS adaptive integration with singularities
+@cindex QAGS quadrature algorithm
+
+The presence of an integrable singularity in the integration region
+causes an adaptive routine to concentrate new subintervals around the
+singularity. As the subintervals decrease in size the successive
+approximations to the integral converge in a limiting fashion. This
+approach to the limit can be accelerated using an extrapolation
+procedure. The QAGS algorithm combines adaptive bisection with the Wynn
+epsilon-algorithm to speed up the integration of many types of
+integrable singularities.
+
+@deftypefun int gsl_integration_qags (const gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function applies the Gauss-Kronrod 21-point integration rule
+adaptively until an estimate of the integral of @math{f} over
+@math{(a,b)} is achieved within the desired absolute and relative error
+limits, @var{epsabs} and @var{epsrel}. The results are extrapolated
+using the epsilon-algorithm, which accelerates the convergence of the
+integral in the presence of discontinuities and integrable
+singularities. The function returns the final approximation from the
+extrapolation, @var{result}, and an estimate of the absolute error,
+@var{abserr}. The subintervals and their results are stored in the
+memory provided by @var{workspace}. The maximum number of subintervals
+is given by @var{limit}, which may not exceed the allocated size of the
+workspace.
+
+@end deftypefun
+
+@node QAGP adaptive integration with known singular points
+@section QAGP adaptive integration with known singular points
+@cindex QAGP quadrature algorithm
+@cindex singular points, specifying positions in quadrature
+@deftypefun int gsl_integration_qagp (const gsl_function * @var{f}, double * @var{pts}, size_t @var{npts}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function applies the adaptive integration algorithm QAGS taking
+account of the user-supplied locations of singular points. The array
+@var{pts} of length @var{npts} should contain the endpoints of the
+integration ranges defined by the integration region and locations of
+the singularities. For example, to integrate over the region
+@math{(a,b)} with break-points at @math{x_1, x_2, x_3} (where
+@math{a < x_1 < x_2 < x_3 < b}) the following @var{pts} array should be used
+
+@example
+pts[0] = a
+pts[1] = x_1
+pts[2] = x_2
+pts[3] = x_3
+pts[4] = b
+@end example
+
+@noindent
+with @var{npts} = 5.
+
+@noindent
+If you know the locations of the singular points in the integration
+region then this routine will be faster than @code{QAGS}.
+
+@end deftypefun
+
+@node QAGI adaptive integration on infinite intervals
+@section QAGI adaptive integration on infinite intervals
+@cindex QAGI quadrature algorithm
+
+@deftypefun int gsl_integration_qagi (gsl_function * @var{f}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the integral of the function @var{f} over the
+infinite interval @math{(-\infty,+\infty)}. The integral is mapped onto the
+semi-open interval @math{(0,1]} using the transformation @math{x = (1-t)/t},
+@tex
+\beforedisplay
+$$
+\int_{-\infty}^{+\infty} dx \, f(x)
+ = \int_0^1 dt \, (f((1-t)/t) + f(-(1-t)/t))/t^2.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_@{-\infty@}^@{+\infty@} dx f(x) =
+ \int_0^1 dt (f((1-t)/t) + f((-1+t)/t))/t^2.
+@end example
+
+@end ifinfo
+@noindent
+It is then integrated using the QAGS algorithm. The normal 21-point
+Gauss-Kronrod rule of QAGS is replaced by a 15-point rule, because the
+transformation can generate an integrable singularity at the origin. In
+this case a lower-order rule is more efficient.
+@end deftypefun
+
+@deftypefun int gsl_integration_qagiu (gsl_function * @var{f}, double @var{a}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the integral of the function @var{f} over the
+semi-infinite interval @math{(a,+\infty)}. The integral is mapped onto the
+semi-open interval @math{(0,1]} using the transformation @math{x = a + (1-t)/t},
+@tex
+\beforedisplay
+$$
+\int_{a}^{+\infty} dx \, f(x)
+ = \int_0^1 dt \, f(a + (1-t)/t)/t^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_@{a@}^@{+\infty@} dx f(x) =
+ \int_0^1 dt f(a + (1-t)/t)/t^2
+@end example
+
+@end ifinfo
+@noindent
+and then integrated using the QAGS algorithm.
+@end deftypefun
+
+@deftypefun int gsl_integration_qagil (gsl_function * @var{f}, double @var{b}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+This function computes the integral of the function @var{f} over the
+semi-infinite interval @math{(-\infty,b)}. The integral is mapped onto the
+semi-open interval @math{(0,1]} using the transformation @math{x = b - (1-t)/t},
+@tex
+\beforedisplay
+$$
+\int_{-\infty}^{b} dx \, f(x)
+ = \int_0^1 dt \, f(b - (1-t)/t)/t^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_@{+\infty@}^@{b@} dx f(x) =
+ \int_0^1 dt f(b - (1-t)/t)/t^2
+@end example
+
+@end ifinfo
+@noindent
+and then integrated using the QAGS algorithm.
+@end deftypefun
+
+@node QAWC adaptive integration for Cauchy principal values
+@section QAWC adaptive integration for Cauchy principal values
+@cindex QAWC quadrature algorithm
+@cindex Cauchy principal value, by numerical quadrature
+@deftypefun int gsl_integration_qawc (gsl_function * @var{f}, double @var{a}, double @var{b}, double @var{c}, double @var{epsabs}, double @var{epsrel}, size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the Cauchy principal value of the integral of
+@math{f} over @math{(a,b)}, with a singularity at @var{c},
+@tex
+\beforedisplay
+$$
+I = \int_a^b dx\, {f(x) \over x - c}
+ = \lim_{\epsilon \to 0}
+\left\{
+\int_a^{c-\epsilon} dx\, {f(x) \over x - c}
++
+\int_{c+\epsilon}^b dx\, {f(x) \over x - c}
+\right\}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b dx f(x) / (x - c)
+@end example
+
+@end ifinfo
+@noindent
+The adaptive bisection algorithm of QAG is used, with modifications to
+ensure that subdivisions do not occur at the singular point @math{x = c}.
+When a subinterval contains the point @math{x = c} or is close to
+it then a special 25-point modified Clenshaw-Curtis rule is used to control
+the singularity. Further away from the
+singularity the algorithm uses an ordinary 15-point Gauss-Kronrod
+integration rule.
+
+@end deftypefun
+
+@node QAWS adaptive integration for singular functions
+@section QAWS adaptive integration for singular functions
+@cindex QAWS quadrature algorithm
+@cindex singular functions, numerical integration of
+The QAWS algorithm is designed for integrands with algebraic-logarithmic
+singularities at the end-points of an integration region. In order to
+work efficiently the algorithm requires a precomputed table of
+Chebyshev moments.
+
+@deftypefun {gsl_integration_qaws_table *} gsl_integration_qaws_table_alloc (double @var{alpha}, double @var{beta}, int @var{mu}, int @var{nu})
+
+This function allocates space for a @code{gsl_integration_qaws_table}
+struct describing a singular weight function
+@math{W(x)} with the parameters @math{(\alpha, \beta, \mu, \nu)},
+@tex
+\beforedisplay
+$$
+W(x) = (x - a)^\alpha (b - x)^\beta \log^\mu (x - a) \log^\nu (b - x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+W(x) = (x-a)^alpha (b-x)^beta log^mu (x-a) log^nu (b-x)
+@end example
+
+@end ifinfo
+@noindent
+where @math{\alpha > -1}, @math{\beta > -1}, and @math{\mu = 0, 1},
+@math{\nu = 0, 1}. The weight function can take four different forms
+depending on the values of @math{\mu} and @math{\nu},
+@tex
+\beforedisplay
+$$
+\matrix{
+W(x) = (x - a)^\alpha (b - x)^\beta
+ \hfill~ (\mu = 0, \nu = 0) \cr
+W(x) = (x - a)^\alpha (b - x)^\beta \log(x - a)
+ \hfill~ (\mu = 1, \nu = 0) \cr
+W(x) = (x - a)^\alpha (b - x)^\beta \log(b - x)
+ \hfill~ (\mu = 0, \nu = 1) \cr
+W(x) = (x - a)^\alpha (b - x)^\beta \log(x - a) \log(b - x)
+ \hfill~ (\mu = 1, \nu = 1)
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+W(x) = (x-a)^alpha (b-x)^beta (mu = 0, nu = 0)
+W(x) = (x-a)^alpha (b-x)^beta log(x-a) (mu = 1, nu = 0)
+W(x) = (x-a)^alpha (b-x)^beta log(b-x) (mu = 0, nu = 1)
+W(x) = (x-a)^alpha (b-x)^beta log(x-a) log(b-x) (mu = 1, nu = 1)
+@end example
+
+@end ifinfo
+@noindent
+The singular points @math{(a,b)} do not have to be specified until the
+integral is computed, where they are the endpoints of the integration
+range.
+
+The function returns a pointer to the newly allocated table
+@code{gsl_integration_qaws_table} if no errors were detected, and 0 in
+the case of error.
+@end deftypefun
+
+@deftypefun int gsl_integration_qaws_table_set (gsl_integration_qaws_table * @var{t}, double @var{alpha}, double @var{beta}, int @var{mu}, int @var{nu})
+This function modifies the parameters @math{(\alpha, \beta, \mu, \nu)} of
+an existing @code{gsl_integration_qaws_table} struct @var{t}.
+@end deftypefun
+
+@deftypefun void gsl_integration_qaws_table_free (gsl_integration_qaws_table * @var{t})
+This function frees all the memory associated with the
+@code{gsl_integration_qaws_table} struct @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qaws (gsl_function * @var{f}, const double @var{a}, const double @var{b}, gsl_integration_qaws_table * @var{t}, const double @var{epsabs}, const double @var{epsrel}, const size_t @var{limit}, gsl_integration_workspace * @var{workspace}, double * @var{result}, double * @var{abserr})
+
+This function computes the integral of the function @math{f(x)} over the
+interval @math{(a,b)} with the singular weight function
+@math{(x-a)^\alpha (b-x)^\beta \log^\mu (x-a) \log^\nu (b-x)}. The parameters
+of the weight function @math{(\alpha, \beta, \mu, \nu)} are taken from the
+table @var{t}. The integral is,
+@tex
+\beforedisplay
+$$
+I = \int_a^b dx\, f(x) (x - a)^\alpha (b - x)^\beta
+ \log^\mu (x - a) \log^\nu (b - x).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b dx f(x) (x-a)^alpha (b-x)^beta log^mu (x-a) log^nu (b-x).
+@end example
+
+@end ifinfo
+@noindent
+The adaptive bisection algorithm of QAG is used. When a subinterval
+contains one of the endpoints then a special 25-point modified
+Clenshaw-Curtis rule is used to control the singularities. For
+subintervals which do not include the endpoints an ordinary 15-point
+Gauss-Kronrod integration rule is used.
+
+@end deftypefun
+
+@node QAWO adaptive integration for oscillatory functions
+@section QAWO adaptive integration for oscillatory functions
+@cindex QAWO quadrature algorithm
+@cindex oscillatory functions, numerical integration of
+The QAWO algorithm is designed for integrands with an oscillatory
+factor, @math{\sin(\omega x)} or @math{\cos(\omega x)}. In order to
+work efficiently the algorithm requires a table of Chebyshev moments
+which must be pre-computed with calls to the functions below.
+
+@deftypefun {gsl_integration_qawo_table *} gsl_integration_qawo_table_alloc (double @var{omega}, double @var{L}, enum gsl_integration_qawo_enum @var{sine}, size_t @var{n})
+
+This function allocates space for a @code{gsl_integration_qawo_table}
+struct and its associated workspace describing a sine or cosine weight
+function @math{W(x)} with the parameters @math{(\omega, L)},
+@tex
+\beforedisplay
+$$
+\eqalign{
+W(x) & = \left\{\matrix{\sin(\omega x) \cr \cos(\omega x)} \right\}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+W(x) = sin(omega x)
+W(x) = cos(omega x)
+@end example
+
+@end ifinfo
+@noindent
+The parameter @var{L} must be the length of the interval over which the
+function will be integrated @math{L = b - a}. The choice of sine or
+cosine is made with the parameter @var{sine} which should be chosen from
+one of the two following symbolic values:
+
+@example
+GSL_INTEG_COSINE
+GSL_INTEG_SINE
+@end example
+
+@noindent
+The @code{gsl_integration_qawo_table} is a table of the trigonometric
+coefficients required in the integration process. The parameter @var{n}
+determines the number of levels of coefficients that are computed. Each
+level corresponds to one bisection of the interval @math{L}, so that
+@var{n} levels are sufficient for subintervals down to the length
+@math{L/2^n}. The integration routine @code{gsl_integration_qawo}
+returns the error @code{GSL_ETABLE} if the number of levels is
+insufficient for the requested accuracy.
+
+@end deftypefun
+
+@deftypefun int gsl_integration_qawo_table_set (gsl_integration_qawo_table * @var{t}, double @var{omega}, double @var{L}, enum gsl_integration_qawo_enum @var{sine})
+This function changes the parameters @var{omega}, @var{L} and @var{sine}
+of the existing workspace @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qawo_table_set_length (gsl_integration_qawo_table * @var{t}, double @var{L})
+This function allows the length parameter @var{L} of the workspace
+@var{t} to be changed.
+@end deftypefun
+
+@deftypefun void gsl_integration_qawo_table_free (gsl_integration_qawo_table * @var{t})
+This function frees all the memory associated with the workspace @var{t}.
+@end deftypefun
+
+@deftypefun int gsl_integration_qawo (gsl_function * @var{f}, const double @var{a}, const double @var{epsabs}, const double @var{epsrel}, const size_t @var{limit}, gsl_integration_workspace * @var{workspace}, gsl_integration_qawo_table * @var{wf}, double * @var{result}, double * @var{abserr})
+
+This function uses an adaptive algorithm to compute the integral of
+@math{f} over @math{(a,b)} with the weight function
+@math{\sin(\omega x)} or @math{\cos(\omega x)} defined
+by the table @var{wf},
+@tex
+\beforedisplay
+$$
+\eqalign{
+I & = \int_a^b dx\, f(x) \left\{ \matrix{\sin(\omega x) \cr \cos(\omega x)}\right\}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^b dx f(x) sin(omega x)
+I = \int_a^b dx f(x) cos(omega x)
+@end example
+
+@end ifinfo
+@noindent
+The results are extrapolated using the epsilon-algorithm to accelerate
+the convergence of the integral. The function returns the final
+approximation from the extrapolation, @var{result}, and an estimate of
+the absolute error, @var{abserr}. The subintervals and their results are
+stored in the memory provided by @var{workspace}. The maximum number of
+subintervals is given by @var{limit}, which may not exceed the allocated
+size of the workspace.
+
+Those subintervals with ``large'' widths @math{d} where @math{d\omega > 4} are
+computed using a 25-point Clenshaw-Curtis integration rule, which handles the
+oscillatory behavior. Subintervals with a ``small'' widths where
+@math{d\omega < 4} are computed using a 15-point Gauss-Kronrod integration.
+
+@end deftypefun
+
+@node QAWF adaptive integration for Fourier integrals
+@section QAWF adaptive integration for Fourier integrals
+@cindex QAWF quadrature algorithm
+@cindex Fourier integrals, numerical
+
+@deftypefun int gsl_integration_qawf (gsl_function * @var{f}, const double @var{a}, const double @var{epsabs}, const size_t @var{limit}, gsl_integration_workspace * @var{workspace}, gsl_integration_workspace * @var{cycle_workspace}, gsl_integration_qawo_table * @var{wf}, double * @var{result}, double * @var{abserr})
+
+This function attempts to compute a Fourier integral of the function
+@var{f} over the semi-infinite interval @math{[a,+\infty)}.
+@tex
+\beforedisplay
+$$
+\eqalign{
+I & = \int_a^{+\infty} dx\, f(x) \left\{ \matrix{ \sin(\omega x) \cr
+ \cos(\omega x) } \right\}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_a^@{+\infty@} dx f(x) sin(omega x)
+I = \int_a^@{+\infty@} dx f(x) cos(omega x)
+@end example
+@end ifinfo
+
+The parameter @math{\omega} and choice of @math{\sin} or @math{\cos} is
+taken from the table @var{wf} (the length @var{L} can take any value,
+since it is overridden by this function to a value appropriate for the
+fourier integration). The integral is computed using the QAWO algorithm
+over each of the subintervals,
+@tex
+\beforedisplay
+$$
+\eqalign{
+C_1 & = [a, a + c] \cr
+C_2 & = [a + c, a + 2c] \cr
+\dots & = \dots \cr
+C_k & = [a + (k-1) c, a + k c]
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+C_1 = [a, a + c]
+C_2 = [a + c, a + 2 c]
+... = ...
+C_k = [a + (k-1) c, a + k c]
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$c = (2 \,\hbox{floor}(|\omega|) + 1) \pi/|\omega|$}
+@math{c = (2 floor(|\omega|) + 1) \pi/|\omega|}. The width @math{c} is
+chosen to cover an odd number of periods so that the contributions from
+the intervals alternate in sign and are monotonically decreasing when
+@var{f} is positive and monotonically decreasing. The sum of this
+sequence of contributions is accelerated using the epsilon-algorithm.
+
+This function works to an overall absolute tolerance of
+@var{abserr}. The following strategy is used: on each interval
+@math{C_k} the algorithm tries to achieve the tolerance
+@tex
+\beforedisplay
+$$
+TOL_k = u_k \hbox{\it abserr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+TOL_k = u_k abserr
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$u_k = (1 - p)p^{k-1}$}
+@math{u_k = (1 - p)p^@{k-1@}} and @math{p = 9/10}.
+The sum of the geometric series of contributions from each interval
+gives an overall tolerance of @var{abserr}.
+
+If the integration of a subinterval leads to difficulties then the
+accuracy requirement for subsequent intervals is relaxed,
+@tex
+\beforedisplay
+$$
+TOL_k = u_k \max(\hbox{\it abserr}, \max_{i<k}\{E_i\})
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+TOL_k = u_k max(abserr, max_@{i<k@}@{E_i@})
+@end example
+
+@end ifinfo
+@noindent
+where @math{E_k} is the estimated error on the interval @math{C_k}.
+
+The subintervals and their results are stored in the memory provided by
+@var{workspace}. The maximum number of subintervals is given by
+@var{limit}, which may not exceed the allocated size of the workspace.
+The integration over each subinterval uses the memory provided by
+@var{cycle_workspace} as workspace for the QAWO algorithm.
+
+@end deftypefun
+
+@node Numerical integration error codes
+@section Error codes
+
+In addition to the standard error codes for invalid arguments the
+functions can return the following values,
+
+@table @code
+@item GSL_EMAXITER
+the maximum number of subdivisions was exceeded.
+@item GSL_EROUND
+cannot reach tolerance because of roundoff error,
+or roundoff error was detected in the extrapolation table.
+@item GSL_ESING
+a non-integrable singularity or other bad integrand behavior was found
+in the integration interval.
+@item GSL_EDIVERGE
+the integral is divergent, or too slowly convergent to be integrated
+numerically.
+@end table
+
+@node Numerical integration examples
+@section Examples
+
+The integrator @code{QAGS} will handle a large class of definite
+integrals. For example, consider the following integral, which has a
+algebraic-logarithmic singularity at the origin,
+@tex
+\beforedisplay
+$$
+\int_0^1 x^{-1/2} \log(x) \,dx = -4
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\int_0^1 x^@{-1/2@} log(x) dx = -4
+@end example
+
+@end ifinfo
+@noindent
+The program below computes this integral to a relative accuracy bound of
+@code{1e-7}.
+
+@example
+@verbatiminclude examples/integration.c
+@end example
+
+@noindent
+The results below show that the desired accuracy is achieved after 8
+subdivisions.
+
+@example
+$ ./a.out
+@verbatiminclude examples/integration.out
+@end example
+
+@noindent
+In fact, the extrapolation procedure used by @code{QAGS} produces an
+accuracy of almost twice as many digits. The error estimate returned by
+the extrapolation procedure is larger than the actual error, giving a
+margin of safety of one order of magnitude.
+
+
+@node Numerical integration References and Further Reading
+@section References and Further Reading
+
+The following book is the definitive reference for @sc{quadpack}, and was
+written by the original authors. It provides descriptions of the
+algorithms, program listings, test programs and examples. It also
+includes useful advice on numerical integration and many references to
+the numerical integration literature used in developing @sc{quadpack}.
+
+@itemize @asis
+@item
+R. Piessens, E. de Doncker-Kapenga, C.W. Uberhuber, D.K. Kahaner.
+@cite{@sc{quadpack} A subroutine package for automatic integration}
+Springer Verlag, 1983.
+@end itemize
+
+@noindent
+
+
+
+
+
+
diff --git a/gsl-1.9/doc/interp.texi b/gsl-1.9/doc/interp.texi
new file mode 100644
index 0000000..e1e6b1c
--- /dev/null
+++ b/gsl-1.9/doc/interp.texi
@@ -0,0 +1,318 @@
+@cindex interpolation
+@cindex spline
+
+This chapter describes functions for performing interpolation. The
+library provides a variety of interpolation methods, including Cubic
+splines and Akima splines. The interpolation types are interchangeable,
+allowing different methods to be used without recompiling.
+Interpolations can be defined for both normal and periodic boundary
+conditions. Additional functions are available for computing
+derivatives and integrals of interpolating functions.
+
+The functions described in this section are declared in the header files
+@file{gsl_interp.h} and @file{gsl_spline.h}.
+
+@menu
+* Introduction to Interpolation::
+* Interpolation Functions::
+* Interpolation Types::
+* Index Look-up and Acceleration::
+* Evaluation of Interpolating Functions::
+* Higher-level Interface::
+* Interpolation Example programs::
+* Interpolation References and Further Reading::
+@end menu
+
+@node Introduction to Interpolation
+@section Introduction
+
+Given a set of data points @math{(x_1, y_1) \dots (x_n, y_n)} the
+routines described in this section compute a continuous interpolating
+function @math{y(x)} such that @math{y(x_i) = y_i}. The interpolation
+is piecewise smooth, and its behavior at the end-points is determined by
+the type of interpolation used.
+
+@node Interpolation Functions
+@section Interpolation Functions
+
+The interpolation function for a given dataset is stored in a
+@code{gsl_interp} object. These are created by the following functions.
+
+@deftypefun {gsl_interp *} gsl_interp_alloc (const gsl_interp_type * @var{T}, size_t @var{size})
+This function returns a pointer to a newly allocated interpolation
+object of type @var{T} for @var{size} data-points.
+@end deftypefun
+
+@deftypefun int gsl_interp_init (gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], size_t @var{size})
+This function initializes the interpolation object @var{interp} for the
+data (@var{xa},@var{ya}) where @var{xa} and @var{ya} are arrays of size
+@var{size}. The interpolation object (@code{gsl_interp}) does not save
+the data arrays @var{xa} and @var{ya} and only stores the static state
+computed from the data. The @var{xa} data array is always assumed to be
+strictly ordered; the behavior for other arrangements is not defined.
+@end deftypefun
+
+@deftypefun void gsl_interp_free (gsl_interp * @var{interp})
+This function frees the interpolation object @var{interp}.
+@end deftypefun
+
+@node Interpolation Types
+@section Interpolation Types
+
+The interpolation library provides five interpolation types:
+
+@deffn {Interpolation Type} gsl_interp_linear
+@cindex linear interpolation
+Linear interpolation. This interpolation method does not require any
+additional memory.
+@end deffn
+
+@deffn {Interpolation Type} gsl_interp_polynomial
+@cindex polynomial interpolation
+Polynomial interpolation. This method should only be used for
+interpolating small numbers of points because polynomial interpolation
+introduces large oscillations, even for well-behaved datasets. The
+number of terms in the interpolating polynomial is equal to the number
+of points.
+@end deffn
+
+@deffn {Interpolation Type} gsl_interp_cspline
+@cindex cubic splines
+Cubic spline with natural boundary conditions. The resulting curve is
+piecewise cubic on each interval, with matching first and second
+derivatives at the supplied data-points. The second derivative is
+chosen to be zero at the first point and last point.
+@end deffn
+
+@deffn {Interpolation Type} gsl_interp_cspline_periodic
+Cubic spline with periodic boundary conditions. The resulting curve
+is piecewise cubic on each interval, with matching first and second
+derivatives at the supplied data-points. The derivatives at the first
+and last points are also matched. Note that the last point in the
+data must have the same y-value as the first point, otherwise the
+resulting periodic interpolation will have a discontinuity at the
+boundary.
+
+@end deffn
+
+@deffn {Interpolation Type} gsl_interp_akima
+@cindex Akima splines
+Non-rounded Akima spline with natural boundary conditions. This method
+uses the non-rounded corner algorithm of Wodicka.
+@end deffn
+
+@deffn {Interpolation Type} gsl_interp_akima_periodic
+Non-rounded Akima spline with periodic boundary conditions. This method
+uses the non-rounded corner algorithm of Wodicka.
+@end deffn
+
+The following related functions are available:
+
+@deftypefun {const char *} gsl_interp_name (const gsl_interp * @var{interp})
+This function returns the name of the interpolation type used by @var{interp}.
+For example,
+
+@example
+printf ("interp uses '%s' interpolation.\n",
+ gsl_interp_name (interp));
+@end example
+
+@noindent
+would print something like,
+
+@example
+interp uses 'cspline' interpolation.
+@end example
+@end deftypefun
+
+@deftypefun {unsigned int} gsl_interp_min_size (const gsl_interp * @var{interp})
+This function returns the minimum number of points required by the
+interpolation type of @var{interp}. For example, Akima spline interpolation
+requires a minimum of 5 points.
+@end deftypefun
+
+@node Index Look-up and Acceleration
+@section Index Look-up and Acceleration
+
+The state of searches can be stored in a @code{gsl_interp_accel} object,
+which is a kind of iterator for interpolation lookups. It caches the
+previous value of an index lookup. When the subsequent interpolation
+point falls in the same interval its index value can be returned
+immediately.
+
+@deftypefun size_t gsl_interp_bsearch (const double @var{x_array}[], double @var{x}, size_t @var{index_lo}, size_t @var{index_hi})
+This function returns the index @math{i} of the array @var{x_array} such
+that @code{x_array[i] <= x < x_array[i+1]}. The index is searched for
+in the range [@var{index_lo},@var{index_hi}].
+@end deftypefun
+
+@deftypefun {gsl_interp_accel *} gsl_interp_accel_alloc (void)
+This function returns a pointer to an accelerator object, which is a
+kind of iterator for interpolation lookups. It tracks the state of
+lookups, thus allowing for application of various acceleration
+strategies.
+@end deftypefun
+
+@deftypefun size_t gsl_interp_accel_find (gsl_interp_accel * @var{a}, const double @var{x_array}[], size_t @var{size}, double @var{x})
+This function performs a lookup action on the data array @var{x_array}
+of size @var{size}, using the given accelerator @var{a}. This is how
+lookups are performed during evaluation of an interpolation. The
+function returns an index @math{i} such that @code{x_array[i] <= x <
+x_array[i+1]}.
+@end deftypefun
+
+@deftypefun void gsl_interp_accel_free (gsl_interp_accel* @var{acc})
+This function frees the accelerator object @var{acc}.
+@end deftypefun
+
+@node Evaluation of Interpolating Functions
+@section Evaluation of Interpolating Functions
+
+@deftypefun double gsl_interp_eval (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_interp_eval_e (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc}, double * @var{y})
+These functions return the interpolated value of @var{y} for a given
+point @var{x}, using the interpolation object @var{interp}, data arrays
+@var{xa} and @var{ya} and the accelerator @var{acc}.
+@end deftypefun
+
+@deftypefun double gsl_interp_eval_deriv (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_interp_eval_deriv_e (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc}, double * @var{d})
+These functions return the derivative @var{d} of an interpolated
+function for a given point @var{x}, using the interpolation object
+@var{interp}, data arrays @var{xa} and @var{ya} and the accelerator
+@var{acc}.
+@end deftypefun
+
+@deftypefun double gsl_interp_eval_deriv2 (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_interp_eval_deriv2_e (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{x}, gsl_interp_accel * @var{acc}, double * @var{d2})
+These functions return the second derivative @var{d2} of an interpolated
+function for a given point @var{x}, using the interpolation object
+@var{interp}, data arrays @var{xa} and @var{ya} and the accelerator
+@var{acc}.
+@end deftypefun
+
+@deftypefun double gsl_interp_eval_integ (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{a}, double @var{b}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_interp_eval_integ_e (const gsl_interp * @var{interp}, const double @var{xa}[], const double @var{ya}[], double @var{a}, double @var{b}, gsl_interp_accel * @var{acc}, double * @var{result})
+These functions return the numerical integral @var{result} of an
+interpolated function over the range [@var{a}, @var{b}], using the
+interpolation object @var{interp}, data arrays @var{xa} and @var{ya} and
+the accelerator @var{acc}.
+@end deftypefun
+
+@node Higher-level Interface
+@section Higher-level Interface
+
+The functions described in the previous sections required the user to
+supply pointers to the @math{x} and @math{y} arrays on each call. The
+following functions are equivalent to the corresponding
+@code{gsl_interp} functions but maintain a copy of this data in the
+@code{gsl_spline} object. This removes the need to pass both @var{xa}
+and @var{ya} as arguments on each evaluation. These functions are
+defined in the header file @file{gsl_spline.h}.
+
+@deftypefun {gsl_spline *} gsl_spline_alloc (const gsl_interp_type * @var{T}, size_t @var{size})
+@end deftypefun
+
+@deftypefun int gsl_spline_init (gsl_spline * @var{spline}, const double @var{xa}[], const double @var{ya}[], size_t @var{size})
+@end deftypefun
+
+@deftypefun void gsl_spline_free (gsl_spline * @var{spline})
+@end deftypefun
+
+@deftypefun {const char *} gsl_spline_name (const gsl_spline * @var{spline})
+@end deftypefun
+
+@deftypefun {unsigned int} gsl_spline_min_size (const gsl_spline * @var{spline})
+@end deftypefun
+
+@deftypefun double gsl_spline_eval (const gsl_spline * @var{spline}, double @var{x}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_spline_eval_e (const gsl_spline * @var{spline}, double @var{x}, gsl_interp_accel * @var{acc}, double * @var{y})
+@end deftypefun
+
+@deftypefun double gsl_spline_eval_deriv (const gsl_spline * @var{spline}, double @var{x}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_spline_eval_deriv_e (const gsl_spline * @var{spline}, double @var{x}, gsl_interp_accel * @var{acc}, double * @var{d})
+@end deftypefun
+
+@deftypefun double gsl_spline_eval_deriv2 (const gsl_spline * @var{spline}, double @var{x}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_spline_eval_deriv2_e (const gsl_spline * @var{spline}, double @var{x}, gsl_interp_accel * @var{acc}, double * @var{d2})
+@end deftypefun
+
+@deftypefun double gsl_spline_eval_integ (const gsl_spline * @var{spline}, double @var{a}, double @var{b}, gsl_interp_accel * @var{acc})
+@deftypefunx int gsl_spline_eval_integ_e (const gsl_spline * @var{spline}, double @var{a}, double @var{b}, gsl_interp_accel * @var{acc}, double * @var{result})
+@end deftypefun
+
+@node Interpolation Example programs
+@section Examples
+
+The following program demonstrates the use of the interpolation and
+spline functions. It computes a cubic spline interpolation of the
+10-point dataset @math{(x_i, y_i)} where @math{x_i = i + \sin(i)/2} and
+@math{y_i = i + \cos(i^2)} for @math{i = 0 \dots 9}.
+
+@example
+@verbatiminclude examples/interp.c
+@end example
+
+@noindent
+The output is designed to be used with the @sc{gnu} plotutils
+@code{graph} program,
+
+@example
+$ ./a.out > interp.dat
+$ graph -T ps < interp.dat > interp.ps
+@end example
+
+@iftex
+@sp 1
+@center @image{interp2,3.4in}
+@end iftex
+
+@noindent
+The result shows a smooth interpolation of the original points. The
+interpolation method can changed simply by varying the first argument of
+@code{gsl_spline_alloc}.
+
+The next program demonstrates a periodic cubic spline with 4 data
+points. Note that the first and last points must be supplied with
+the same y-value for a periodic spline.
+
+@example
+@verbatiminclude examples/interpp.c
+@end example
+
+@noindent
+
+The output can be plotted with @sc{gnu} @code{graph}.
+
+@example
+$ ./a.out > interp.dat
+$ graph -T ps < interp.dat > interp.ps
+@end example
+
+@iftex
+@sp 1
+@center @image{interpp2,3.4in}
+@end iftex
+
+@noindent
+The result shows a periodic interpolation of the original points. The
+slope of the fitted curve is the same at the beginning and end of the
+data, and the second derivative is also.
+
+@node Interpolation References and Further Reading
+@section References and Further Reading
+
+Descriptions of the interpolation algorithms and further references can
+be found in the following books:
+
+@itemize @asis
+@item C.W. Ueberhuber,
+@cite{Numerical Computation (Volume 1), Chapter 9 ``Interpolation''},
+Springer (1997), ISBN 3-540-62058-3.
+
+@item D.M. Young, R.T. Gregory
+@cite{A Survey of Numerical Mathematics (Volume 1), Chapter 6.8},
+Dover (1988), ISBN 0-486-65691-8.
+@end itemize
+
+@noindent
diff --git a/gsl-1.9/doc/interp2.eps b/gsl-1.9/doc/interp2.eps
new file mode 100644
index 0000000..522036a
--- /dev/null
+++ b/gsl-1.9/doc/interp2.eps
@@ -0,0 +1,3252 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Thu Mar 17 17:03:59 2005
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 107 197 835 580
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth 2 mul setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 107 197 835 580
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 16128 9216 Rect
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 128.156 214.1855 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 266.396 214.1855 ] concat
+%I
+[
+(2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 404.636 214.1855 ] concat
+%I
+[
+(4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 542.876 214.1855 ] concat
+%I
+[
+(6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+10598 9216
+10598 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+10598 2304
+10598 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 681.116 214.1855 ] concat
+%I
+[
+(8)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+13363 9216
+13363 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+13363 2304
+13363 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 814.3119 214.1855 ] concat
+%I
+[
+(10)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 9216
+16128 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 2304
+16128 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 9216
+3686 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3686 2304
+3686 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 9216
+5069 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5069 2304
+5069 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 9216
+6451 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6451 2304
+6451 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 9216
+7834 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7834 2304
+7834 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+10598 9216
+10598 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+10598 2304
+10598 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+11981 9216
+11981 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+11981 2304
+11981 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+13363 9216
+13363 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+13363 2304
+13363 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+14746 9216
+14746 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+14746 2304
+14746 2359
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 9216
+16128 9161
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 2304
+16128 2359
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 229.8568 ] concat
+%I
+[
+(0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 2304
+15990 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 298.9768 ] concat
+%I
+[
+(2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 3686
+15990 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2442 3686
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 368.0968 ] concat
+%I
+[
+(4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 5069
+15990 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2442 5069
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 437.2168 ] concat
+%I
+[
+(6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 6451
+15990 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2442 6451
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 117.9279 506.3368 ] concat
+%I
+[
+(8)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 7834
+15990 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2442 7834
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 107.8399 575.4568 ] concat
+%I
+[
+(10)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 9216
+15990 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 2304
+16073 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 2995
+16073 2995
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2995
+2359 2995
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 3686
+16073 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2359 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 4378
+16073 4378
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4378
+2359 4378
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 5069
+16073 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2359 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 5760
+16073 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 6451
+16073 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2359 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 7142
+16073 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7142
+2359 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 7834
+16073 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2359 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 8525
+16073 8525
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8525
+2359 8525
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+16128 9216
+16073 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2196 2887 2412 3103 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+4160 3261 4376 3477 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+5589 3127 5805 3343 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+6441 3640 6657 3856 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+7202 4299 7418 4515 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+8445 6337 8661 6553 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+10297 6255 10513 6471 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+12327 7242 12543 7458 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+13939 7996 14155 8212 Rect
+End
+
+Begin %I Rect
+[0.54 0 0 0.54 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg Black
+0 0 0 SetCBg
+%I p
+0.000000 SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+14922 8954 15138 9170 Rect
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+2304 2995
+2318 3000
+2332 3005
+2345 3010
+2359 3015
+2373 3019
+2387 3024
+2401 3029
+2415 3034
+2428 3039
+2442 3043
+2456 3048
+2470 3053
+2484 3058
+2498 3063
+2511 3067
+2525 3072
+2539 3077
+2553 3082
+2567 3086
+2580 3091
+2594 3096
+2608 3100
+2622 3105
+2636 3110
+2650 3114
+2663 3119
+2677 3123
+2691 3128
+2705 3133
+2719 3137
+2733 3142
+2746 3146
+2760 3151
+2774 3155
+2788 3160
+2802 3164
+2815 3168
+2829 3173
+2843 3177
+2857 3181
+2871 3186
+2885 3190
+2898 3194
+2912 3198
+2926 3203
+2940 3207
+2954 3211
+2968 3215
+2981 3219
+2995 3223
+3009 3227
+3023 3231
+3037 3235
+3050 3239
+3064 3243
+3078 3247
+3092 3250
+3106 3254
+3120 3258
+3133 3261
+3147 3265
+3161 3269
+3175 3272
+3189 3276
+3203 3279
+3216 3283
+3230 3286
+3244 3289
+3258 3293
+3272 3296
+3286 3299
+3299 3302
+3313 3305
+3327 3308
+3341 3311
+3355 3314
+3368 3317
+3382 3320
+3396 3323
+3410 3326
+3424 3328
+3438 3331
+3451 3334
+3465 3336
+3479 3339
+3493 3341
+3507 3344
+3521 3346
+3534 3348
+3548 3350
+3562 3353
+3576 3355
+3590 3357
+3603 3359
+3617 3361
+3631 3362
+3645 3364
+3659 3366
+3673 3368
+3686 3369
+3700 3371
+3714 3372
+3728 3374
+3742 3375
+3756 3376
+3769 3377
+3783 3378
+3797 3379
+3811 3380
+3825 3381
+3838 3382
+3852 3383
+3866 3384
+3880 3384
+3894 3385
+3908 3385
+3921 3386
+3935 3386
+3949 3386
+3963 3386
+3977 3386
+3991 3386
+4004 3386
+4018 3386
+4032 3386
+4046 3386
+4060 3385
+4073 3385
+4087 3384
+4101 3383
+4115 3383
+4129 3382
+4143 3381
+4156 3380
+4170 3379
+4184 3378
+4198 3376
+4212 3375
+4226 3374
+4239 3372
+4253 3371
+4267 3369
+4281 3367
+4295 3365
+4308 3363
+4322 3361
+4336 3359
+4350 3357
+4364 3354
+4378 3352
+4391 3349
+4405 3347
+4419 3344
+4433 3342
+4447 3339
+4461 3336
+4474 3333
+4488 3331
+4502 3328
+4516 3325
+4530 3322
+4543 3319
+4557 3316
+4571 3313
+4585 3309
+4599 3306
+4613 3303
+4626 3300
+4640 3297
+4654 3294
+4668 3290
+4682 3287
+4696 3284
+4709 3281
+4723 3277
+4737 3274
+4751 3271
+4765 3268
+4778 3265
+4792 3261
+4806 3258
+4820 3255
+4834 3252
+4848 3249
+4861 3246
+4875 3243
+4889 3240
+4903 3237
+4917 3234
+4931 3231
+4944 3228
+4958 3226
+4972 3223
+4986 3220
+5000 3218
+5014 3215
+5027 3213
+5041 3210
+5055 3208
+5069 3206
+5083 3204
+5096 3202
+5110 3200
+5124 3198
+5138 3196
+5152 3194
+5166 3193
+5179 3191
+5193 3190
+5207 3189
+5221 3187
+5235 3186
+5249 3185
+5262 3184
+5276 3184
+5290 3183
+5304 3183
+5318 3182
+5331 3182
+5345 3182
+5359 3182
+5373 3182
+5387 3183
+5401 3183
+5414 3184
+5428 3185
+5442 3185
+5456 3187
+5470 3188
+5484 3189
+5497 3191
+5511 3193
+5525 3195
+5539 3197
+5553 3199
+5566 3201
+5580 3204
+5594 3207
+5608 3210
+5622 3213
+5636 3217
+5649 3220
+5663 3224
+5677 3228
+5691 3233
+5705 3237
+5719 3242
+5732 3247
+5746 3252
+5760 3257
+5774 3262
+5788 3268
+5801 3274
+5815 3280
+5829 3286
+5843 3293
+5857 3299
+5871 3306
+5884 3313
+5898 3320
+5912 3327
+5926 3334
+5940 3342
+5954 3350
+5967 3357
+5981 3365
+5995 3373
+6009 3381
+6023 3390
+6036 3398
+6050 3406
+6064 3415
+6078 3424
+6092 3432
+6106 3441
+6119 3450
+6133 3459
+6147 3468
+6161 3478
+6175 3487
+6189 3496
+6202 3505
+6216 3515
+6230 3524
+6244 3534
+6258 3544
+6271 3553
+6285 3563
+6299 3572
+6313 3582
+6327 3592
+6341 3602
+6354 3611
+6368 3621
+6382 3631
+6396 3641
+6410 3651
+6424 3660
+6437 3670
+6451 3680
+6465 3690
+6479 3699
+6493 3709
+6506 3719
+6520 3728
+6534 3738
+6548 3747
+6562 3757
+6576 3766
+6589 3776
+6603 3785
+6617 3794
+6631 3804
+6645 3813
+6659 3822
+6672 3832
+6686 3841
+6700 3850
+6714 3860
+6728 3869
+6742 3879
+6755 3888
+6769 3898
+6783 3908
+6797 3917
+6811 3927
+6824 3937
+6838 3947
+6852 3957
+6866 3968
+6880 3978
+6894 3988
+6907 3999
+6921 4010
+6935 4021
+6949 4032
+6963 4043
+6977 4055
+6990 4067
+7004 4078
+7018 4091
+7032 4103
+7046 4115
+7059 4128
+7073 4141
+7087 4154
+7101 4168
+7115 4181
+7129 4195
+7142 4209
+7156 4224
+7170 4239
+7184 4254
+7198 4269
+7212 4285
+7225 4301
+7239 4317
+7253 4334
+7267 4351
+7281 4368
+7294 4386
+7308 4404
+7322 4422
+7336 4441
+7350 4460
+7364 4480
+7377 4500
+7391 4520
+7405 4540
+7419 4561
+7433 4582
+7447 4603
+7460 4625
+7474 4647
+7488 4669
+7502 4692
+7516 4714
+7529 4737
+7543 4760
+7557 4784
+7571 4807
+7585 4831
+7599 4855
+7612 4879
+7626 4903
+7640 4928
+7654 4952
+7668 4977
+7682 5002
+7695 5027
+7709 5052
+7723 5078
+7737 5103
+7751 5128
+7764 5154
+7778 5179
+7792 5205
+7806 5231
+7820 5257
+7834 5282
+7847 5308
+7861 5334
+7875 5360
+7889 5386
+7903 5411
+7917 5437
+7930 5463
+7944 5489
+7958 5514
+7972 5540
+7986 5566
+7999 5591
+8013 5616
+8027 5642
+8041 5667
+8055 5692
+8069 5717
+8082 5742
+8096 5767
+8110 5791
+8124 5816
+8138 5840
+8152 5864
+8165 5888
+8179 5911
+8193 5935
+8207 5958
+8221 5981
+8234 6004
+8248 6027
+8262 6049
+8276 6071
+8290 6093
+8304 6114
+8317 6136
+8331 6156
+8345 6177
+8359 6197
+8373 6217
+8387 6237
+8400 6257
+8414 6276
+8428 6294
+8442 6312
+8456 6330
+8470 6348
+8483 6365
+8497 6382
+8511 6398
+8525 6414
+8539 6429
+8552 6444
+8566 6459
+8580 6473
+8594 6487
+8608 6500
+8622 6513
+8635 6525
+8649 6537
+8663 6549
+8677 6560
+8691 6571
+8705 6581
+8718 6591
+8732 6600
+8746 6610
+8760 6618
+8774 6627
+8787 6635
+8801 6642
+8815 6650
+8829 6657
+8843 6663
+8857 6670
+8870 6676
+8884 6681
+8898 6686
+8912 6691
+8926 6696
+8940 6700
+8953 6704
+8967 6708
+8981 6711
+8995 6714
+9009 6717
+9022 6720
+9036 6722
+9050 6724
+9064 6725
+9078 6727
+9092 6728
+9105 6729
+9119 6729
+9133 6730
+9147 6730
+9161 6730
+9175 6729
+9188 6729
+9202 6728
+500 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 422
+9202 6728
+9216 6727
+9230 6726
+9244 6724
+9257 6723
+9271 6721
+9285 6719
+9299 6717
+9313 6714
+9327 6712
+9340 6709
+9354 6706
+9368 6703
+9382 6700
+9396 6696
+9410 6693
+9423 6689
+9437 6685
+9451 6681
+9465 6677
+9479 6673
+9492 6668
+9506 6664
+9520 6659
+9534 6655
+9548 6650
+9562 6645
+9575 6640
+9589 6635
+9603 6630
+9617 6625
+9631 6619
+9645 6614
+9658 6609
+9672 6603
+9686 6598
+9700 6592
+9714 6587
+9727 6581
+9741 6575
+9755 6570
+9769 6564
+9783 6558
+9797 6552
+9810 6547
+9824 6541
+9838 6535
+9852 6529
+9866 6524
+9880 6518
+9893 6512
+9907 6507
+9921 6501
+9935 6495
+9949 6490
+9962 6484
+9976 6479
+9990 6474
+10004 6468
+10018 6463
+10032 6458
+10045 6453
+10059 6448
+10073 6443
+10087 6438
+10101 6433
+10115 6428
+10128 6424
+10142 6419
+10156 6415
+10170 6411
+10184 6407
+10198 6403
+10211 6399
+10225 6395
+10239 6392
+10253 6389
+10267 6385
+10280 6382
+10294 6379
+10308 6377
+10322 6374
+10336 6372
+10350 6370
+10363 6368
+10377 6366
+10391 6364
+10405 6363
+10419 6362
+10433 6361
+10446 6360
+10460 6359
+10474 6359
+10488 6359
+10502 6359
+10515 6359
+10529 6359
+10543 6360
+10557 6361
+10571 6362
+10585 6363
+10598 6364
+10612 6366
+10626 6368
+10640 6370
+10654 6372
+10668 6374
+10681 6376
+10695 6379
+10709 6382
+10723 6385
+10737 6388
+10750 6391
+10764 6394
+10778 6398
+10792 6402
+10806 6405
+10820 6409
+10833 6414
+10847 6418
+10861 6422
+10875 6427
+10889 6432
+10903 6437
+10916 6442
+10930 6447
+10944 6452
+10958 6457
+10972 6463
+10985 6468
+10999 6474
+11013 6480
+11027 6486
+11041 6492
+11055 6499
+11068 6505
+11082 6511
+11096 6518
+11110 6525
+11124 6531
+11138 6538
+11151 6545
+11165 6552
+11179 6560
+11193 6567
+11207 6574
+11220 6582
+11234 6589
+11248 6597
+11262 6605
+11276 6612
+11290 6620
+11303 6628
+11317 6636
+11331 6645
+11345 6653
+11359 6661
+11373 6669
+11386 6678
+11400 6686
+11414 6695
+11428 6703
+11442 6712
+11455 6721
+11469 6729
+11483 6738
+11497 6747
+11511 6756
+11525 6765
+11538 6774
+11552 6783
+11566 6792
+11580 6801
+11594 6810
+11608 6819
+11621 6828
+11635 6838
+11649 6847
+11663 6856
+11677 6865
+11690 6875
+11704 6884
+11718 6893
+11732 6903
+11746 6912
+11760 6922
+11773 6931
+11787 6940
+11801 6950
+11815 6959
+11829 6969
+11843 6978
+11856 6987
+11870 6997
+11884 7006
+11898 7016
+11912 7025
+11926 7034
+11939 7044
+11953 7053
+11967 7062
+11981 7072
+11995 7081
+12008 7090
+12022 7099
+12036 7108
+12050 7117
+12064 7127
+12078 7136
+12091 7145
+12105 7154
+12119 7163
+12133 7171
+12147 7180
+12161 7189
+12174 7198
+12188 7206
+12202 7215
+12216 7224
+12230 7232
+12243 7241
+12257 7249
+12271 7257
+12285 7266
+12299 7274
+12313 7282
+12326 7290
+12340 7298
+12354 7306
+12368 7314
+12382 7321
+12396 7329
+12409 7336
+12423 7344
+12437 7351
+12451 7359
+12465 7366
+12478 7373
+12492 7380
+12506 7387
+12520 7394
+12534 7400
+12548 7407
+12561 7414
+12575 7420
+12589 7427
+12603 7433
+12617 7439
+12631 7446
+12644 7452
+12658 7458
+12672 7464
+12686 7470
+12700 7476
+12713 7482
+12727 7488
+12741 7494
+12755 7499
+12769 7505
+12783 7511
+12796 7516
+12810 7522
+12824 7527
+12838 7533
+12852 7538
+12866 7544
+12879 7549
+12893 7555
+12907 7560
+12921 7565
+12935 7571
+12948 7576
+12962 7581
+12976 7586
+12990 7592
+13004 7597
+13018 7602
+13031 7607
+13045 7612
+13059 7618
+13073 7623
+13087 7628
+13101 7633
+13114 7638
+13128 7644
+13142 7649
+13156 7654
+13170 7659
+13183 7665
+13197 7670
+13211 7675
+13225 7680
+13239 7686
+13253 7691
+13266 7696
+13280 7702
+13294 7707
+13308 7713
+13322 7718
+13336 7724
+13349 7729
+13363 7735
+13377 7741
+13391 7746
+13405 7752
+13418 7758
+13432 7764
+13446 7770
+13460 7775
+13474 7781
+13488 7788
+13501 7794
+13515 7800
+13529 7806
+13543 7812
+13557 7819
+13571 7825
+13584 7832
+13598 7838
+13612 7845
+13626 7852
+13640 7858
+13654 7865
+13667 7872
+13681 7879
+13695 7887
+13709 7894
+13723 7901
+13736 7909
+13750 7916
+13764 7924
+13778 7931
+13792 7939
+13806 7947
+13819 7955
+13833 7963
+13847 7972
+13861 7980
+13875 7988
+13889 7997
+13902 8006
+13916 8015
+13930 8024
+13944 8033
+13958 8042
+13971 8051
+13985 8061
+13999 8070
+14013 8080
+14027 8090
+14041 8100
+14054 8110
+14068 8120
+14082 8131
+14096 8141
+14110 8152
+14124 8163
+14137 8174
+14151 8185
+14165 8196
+14179 8207
+14193 8219
+14206 8230
+14220 8242
+14234 8254
+14248 8265
+14262 8277
+14276 8290
+14289 8302
+14303 8314
+14317 8327
+14331 8339
+14345 8352
+14359 8365
+14372 8377
+14386 8390
+14400 8403
+14414 8416
+14428 8430
+14441 8443
+14455 8456
+14469 8470
+14483 8483
+14497 8497
+14511 8511
+14524 8524
+14538 8538
+14552 8552
+14566 8566
+14580 8580
+14594 8594
+14607 8608
+14621 8623
+14635 8637
+14649 8651
+14663 8666
+14676 8680
+14690 8695
+14704 8709
+14718 8724
+14732 8738
+14746 8753
+14759 8768
+14773 8782
+14787 8797
+14801 8812
+14815 8827
+14829 8842
+14842 8857
+14856 8872
+14870 8887
+14884 8902
+14898 8917
+14911 8932
+14925 8947
+14939 8962
+14953 8977
+14967 8992
+14981 9007
+14994 9022
+15008 9037
+15022 9052
+422 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/interpp2.eps b/gsl-1.9/doc/interpp2.eps
new file mode 100644
index 0000000..f153f0d
--- /dev/null
+++ b/gsl-1.9/doc/interpp2.eps
@@ -0,0 +1,2004 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Sat Dec 24 16:36:40 2005
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 92 197 497 580
+%%DocumentNeededResources: font Helvetica
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources: font Helvetica
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Helvetica
+/DrawDict 50 dict def
+DrawDict begin
+/ISOLatin1Encoding [
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon
+/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N
+/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright
+/asciicircum/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m
+/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/dotlessi/grave/acute/circumflex/tilde/macron/breve
+/dotaccent/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut
+/ogonek/caron/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
+] def
+/reencodeISO {
+dup dup findfont dup length dict begin
+{ 1 index /FID ne { def }{ pop pop } ifelse } forall
+/Encoding ISOLatin1Encoding def
+currentdict end definefont
+} def
+/Helvetica reencodeISO def
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources: font Helvetica
+%%PageBoundingBox: 92 197 497 580
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 115.5459 214.1855 ] concat
+%I
+[
+(0.00)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 173.1459 214.1855 ] concat
+%I
+[
+(0.05)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 9216
+3456 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 2304
+3456 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 230.7459 214.1855 ] concat
+%I
+[
+(0.10)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 288.3459 214.1855 ] concat
+%I
+[
+(0.15)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 345.9459 214.1855 ] concat
+%I
+[
+(0.20)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 403.5459 214.1855 ] concat
+%I
+[
+(0.25)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 9216
+8064 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 2304
+8064 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 461.1459 214.1855 ] concat
+%I
+[
+(0.30)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 92.19974 229.8568 ] concat
+%I
+[
+(-0.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 298.9768 ] concat
+%I
+[
+(0.0)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3686
+9078 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2442 3686
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 368.0968 ] concat
+%I
+[
+(0.2)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5069
+9078 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2442 5069
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 437.2168 ] concat
+%I
+[
+(0.4)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6451
+9078 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2442 6451
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 506.3368 ] concat
+%I
+[
+(0.6)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7834
+9078 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2442 7834
+2 MLine
+End
+
+Begin %I Text
+%I cfg Black
+0 0 0 SetCFg
+%I f -*-helvetica-medium-r-normal-*-18-*-*-*-*-*-*-*
+/Helvetica 18.144000 SetF
+%I t
+[ 1 0 0 1 102.7958 575.4568 ] concat
+%I
+[
+(0.8)
+] Text
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2995
+9161 2995
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2995
+2359 2995
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3686
+9161 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2359 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4378
+9161 4378
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4378
+2359 4378
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5069
+9161 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2359 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6451
+9161 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2359 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7142
+9161 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7142
+2359 7142
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7834
+9161 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2359 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8525
+9161 8525
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8525
+2359 8525
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 34952
+1 0 0 [ 1.48 4.43 ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+9216 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2239 4658
+2369 4788
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2369 4658
+2239 4788
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4543 8460
+4673 8590
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4673 8460
+4543 8590
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8460 2930
+8590 3060
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8590 2930
+8460 3060
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9151 4658
+9281 4788
+2 MLine
+End
+
+Begin %I MLine
+[0.324 0 0 0.324 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9281 4658
+9151 4788
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 101
+2304 4723
+2373 4920
+2442 5115
+2511 5308
+2580 5499
+2650 5687
+2719 5872
+2788 6054
+2857 6232
+2926 6406
+2995 6576
+3064 6741
+3133 6901
+3203 7056
+3272 7205
+3341 7348
+3410 7485
+3479 7616
+3548 7739
+3617 7855
+3686 7964
+3756 8065
+3825 8157
+3894 8241
+3963 8316
+4032 8381
+4101 8437
+4170 8484
+4239 8519
+4308 8545
+4378 8559
+4447 8563
+4516 8554
+4585 8534
+4654 8502
+4723 8458
+4792 8402
+4861 8335
+4931 8258
+5000 8171
+5069 8075
+5138 7970
+5207 7857
+5276 7736
+5345 7608
+5414 7473
+5484 7332
+5553 7185
+5622 7033
+5691 6876
+5760 6716
+5829 6552
+5898 6385
+5967 6215
+6036 6043
+6106 5870
+6175 5696
+6244 5522
+6313 5348
+6382 5174
+6451 5002
+6520 4831
+6589 4663
+6659 4497
+6728 4335
+6797 4177
+6866 4022
+6935 3873
+7004 3729
+7073 3591
+7142 3460
+7212 3335
+7281 3218
+7350 3109
+7419 3009
+7488 2918
+7557 2836
+7626 2764
+7695 2703
+7764 2654
+7834 2615
+7903 2590
+7972 2577
+8041 2577
+8110 2591
+8179 2619
+8248 2663
+8317 2721
+8387 2796
+8456 2887
+8525 2995
+8594 3120
+8663 3261
+8732 3416
+8801 3582
+8870 3758
+8940 3943
+9009 4133
+9078 4328
+9147 4525
+9216 4723
+101 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/intro.texi b/gsl-1.9/doc/intro.texi
new file mode 100644
index 0000000..dca7be9
--- /dev/null
+++ b/gsl-1.9/doc/intro.texi
@@ -0,0 +1,247 @@
+@cindex license of GSL
+@cindex GNU General Public License
+The GNU Scientific Library (GSL) is a collection of routines for
+numerical computing. The routines have been written from scratch in C,
+and present a modern Applications Programming Interface
+(API) for C programmers, allowing wrappers to be written for very
+high level languages. The source code is distributed under the GNU
+General Public License.
+
+
+@menu
+* Routines available in GSL::
+* GSL is Free Software::
+* Obtaining GSL::
+* No Warranty::
+* Reporting Bugs::
+* Further Information::
+* Conventions used in this manual::
+@end menu
+
+@node Routines available in GSL
+@section Routines available in GSL
+
+The library covers a wide range of topics in numerical computing.
+Routines are available for the following areas,
+
+@iftex
+@sp 1
+@end iftex
+@multitable @columnfractions 0.05 0.45 0.45 0.05
+@item @tab Complex Numbers @tab Roots of Polynomials
+@item @tab Special Functions @tab Vectors and Matrices
+@item @tab Permutations @tab Combinations
+@item @tab Sorting @tab BLAS Support
+@item @tab Linear Algebra @tab CBLAS Library
+@item @tab Fast Fourier Transforms @tab Eigensystems
+@item @tab Random Numbers @tab Quadrature
+@item @tab Random Distributions @tab Quasi-Random Sequences
+@item @tab Histograms @tab Statistics
+@item @tab Monte Carlo Integration @tab N-Tuples
+@item @tab Differential Equations @tab Simulated Annealing
+@item @tab Numerical Differentiation @tab Interpolation
+@item @tab Series Acceleration @tab Chebyshev Approximations
+@item @tab Root-Finding @tab Discrete Hankel Transforms
+@item @tab Least-Squares Fitting @tab Minimization
+@item @tab IEEE Floating-Point @tab Physical Constants
+@item @tab Wavelets
+@end multitable
+@iftex
+@sp 1
+@end iftex
+
+@noindent
+The use of these routines is described in this manual. Each chapter
+provides detailed definitions of the functions, followed by example
+programs and references to the articles on which the algorithms are
+based.
+
+Where possible the routines have been based on reliable public-domain
+packages such as FFTPACK and QUADPACK, which the developers of GSL
+have reimplemented in C with modern coding conventions.
+
+@node GSL is Free Software
+@section GSL is Free Software
+@cindex free software, explanation of
+The subroutines in the GNU Scientific Library are ``free software'';
+this means that everyone is free to use them, and to redistribute them
+in other free programs. The library is not in the public domain; it is
+copyrighted and there are conditions on its distribution. These
+conditions are designed to permit everything that a good cooperating
+citizen would want to do. What is not allowed is to try to prevent
+others from further sharing any version of the software that they might
+get from you.
+
+Specifically, we want to make sure that you have the right to share
+copies of programs that you are given which use the GNU Scientific
+Library, that you receive their source code or else can get it if you
+want it, that you can change these programs or use pieces of them in new
+free programs, and that you know you can do these things.
+
+To make sure that everyone has such rights, we have to forbid you to
+deprive anyone else of these rights. For example, if you distribute
+copies of any code which uses the GNU Scientific Library, you must give
+the recipients all the rights that you have received. You must make
+sure that they, too, receive or can get the source code, both to the
+library and the code which uses it. And you must tell them their
+rights. This means that the library should not be redistributed in
+proprietary programs.
+
+Also, for our own protection, we must make certain that everyone finds
+out that there is no warranty for the GNU Scientific Library. If these
+programs are modified by someone else and passed on, we want their
+recipients to know that what they have is not what we distributed, so
+that any problems introduced by others will not reflect on our
+reputation.
+
+The precise conditions for the distribution of software related to the
+GNU Scientific Library are found in the GNU General Public License
+(@pxref{GNU General Public License}). Further information about this
+license is available from the GNU Project webpage @cite{Frequently Asked
+Questions about the GNU GPL},
+
+@itemize @asis
+@item
+@uref{http://www.gnu.org/copyleft/gpl-faq.html}
+@end itemize
+
+@noindent
+The Free Software Foundation also operates a license consulting
+service for commercial users (contact details available from
+@uref{http://www.fsf.org/}).
+
+@node Obtaining GSL
+@section Obtaining GSL
+@cindex obtaining GSL
+@cindex downloading GSL
+@cindex mailing list for GSL announcements
+@cindex info-gsl mailing list
+The source code for the library can be obtained in different ways, by
+copying it from a friend, purchasing it on @sc{cdrom} or downloading it
+from the internet. A list of public ftp servers which carry the source
+code can be found on the GNU website,
+
+@itemize @asis
+@item
+@uref{http://www.gnu.org/software/gsl/}
+@end itemize
+
+@noindent
+The preferred platform for the library is a GNU system, which allows it
+to take advantage of additional features in the GNU C compiler and GNU C
+library. However, the library is fully portable and should compile on
+most systems with a C compiler. Precompiled versions of the library can be purchased from
+commercial redistributors listed on the website above.
+
+Announcements of new releases, updates and other relevant events are
+made on the @code{info-gsl@@gnu.org} mailing list. To subscribe to this
+low-volume list, send an email of the following form:
+
+@example
+To: info-gsl-request@@gnu.org
+Subject: subscribe
+@end example
+
+@noindent
+You will receive a response asking you to reply in order to confirm
+your subscription.
+
+@node No Warranty
+@section No Warranty
+@cindex warranty (none)
+The software described in this manual has no warranty, it is provided
+``as is''. It is your responsibility to validate the behavior of the
+routines and their accuracy using the source code provided, or to
+purchase support and warranties from commercial redistributors. Consult
+the GNU General Public license for further details (@pxref{GNU General
+Public License}).
+
+@node Reporting Bugs
+@section Reporting Bugs
+@cindex reporting bugs in GSL
+@cindex bugs, how to report
+@cindex bug-gsl mailing list
+@cindex mailing list, bug-gsl
+A list of known bugs can be found in the @file{BUGS} file included in
+the GSL distribution. Details of compilation problems can be found in
+the @file{INSTALL} file.
+
+If you find a bug which is not listed in these files, please report it to
+@email{bug-gsl@@gnu.org}.
+
+All bug reports should include:
+
+@itemize @bullet
+@item
+The version number of GSL
+@item
+The hardware and operating system
+@item
+The compiler used, including version number and compilation options
+@item
+A description of the bug behavior
+@item
+A short program which exercises the bug
+@end itemize
+
+@noindent
+It is useful if you can check whether the same problem occurs when the
+library is compiled without optimization. Thank you.
+
+Any errors or omissions in this manual can also be reported to the
+same address.
+
+@node Further Information
+@section Further Information
+@cindex mailing list archives
+@cindex website, developer information
+@cindex contacting the GSL developers
+Additional information, including online copies of this manual, links to
+related projects, and mailing list archives are available from the
+website mentioned above.
+
+Any questions about the use and installation of the library can be asked
+on the mailing list @code{help-gsl@@gnu.org}. To subscribe to this
+list, send an email of the following form:
+
+@example
+To: help-gsl-request@@gnu.org
+Subject: subscribe
+@end example
+
+@noindent
+This mailing list can be used to ask questions not covered by this
+manual, and to contact the developers of the library.
+
+If you would like to refer to the GNU Scientific Library in a journal
+article, the recommended way is to cite this reference manual,
+e.g. @cite{M. Galassi et al, GNU Scientific Library Reference Manual (2nd
+Ed.), ISBN 0954161734}.
+
+If you want to give a url, use ``@uref{http://www.gnu.org/software/gsl/}''.
+
+@node Conventions used in this manual
+@section Conventions used in this manual
+@cindex conventions, used in manual
+@cindex examples, conventions used in
+@cindex shell prompt
+@cindex @code{$}, shell prompt
+This manual contains many examples which can be typed at the keyboard.
+A command entered at the terminal is shown like this,
+
+@example
+$ @i{command}
+@end example
+
+@noindent
+@cindex dollar sign @code{$}, shell prompt
+The first character on the line is the terminal prompt, and should not
+be typed. The dollar sign @samp{$} is used as the standard prompt in
+this manual, although some systems may use a different character.
+
+The examples assume the use of the GNU operating system. There may be
+minor differences in the output on other systems. The commands for
+setting environment variables use the Bourne shell syntax of the
+standard GNU shell (@code{bash}).
+
+
diff --git a/gsl-1.9/doc/landau.dat b/gsl-1.9/doc/landau.dat
new file mode 100644
index 0000000..0c7d337
--- /dev/null
+++ b/gsl-1.9/doc/landau.dat
@@ -0,0 +1,201 @@
+-5.0000000e+00 5.7299683e-24
+-4.9000000e+00 9.8386598e-22
+-4.8000000e+00 1.0303677e-19
+-4.7000000e+00 6.8985179e-18
+-4.6000000e+00 3.0811780e-16
+-4.5000000e+00 9.5412629e-15
+-4.4000000e+00 2.1211024e-13
+-4.3000000e+00 3.4936723e-12
+-4.2000000e+00 4.3869439e-11
+-4.1000000e+00 4.3093980e-10
+-4.0000000e+00 3.3899539e-09
+-3.9000000e+00 2.1811027e-08
+-3.8000000e+00 1.1699636e-07
+-3.7000000e+00 5.3235423e-07
+-3.6000000e+00 2.0872004e-06
+-3.5000000e+00 7.1518499e-06
+-3.4000000e+00 2.1693693e-05
+-3.3000000e+00 5.8931800e-05
+-3.2000000e+00 1.4488646e-04
+-3.1000000e+00 3.2545783e-04
+-3.0000000e+00 6.7372862e-04
+-2.9000000e+00 1.2953225e-03
+-2.8000000e+00 2.3293325e-03
+-2.7000000e+00 3.9428747e-03
+-2.6000000e+00 6.3186831e-03
+-2.5000000e+00 9.6369248e-03
+-2.4000000e+00 1.4053985e-02
+-2.3000000e+00 1.9681837e-02
+-2.2000000e+00 2.6571531e-02
+-2.1000000e+00 3.4703439e-02
+-2.0000000e+00 4.3985478e-02
+-1.9000000e+00 5.4259062e-02
+-1.8000000e+00 6.5311333e-02
+-1.7000000e+00 7.6891507e-02
+-1.6000000e+00 8.8728939e-02
+-1.5000000e+00 1.0055075e-01
+-1.4000000e+00 1.1209734e-01
+-1.3000000e+00 1.2313470e-01
+-1.2000000e+00 1.3346307e-01
+-1.1000000e+00 1.4292196e-01
+-1.0000000e+00 1.5139191e-01
+-9.0000000e-01 1.5879352e-01
+-8.0000000e-01 1.6508452e-01
+-7.0000000e-01 1.7025552e-01
+-6.0000000e-01 1.7432489e-01
+-5.0000000e-01 1.7733355e-01
+-4.0000000e-01 1.7933968e-01
+-3.0000000e-01 1.8041398e-01
+-2.0000000e-01 1.8063532e-01
+-1.0000000e-01 1.8008710e-01
+-1.0269563e-15 1.7885416e-01
+1.0000000e-01 1.7702044e-01
+2.0000000e-01 1.7466703e-01
+3.0000000e-01 1.7187090e-01
+4.0000000e-01 1.6870392e-01
+5.0000000e-01 1.6523228e-01
+6.0000000e-01 1.6151625e-01
+7.0000000e-01 1.5761010e-01
+8.0000000e-01 1.5356220e-01
+9.0000000e-01 1.4941526e-01
+1.0000000e-00 1.4520664e-01
+1.1000000e+00 1.4096874e-01
+1.2000000e+00 1.3672939e-01
+1.3000000e+00 1.3251227e-01
+1.4000000e+00 1.2833731e-01
+1.5000000e+00 1.2422109e-01
+1.6000000e+00 1.2017724e-01
+1.7000000e+00 1.1621676e-01
+1.8000000e+00 1.1234837e-01
+1.9000000e+00 1.0857877e-01
+2.0000000e+00 1.0491299e-01
+2.1000000e+00 1.0135454e-01
+2.2000000e+00 9.7905675e-02
+2.3000000e+00 9.4567597e-02
+2.4000000e+00 9.1340593e-02
+2.5000000e+00 8.8224201e-02
+2.6000000e+00 8.5217338e-02
+2.7000000e+00 8.2318412e-02
+2.8000000e+00 7.9525419e-02
+2.9000000e+00 7.6836028e-02
+3.0000000e+00 7.4247655e-02
+3.1000000e+00 7.1757520e-02
+3.2000000e+00 6.9362706e-02
+3.3000000e+00 6.7060199e-02
+3.4000000e+00 6.4846927e-02
+3.5000000e+00 6.2719789e-02
+3.6000000e+00 6.0675685e-02
+3.7000000e+00 5.8711536e-02
+3.8000000e+00 5.6824298e-02
+3.9000000e+00 5.5010981e-02
+4.0000000e+00 5.3268657e-02
+4.1000000e+00 5.1594472e-02
+4.2000000e+00 4.9985647e-02
+4.3000000e+00 4.8439490e-02
+4.4000000e+00 4.6953393e-02
+4.5000000e+00 4.5524840e-02
+4.6000000e+00 4.4151403e-02
+4.7000000e+00 4.2830744e-02
+4.8000000e+00 4.1560618e-02
+4.9000000e+00 4.0338866e-02
+5.0000000e+00 3.9163420e-02
+5.1000000e+00 3.8032293e-02
+5.2000000e+00 3.6943588e-02
+5.3000000e+00 3.5895483e-02
+5.4000000e+00 3.4886240e-02
+5.5000000e+00 3.3914195e-02
+5.6000000e+00 3.2977757e-02
+5.7000000e+00 3.2075409e-02
+5.8000000e+00 3.1205698e-02
+5.9000000e+00 3.0367240e-02
+6.0000000e+00 2.9558712e-02
+6.1000000e+00 2.8778853e-02
+6.2000000e+00 2.8026456e-02
+6.3000000e+00 2.7300373e-02
+6.4000000e+00 2.6599507e-02
+6.5000000e+00 2.5922811e-02
+6.6000000e+00 2.5269286e-02
+6.7000000e+00 2.4637980e-02
+6.8000000e+00 2.4027982e-02
+6.9000000e+00 2.3438424e-02
+7.0000000e+00 2.2868480e-02
+7.1000000e+00 2.2317357e-02
+7.2000000e+00 2.1784301e-02
+7.3000000e+00 2.1268592e-02
+7.4000000e+00 2.0769543e-02
+7.5000000e+00 2.0286495e-02
+7.6000000e+00 1.9818822e-02
+7.7000000e+00 1.9365924e-02
+7.8000000e+00 1.8927229e-02
+7.9000000e+00 1.8502190e-02
+8.0000000e+00 1.8090284e-02
+8.1000000e+00 1.7691010e-02
+8.2000000e+00 1.7303892e-02
+8.3000000e+00 1.6928471e-02
+8.4000000e+00 1.6564312e-02
+8.5000000e+00 1.6210995e-02
+8.6000000e+00 1.5868120e-02
+8.7000000e+00 1.5535304e-02
+8.8000000e+00 1.5212181e-02
+8.9000000e+00 1.4898400e-02
+9.0000000e+00 1.4593624e-02
+9.1000000e+00 1.4297531e-02
+9.2000000e+00 1.4009812e-02
+9.3000000e+00 1.3730172e-02
+9.4000000e+00 1.3458328e-02
+9.5000000e+00 1.3194007e-02
+9.6000000e+00 1.2936948e-02
+9.7000000e+00 1.2686902e-02
+9.8000000e+00 1.2443629e-02
+9.9000000e+00 1.2206897e-02
+1.0000000e+01 1.1976487e-02
+1.0100000e+01 1.1752186e-02
+1.0200000e+01 1.1533791e-02
+1.0300000e+01 1.1321105e-02
+1.0400000e+01 1.1113940e-02
+1.0500000e+01 1.0912115e-02
+1.0600000e+01 1.0715458e-02
+1.0700000e+01 1.0523801e-02
+1.0800000e+01 1.0336983e-02
+1.0900000e+01 1.0154849e-02
+1.1000000e+01 9.9772519e-03
+1.1100000e+01 9.8040478e-03
+1.1200000e+01 9.6350992e-03
+1.1300000e+01 9.4702736e-03
+1.1400000e+01 9.3094433e-03
+1.1500000e+01 9.1524856e-03
+1.1600000e+01 8.9992820e-03
+1.1700000e+01 8.8497185e-03
+1.1800000e+01 8.7036852e-03
+1.1900000e+01 8.5610761e-03
+1.2000000e+01 8.4217891e-03
+1.2100000e+01 8.2857256e-03
+1.2200000e+01 8.1527907e-03
+1.2300000e+01 8.0228928e-03
+1.2400000e+01 7.8959433e-03
+1.2500000e+01 7.7718570e-03
+1.2600000e+01 7.6505515e-03
+1.2700000e+01 7.5319472e-03
+1.2800000e+01 7.4159673e-03
+1.2900000e+01 7.3025377e-03
+1.3000000e+01 7.1915866e-03
+1.3100000e+01 7.0830449e-03
+1.3200000e+01 6.9768457e-03
+1.3300000e+01 6.8729241e-03
+1.3400000e+01 6.7712178e-03
+1.3500000e+01 6.6716662e-03
+1.3600000e+01 6.5742109e-03
+1.3700000e+01 6.4787954e-03
+1.3800000e+01 6.3853647e-03
+1.3900000e+01 6.2938662e-03
+1.4000000e+01 6.2042484e-03
+1.4100000e+01 6.1164618e-03
+1.4200000e+01 6.0304583e-03
+1.4300000e+01 5.9461914e-03
+1.4400000e+01 5.8636161e-03
+1.4500000e+01 5.7826888e-03
+1.4600000e+01 5.7033672e-03
+1.4700000e+01 5.6256103e-03
+1.4800000e+01 5.5493784e-03
+1.4900000e+01 5.4746330e-03
+1.5000000e+01 5.4013369e-03
diff --git a/gsl-1.9/doc/linalg.texi b/gsl-1.9/doc/linalg.texi
new file mode 100644
index 0000000..839f4d5
--- /dev/null
+++ b/gsl-1.9/doc/linalg.texi
@@ -0,0 +1,1117 @@
+@cindex linear algebra
+@cindex solution of linear systems, Ax=b
+@cindex matrix factorization
+@cindex factorization of matrices
+
+This chapter describes functions for solving linear systems. The
+library provides linear algebra operations which operate directly on
+the @code{gsl_vector} and @code{gsl_matrix} objects. These routines
+use the standard algorithms from Golub & Van Loan's @cite{Matrix
+Computations}.
+
+@cindex LAPACK, recommended for linear algebra
+When dealing with very large systems the routines found in @sc{lapack}
+should be considered. These support specialized data representations
+and other optimizations.
+
+The functions described in this chapter are declared in the header file
+@file{gsl_linalg.h}.
+
+
+@menu
+* LU Decomposition::
+* QR Decomposition::
+* QR Decomposition with Column Pivoting::
+* Singular Value Decomposition::
+* Cholesky Decomposition::
+* Tridiagonal Decomposition of Real Symmetric Matrices::
+* Tridiagonal Decomposition of Hermitian Matrices::
+* Hessenberg Decomposition of Real Matrices::
+* Bidiagonalization::
+* Householder Transformations::
+* Householder solver for linear systems::
+* Tridiagonal Systems::
+* Balancing::
+* Linear Algebra Examples::
+* Linear Algebra References and Further Reading::
+@end menu
+
+@node LU Decomposition
+@section LU Decomposition
+@cindex LU decomposition
+
+A general square matrix @math{A} has an @math{LU} decomposition into
+upper and lower triangular matrices,
+@tex
+\beforedisplay
+$$
+P A = L U
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+P A = L U
+@end example
+
+@end ifinfo
+@noindent
+where @math{P} is a permutation matrix, @math{L} is unit lower
+triangular matrix and @math{U} is upper triangular matrix. For square
+matrices this decomposition can be used to convert the linear system
+@math{A x = b} into a pair of triangular systems (@math{L y = P b},
+@math{U x = y}), which can be solved by forward and back-substitution.
+Note that the @math{LU} decomposition is valid for singular matrices.
+
+@deftypefun int gsl_linalg_LU_decomp (gsl_matrix * @var{A}, gsl_permutation * @var{p}, int * @var{signum})
+@deftypefunx int gsl_linalg_complex_LU_decomp (gsl_matrix_complex * @var{A}, gsl_permutation * @var{p}, int * @var{signum})
+These functions factorize the square matrix @var{A} into the @math{LU}
+decomposition @math{PA = LU}. On output the diagonal and upper
+triangular part of the input matrix @var{A} contain the matrix
+@math{U}. The lower triangular part of the input matrix (excluding the
+diagonal) contains @math{L}. The diagonal elements of @math{L} are
+unity, and are not stored.
+
+The permutation matrix @math{P} is encoded in the permutation
+@var{p}. The @math{j}-th column of the matrix @math{P} is given by the
+@math{k}-th column of the identity matrix, where @math{k = p_j} the
+@math{j}-th element of the permutation vector. The sign of the
+permutation is given by @var{signum}. It has the value @math{(-1)^n},
+where @math{n} is the number of interchanges in the permutation.
+
+The algorithm used in the decomposition is Gaussian Elimination with
+partial pivoting (Golub & Van Loan, @cite{Matrix Computations},
+Algorithm 3.4.1).
+@end deftypefun
+
+@cindex linear systems, solution of
+@deftypefun int gsl_linalg_LU_solve (const gsl_matrix * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+@deftypefunx int gsl_linalg_complex_LU_solve (const gsl_matrix_complex * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector_complex * @var{b}, gsl_vector_complex * @var{x})
+These functions solve the square system @math{A x = b} using the @math{LU}
+decomposition of @math{A} into (@var{LU}, @var{p}) given by
+@code{gsl_linalg_LU_decomp} or @code{gsl_linalg_complex_LU_decomp}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_LU_svx (const gsl_matrix * @var{LU}, const gsl_permutation * @var{p}, gsl_vector * @var{x})
+@deftypefunx int gsl_linalg_complex_LU_svx (const gsl_matrix_complex * @var{LU}, const gsl_permutation * @var{p}, gsl_vector_complex * @var{x})
+These functions solve the square system @math{A x = b} in-place using the
+@math{LU} decomposition of @math{A} into (@var{LU},@var{p}). On input
+@var{x} should contain the right-hand side @math{b}, which is replaced
+by the solution on output.
+@end deftypefun
+
+@cindex refinement of solutions in linear systems
+@cindex iterative refinement of solutions in linear systems
+@cindex linear systems, refinement of solutions
+@deftypefun int gsl_linalg_LU_refine (const gsl_matrix * @var{A}, const gsl_matrix * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x}, gsl_vector * @var{residual})
+@deftypefunx int gsl_linalg_complex_LU_refine (const gsl_matrix_complex * @var{A}, const gsl_matrix_complex * @var{LU}, const gsl_permutation * @var{p}, const gsl_vector_complex * @var{b}, gsl_vector_complex * @var{x}, gsl_vector_complex * @var{residual})
+These functions apply an iterative improvement to @var{x}, the solution
+of @math{A x = b}, using the @math{LU} decomposition of @math{A} into
+(@var{LU},@var{p}). The initial residual @math{r = A x - b} is also
+computed and stored in @var{residual}.
+@end deftypefun
+
+@cindex inverse of a matrix, by LU decomposition
+@cindex matrix inverse
+@deftypefun int gsl_linalg_LU_invert (const gsl_matrix * @var{LU}, const gsl_permutation * @var{p}, gsl_matrix * @var{inverse})
+@deftypefunx int gsl_linalg_complex_LU_invert (const gsl_matrix_complex * @var{LU}, const gsl_permutation * @var{p}, gsl_matrix_complex * @var{inverse})
+These functions compute the inverse of a matrix @math{A} from its
+@math{LU} decomposition (@var{LU},@var{p}), storing the result in the
+matrix @var{inverse}. The inverse is computed by solving the system
+@math{A x = b} for each column of the identity matrix. It is preferable
+to avoid direct use of the inverse whenever possible, as the linear
+solver functions can obtain the same result more efficiently and
+reliably (consult any introductory textbook on numerical linear algebra
+for details).
+@end deftypefun
+
+@cindex determinant of a matrix, by LU decomposition
+@cindex matrix determinant
+@deftypefun double gsl_linalg_LU_det (gsl_matrix * @var{LU}, int @var{signum})
+@deftypefunx gsl_complex gsl_linalg_complex_LU_det (gsl_matrix_complex * @var{LU}, int @var{signum})
+These functions compute the determinant of a matrix @math{A} from its
+@math{LU} decomposition, @var{LU}. The determinant is computed as the
+product of the diagonal elements of @math{U} and the sign of the row
+permutation @var{signum}.
+@end deftypefun
+
+@cindex logarithm of the determinant of a matrix
+@deftypefun double gsl_linalg_LU_lndet (gsl_matrix * @var{LU})
+@deftypefunx double gsl_linalg_complex_LU_lndet (gsl_matrix_complex * @var{LU})
+These functions compute the logarithm of the absolute value of the
+determinant of a matrix @math{A}, @math{\ln|\det(A)|}, from its @math{LU}
+decomposition, @var{LU}. This function may be useful if the direct
+computation of the determinant would overflow or underflow.
+@end deftypefun
+
+@cindex sign of the determinant of a matrix
+@deftypefun int gsl_linalg_LU_sgndet (gsl_matrix * @var{LU}, int @var{signum})
+@deftypefunx gsl_complex gsl_linalg_complex_LU_sgndet (gsl_matrix_complex * @var{LU}, int @var{signum})
+These functions compute the sign or phase factor of the determinant of a
+matrix @math{A}, @math{\det(A)/|\det(A)|}, from its @math{LU} decomposition,
+@var{LU}.
+@end deftypefun
+
+@node QR Decomposition
+@section QR Decomposition
+@cindex QR decomposition
+
+A general rectangular @math{M}-by-@math{N} matrix @math{A} has a
+@math{QR} decomposition into the product of an orthogonal
+@math{M}-by-@math{M} square matrix @math{Q} (where @math{Q^T Q = I}) and
+an @math{M}-by-@math{N} right-triangular matrix @math{R},
+@tex
+\beforedisplay
+$$
+A = Q R
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = Q R
+@end example
+
+@end ifinfo
+@noindent
+This decomposition can be used to convert the linear system @math{A x =
+b} into the triangular system @math{R x = Q^T b}, which can be solved by
+back-substitution. Another use of the @math{QR} decomposition is to
+compute an orthonormal basis for a set of vectors. The first @math{N}
+columns of @math{Q} form an orthonormal basis for the range of @math{A},
+@math{ran(A)}, when @math{A} has full column rank.
+
+@deftypefun int gsl_linalg_QR_decomp (gsl_matrix * @var{A}, gsl_vector * @var{tau})
+This function factorizes the @math{M}-by-@math{N} matrix @var{A} into
+the @math{QR} decomposition @math{A = Q R}. On output the diagonal and
+upper triangular part of the input matrix contain the matrix
+@math{R}. The vector @var{tau} and the columns of the lower triangular
+part of the matrix @var{A} contain the Householder coefficients and
+Householder vectors which encode the orthogonal matrix @var{Q}. The
+vector @var{tau} must be of length @math{k=\min(M,N)}. The matrix
+@math{Q} is related to these components by, @math{Q = Q_k ... Q_2 Q_1}
+where @math{Q_i = I - \tau_i v_i v_i^T} and @math{v_i} is the
+Householder vector @math{v_i =
+(0,...,1,A(i+1,i),A(i+2,i),...,A(m,i))}. This is the same storage scheme
+as used by @sc{lapack}.
+
+The algorithm used to perform the decomposition is Householder QR (Golub
+& Van Loan, @cite{Matrix Computations}, Algorithm 5.2.1).
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_solve (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the square system @math{A x = b} using the @math{QR}
+decomposition of @math{A} into (@var{QR}, @var{tau}) given by
+@code{gsl_linalg_QR_decomp}. The least-squares solution for rectangular systems can
+be found using @code{gsl_linalg_QR_lssolve}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_svx (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, gsl_vector * @var{x})
+This function solves the square system @math{A x = b} in-place using the
+@math{QR} decomposition of @math{A} into (@var{QR},@var{tau}) given by
+@code{gsl_linalg_QR_decomp}. On input @var{x} should contain the
+right-hand side @math{b}, which is replaced by the solution on output.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_lssolve (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, const gsl_vector * @var{b}, gsl_vector * @var{x}, gsl_vector * @var{residual})
+This function finds the least squares solution to the overdetermined
+system @math{A x = b} where the matrix @var{A} has more rows than
+columns. The least squares solution minimizes the Euclidean norm of the
+residual, @math{||Ax - b||}.The routine uses the @math{QR} decomposition
+of @math{A} into (@var{QR}, @var{tau}) given by
+@code{gsl_linalg_QR_decomp}. The solution is returned in @var{x}. The
+residual is computed as a by-product and stored in @var{residual}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_QTvec (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, gsl_vector * @var{v})
+This function applies the matrix @math{Q^T} encoded in the decomposition
+(@var{QR},@var{tau}) to the vector @var{v}, storing the result @math{Q^T
+v} in @var{v}. The matrix multiplication is carried out directly using
+the encoding of the Householder vectors without needing to form the full
+matrix @math{Q^T}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_Qvec (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, gsl_vector * @var{v})
+This function applies the matrix @math{Q} encoded in the decomposition
+(@var{QR},@var{tau}) to the vector @var{v}, storing the result @math{Q
+v} in @var{v}. The matrix multiplication is carried out directly using
+the encoding of the Householder vectors without needing to form the full
+matrix @math{Q}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_Rsolve (const gsl_matrix * @var{QR}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the triangular system @math{R x = b} for
+@var{x}. It may be useful if the product @math{b' = Q^T b} has already
+been computed using @code{gsl_linalg_QR_QTvec}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_Rsvx (const gsl_matrix * @var{QR}, gsl_vector * @var{x})
+This function solves the triangular system @math{R x = b} for @var{x}
+in-place. On input @var{x} should contain the right-hand side @math{b}
+and is replaced by the solution on output. This function may be useful if
+the product @math{b' = Q^T b} has already been computed using
+@code{gsl_linalg_QR_QTvec}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_unpack (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, gsl_matrix * @var{Q}, gsl_matrix * @var{R})
+This function unpacks the encoded @math{QR} decomposition
+(@var{QR},@var{tau}) into the matrices @var{Q} and @var{R}, where
+@var{Q} is @math{M}-by-@math{M} and @var{R} is @math{M}-by-@math{N}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_QRsolve (gsl_matrix * @var{Q}, gsl_matrix * @var{R}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the system @math{R x = Q^T b} for @var{x}. It can
+be used when the @math{QR} decomposition of a matrix is available in
+unpacked form as (@var{Q}, @var{R}).
+@end deftypefun
+
+@deftypefun int gsl_linalg_QR_update (gsl_matrix * @var{Q}, gsl_matrix * @var{R}, gsl_vector * @var{w}, const gsl_vector * @var{v})
+This function performs a rank-1 update @math{w v^T} of the @math{QR}
+decomposition (@var{Q}, @var{R}). The update is given by @math{Q'R' = Q
+R + w v^T} where the output matrices @math{Q'} and @math{R'} are also
+orthogonal and right triangular. Note that @var{w} is destroyed by the
+update.
+@end deftypefun
+
+@deftypefun int gsl_linalg_R_solve (const gsl_matrix * @var{R}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the triangular system @math{R x = b} for the
+@math{N}-by-@math{N} matrix @var{R}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_R_svx (const gsl_matrix * @var{R}, gsl_vector * @var{x})
+This function solves the triangular system @math{R x = b} in-place. On
+input @var{x} should contain the right-hand side @math{b}, which is
+replaced by the solution on output.
+@end deftypefun
+
+@node QR Decomposition with Column Pivoting
+@section QR Decomposition with Column Pivoting
+@cindex QR decomposition with column pivoting
+
+The @math{QR} decomposition can be extended to the rank deficient case
+by introducing a column permutation @math{P},
+@tex
+\beforedisplay
+$$
+A P = Q R
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A P = Q R
+@end example
+
+@end ifinfo
+@noindent
+The first @math{r} columns of @math{Q} form an orthonormal basis
+for the range of @math{A} for a matrix with column rank @math{r}. This
+decomposition can also be used to convert the linear system @math{A x =
+b} into the triangular system @math{R y = Q^T b, x = P y}, which can be
+solved by back-substitution and permutation. We denote the @math{QR}
+decomposition with column pivoting by @math{QRP^T} since @math{A = Q R
+P^T}.
+
+@deftypefun int gsl_linalg_QRPT_decomp (gsl_matrix * @var{A}, gsl_vector * @var{tau}, gsl_permutation * @var{p}, int * @var{signum}, gsl_vector * @var{norm})
+This function factorizes the @math{M}-by-@math{N} matrix @var{A} into
+the @math{QRP^T} decomposition @math{A = Q R P^T}. On output the
+diagonal and upper triangular part of the input matrix contain the
+matrix @math{R}. The permutation matrix @math{P} is stored in the
+permutation @var{p}. The sign of the permutation is given by
+@var{signum}. It has the value @math{(-1)^n}, where @math{n} is the
+number of interchanges in the permutation. The vector @var{tau} and the
+columns of the lower triangular part of the matrix @var{A} contain the
+Householder coefficients and vectors which encode the orthogonal matrix
+@var{Q}. The vector @var{tau} must be of length @math{k=\min(M,N)}. The
+matrix @math{Q} is related to these components by, @math{Q = Q_k ... Q_2
+Q_1} where @math{Q_i = I - \tau_i v_i v_i^T} and @math{v_i} is the
+Householder vector @math{v_i =
+(0,...,1,A(i+1,i),A(i+2,i),...,A(m,i))}. This is the same storage scheme
+as used by @sc{lapack}. The vector @var{norm} is a workspace of length
+@var{N} used for column pivoting.
+
+The algorithm used to perform the decomposition is Householder QR with
+column pivoting (Golub & Van Loan, @cite{Matrix Computations}, Algorithm
+5.4.1).
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_decomp2 (const gsl_matrix * @var{A}, gsl_matrix * @var{q}, gsl_matrix * @var{r}, gsl_vector * @var{tau}, gsl_permutation * @var{p}, int * @var{signum}, gsl_vector * @var{norm})
+This function factorizes the matrix @var{A} into the decomposition
+@math{A = Q R P^T} without modifying @var{A} itself and storing the
+output in the separate matrices @var{q} and @var{r}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_solve (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the square system @math{A x = b} using the @math{QRP^T}
+decomposition of @math{A} into (@var{QR}, @var{tau}, @var{p}) given by
+@code{gsl_linalg_QRPT_decomp}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_svx (const gsl_matrix * @var{QR}, const gsl_vector * @var{tau}, const gsl_permutation * @var{p}, gsl_vector * @var{x})
+This function solves the square system @math{A x = b} in-place using the
+@math{QRP^T} decomposition of @math{A} into
+(@var{QR},@var{tau},@var{p}). On input @var{x} should contain the
+right-hand side @math{b}, which is replaced by the solution on output.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_QRsolve (const gsl_matrix * @var{Q}, const gsl_matrix * @var{R}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the square system @math{R P^T x = Q^T b} for
+@var{x}. It can be used when the @math{QR} decomposition of a matrix is
+available in unpacked form as (@var{Q}, @var{R}).
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_update (gsl_matrix * @var{Q}, gsl_matrix * @var{R}, const gsl_permutation * @var{p}, gsl_vector * @var{u}, const gsl_vector * @var{v})
+This function performs a rank-1 update @math{w v^T} of the @math{QRP^T}
+decomposition (@var{Q}, @var{R}, @var{p}). The update is given by
+@math{Q'R' = Q R + w v^T} where the output matrices @math{Q'} and
+@math{R'} are also orthogonal and right triangular. Note that @var{w} is
+destroyed by the update. The permutation @var{p} is not changed.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_Rsolve (const gsl_matrix * @var{QR}, const gsl_permutation * @var{p}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the triangular system @math{R P^T x = b} for the
+@math{N}-by-@math{N} matrix @math{R} contained in @var{QR}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_QRPT_Rsvx (const gsl_matrix * @var{QR}, const gsl_permutation * @var{p}, gsl_vector * @var{x})
+This function solves the triangular system @math{R P^T x = b} in-place
+for the @math{N}-by-@math{N} matrix @math{R} contained in @var{QR}. On
+input @var{x} should contain the right-hand side @math{b}, which is
+replaced by the solution on output.
+@end deftypefun
+
+@node Singular Value Decomposition
+@section Singular Value Decomposition
+@cindex SVD
+@cindex singular value decomposition
+
+A general rectangular @math{M}-by-@math{N} matrix @math{A} has a
+singular value decomposition (@sc{svd}) into the product of an
+@math{M}-by-@math{N} orthogonal matrix @math{U}, an @math{N}-by-@math{N}
+diagonal matrix of singular values @math{S} and the transpose of an
+@math{N}-by-@math{N} orthogonal square matrix @math{V},
+@tex
+\beforedisplay
+$$
+A = U S V^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = U S V^T
+@end example
+
+@end ifinfo
+@noindent
+The singular values
+@c{$\sigma_i = S_{ii}$}
+@math{\sigma_i = S_@{ii@}} are all non-negative and are
+generally chosen to form a non-increasing sequence
+@c{$\sigma_1 \ge \sigma_2 \ge ... \ge \sigma_N \ge 0$}
+@math{\sigma_1 >= \sigma_2 >= ... >= \sigma_N >= 0}.
+
+The singular value decomposition of a matrix has many practical uses.
+The condition number of the matrix is given by the ratio of the largest
+singular value to the smallest singular value. The presence of a zero
+singular value indicates that the matrix is singular. The number of
+non-zero singular values indicates the rank of the matrix. In practice
+singular value decomposition of a rank-deficient matrix will not produce
+exact zeroes for singular values, due to finite numerical
+precision. Small singular values should be edited by choosing a suitable
+tolerance.
+
+For a rank-deficient matrix, the null space of @math{A} is given by
+the columns of @math{V} corresponding to the zero singular values.
+Similarly, the range of @math{A} is given by columns of @math{U}
+corresponding to the non-zero singular values.
+
+@deftypefun int gsl_linalg_SV_decomp (gsl_matrix * @var{A}, gsl_matrix * @var{V}, gsl_vector * @var{S}, gsl_vector * @var{work})
+This function factorizes the @math{M}-by-@math{N} matrix @var{A} into
+the singular value decomposition @math{A = U S V^T} for @c{$M \ge N$}
+@math{M >= N}. On output the matrix @var{A} is replaced by
+@math{U}. The diagonal elements of the singular value matrix @math{S}
+are stored in the vector @var{S}. The singular values are non-negative
+and form a non-increasing sequence from @math{S_1} to @math{S_N}. The
+matrix @var{V} contains the elements of @math{V} in untransposed
+form. To form the product @math{U S V^T} it is necessary to take the
+transpose of @var{V}. A workspace of length @var{N} is required in
+@var{work}.
+
+This routine uses the Golub-Reinsch SVD algorithm.
+@end deftypefun
+
+@deftypefun int gsl_linalg_SV_decomp_mod (gsl_matrix * @var{A}, gsl_matrix * @var{X}, gsl_matrix * @var{V}, gsl_vector * @var{S}, gsl_vector * @var{work})
+This function computes the SVD using the modified Golub-Reinsch
+algorithm, which is faster for @c{$M \gg N$}
+@math{M>>N}. It requires the vector @var{work} of length @var{N} and the
+@math{N}-by-@math{N} matrix @var{X} as additional working space.
+@end deftypefun
+
+@deftypefun int gsl_linalg_SV_decomp_jacobi (gsl_matrix * @var{A}, gsl_matrix * @var{V}, gsl_vector * @var{S})
+This function computes the SVD of the @math{M}-by-@math{N} matrix @var{A}
+using one-sided Jacobi orthogonalization for @c{$M \ge N$}
+@math{M >= N}. The Jacobi method can compute singular values to higher
+relative accuracy than Golub-Reinsch algorithms (see references for
+details).
+@end deftypefun
+
+@deftypefun int gsl_linalg_SV_solve (gsl_matrix * @var{U}, gsl_matrix * @var{V}, gsl_vector * @var{S}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the system @math{A x = b} using the singular value
+decomposition (@var{U}, @var{S}, @var{V}) of @math{A} given by
+@code{gsl_linalg_SV_decomp}.
+
+Only non-zero singular values are used in computing the solution. The
+parts of the solution corresponding to singular values of zero are
+ignored. Other singular values can be edited out by setting them to
+zero before calling this function.
+
+In the over-determined case where @var{A} has more rows than columns the
+system is solved in the least squares sense, returning the solution
+@var{x} which minimizes @math{||A x - b||_2}.
+@end deftypefun
+
+@node Cholesky Decomposition
+@section Cholesky Decomposition
+@cindex Cholesky decomposition
+@cindex square root of a matrix, Cholesky decomposition
+@cindex matrix square root, Cholesky decomposition
+
+A symmetric, positive definite square matrix @math{A} has a Cholesky
+decomposition into a product of a lower triangular matrix @math{L} and
+its transpose @math{L^T},
+@tex
+\beforedisplay
+$$
+A = L L^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = L L^T
+@end example
+
+@end ifinfo
+@noindent
+This is sometimes referred to as taking the square-root of a matrix. The
+Cholesky decomposition can only be carried out when all the eigenvalues
+of the matrix are positive. This decomposition can be used to convert
+the linear system @math{A x = b} into a pair of triangular systems
+(@math{L y = b}, @math{L^T x = y}), which can be solved by forward and
+back-substitution.
+
+@deftypefun int gsl_linalg_cholesky_decomp (gsl_matrix * @var{A})
+This function factorizes the positive-definite symmetric square matrix
+@var{A} into the Cholesky decomposition @math{A = L L^T}. On input
+only the diagonal and lower-triangular part of the matrix @var{A} are
+needed. On output the diagonal and lower triangular part of the input
+matrix @var{A} contain the matrix @math{L}. The upper triangular part
+of the input matrix contains @math{L^T}, the diagonal terms being
+identical for both @math{L} and @math{L^T}. If the matrix is not
+positive-definite then the decomposition will fail, returning the
+error code @code{GSL_EDOM}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_cholesky_solve (const gsl_matrix * @var{cholesky}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the system @math{A x = b} using the Cholesky
+decomposition of @math{A} into the matrix @var{cholesky} given by
+@code{gsl_linalg_cholesky_decomp}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_cholesky_svx (const gsl_matrix * @var{cholesky}, gsl_vector * @var{x})
+This function solves the system @math{A x = b} in-place using the
+Cholesky decomposition of @math{A} into the matrix @var{cholesky} given
+by @code{gsl_linalg_cholesky_decomp}. On input @var{x} should contain
+the right-hand side @math{b}, which is replaced by the solution on
+output.
+@end deftypefun
+
+@node Tridiagonal Decomposition of Real Symmetric Matrices
+@section Tridiagonal Decomposition of Real Symmetric Matrices
+@cindex tridiagonal decomposition
+
+A symmetric matrix @math{A} can be factorized by similarity
+transformations into the form,
+@tex
+\beforedisplay
+$$
+A = Q T Q^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = Q T Q^T
+@end example
+
+@end ifinfo
+@noindent
+where @math{Q} is an orthogonal matrix and @math{T} is a symmetric
+tridiagonal matrix.
+
+@deftypefun int gsl_linalg_symmtd_decomp (gsl_matrix * @var{A}, gsl_vector * @var{tau})
+This function factorizes the symmetric square matrix @var{A} into the
+symmetric tridiagonal decomposition @math{Q T Q^T}. On output the
+diagonal and subdiagonal part of the input matrix @var{A} contain the
+tridiagonal matrix @math{T}. The remaining lower triangular part of the
+input matrix contains the Householder vectors which, together with the
+Householder coefficients @var{tau}, encode the orthogonal matrix
+@math{Q}. This storage scheme is the same as used by @sc{lapack}. The
+upper triangular part of @var{A} is not referenced.
+@end deftypefun
+
+@deftypefun int gsl_linalg_symmtd_unpack (const gsl_matrix * @var{A}, const gsl_vector * @var{tau}, gsl_matrix * @var{Q}, gsl_vector * @var{diag}, gsl_vector * @var{subdiag})
+This function unpacks the encoded symmetric tridiagonal decomposition
+(@var{A}, @var{tau}) obtained from @code{gsl_linalg_symmtd_decomp} into
+the orthogonal matrix @var{Q}, the vector of diagonal elements @var{diag}
+and the vector of subdiagonal elements @var{subdiag}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_symmtd_unpack_T (const gsl_matrix * @var{A}, gsl_vector * @var{diag}, gsl_vector * @var{subdiag})
+This function unpacks the diagonal and subdiagonal of the encoded
+symmetric tridiagonal decomposition (@var{A}, @var{tau}) obtained from
+@code{gsl_linalg_symmtd_decomp} into the vectors @var{diag} and @var{subdiag}.
+@end deftypefun
+
+@node Tridiagonal Decomposition of Hermitian Matrices
+@section Tridiagonal Decomposition of Hermitian Matrices
+@cindex tridiagonal decomposition
+
+A hermitian matrix @math{A} can be factorized by similarity
+transformations into the form,
+@tex
+\beforedisplay
+$$
+A = U T U^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = U T U^T
+@end example
+
+@end ifinfo
+@noindent
+where @math{U} is a unitary matrix and @math{T} is a real symmetric
+tridiagonal matrix.
+
+
+@deftypefun int gsl_linalg_hermtd_decomp (gsl_matrix_complex * @var{A}, gsl_vector_complex * @var{tau})
+This function factorizes the hermitian matrix @var{A} into the symmetric
+tridiagonal decomposition @math{U T U^T}. On output the real parts of
+the diagonal and subdiagonal part of the input matrix @var{A} contain
+the tridiagonal matrix @math{T}. The remaining lower triangular part of
+the input matrix contains the Householder vectors which, together with
+the Householder coefficients @var{tau}, encode the orthogonal matrix
+@math{Q}. This storage scheme is the same as used by @sc{lapack}. The
+upper triangular part of @var{A} and imaginary parts of the diagonal are
+not referenced.
+@end deftypefun
+
+@deftypefun int gsl_linalg_hermtd_unpack (const gsl_matrix_complex * @var{A}, const gsl_vector_complex * @var{tau}, gsl_matrix_complex * @var{Q}, gsl_vector * @var{diag}, gsl_vector * @var{subdiag})
+This function unpacks the encoded tridiagonal decomposition (@var{A},
+@var{tau}) obtained from @code{gsl_linalg_hermtd_decomp} into the
+unitary matrix @var{U}, the real vector of diagonal elements @var{diag} and
+the real vector of subdiagonal elements @var{subdiag}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_hermtd_unpack_T (const gsl_matrix_complex * @var{A}, gsl_vector * @var{diag}, gsl_vector * @var{subdiag})
+This function unpacks the diagonal and subdiagonal of the encoded
+tridiagonal decomposition (@var{A}, @var{tau}) obtained from the
+@code{gsl_linalg_hermtd_decomp} into the real vectors
+@var{diag} and @var{subdiag}.
+@end deftypefun
+
+@node Hessenberg Decomposition of Real Matrices
+@section Hessenberg Decomposition of Real Matrices
+@cindex hessenberg decomposition
+
+A general matrix @math{A} can be decomposed by orthogonal
+similarity transformations into the form
+@tex
+\beforedisplay
+$$
+A = U H U^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = U H U^T
+@end example
+
+@end ifinfo
+where @math{U} is orthogonal and @math{H} is an upper Hessenberg matrix,
+meaning that it has zeros below the first subdiagonal. The
+Hessenberg reduction is the first step in the Schur decomposition
+for the nonsymmetric eigenvalue problem, but has applications in
+other areas as well.
+
+@deftypefun int gsl_linalg_hessenberg (gsl_matrix * @var{A}, gsl_vector * @var{tau})
+This function computes the Hessenberg decomposition of the matrix
+@var{A} by applying the similarity transformation @math{H = U^T A U}.
+On output, @math{H} is stored in the upper portion of @var{A}. The
+information required to construct the matrix @math{U} is stored in
+the lower triangular portion of @var{A}. @math{U} is a product
+of @math{N - 2} Householder matrices. The Householder vectors
+are stored in the lower portion of @var{A} (below the subdiagonal)
+and the Householder coefficients are stored in the vector @var{tau}.
+@var{tau} must be of length @var{N}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_hessenberg_unpack (gsl_matrix * @var{H}, gsl_vector * @var{tau}, gsl_matrix * @var{U})
+This function constructs the orthogonal matrix @math{U} from the
+information stored in the Hessenberg matrix @var{H} along with the
+vector @var{tau}. @var{H} and @var{tau} are outputs from
+@code{gsl_linalg_hessenberg}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_hessenberg_unpack_accum (gsl_matrix * @var{H}, gsl_vector * @var{tau}, gsl_matrix * @var{V})
+This function is similar to @code{gsl_linalg_hessenberg_unpack}, except
+it accumulates the matrix @var{U} into @var{V}, so that @math{V' = VU}.
+The matrix @var{V} must be initialized prior to calling this function.
+Setting @var{V} to the identity matrix provides the same result as
+@code{gsl_linalg_hessenberg_unpack}. If @var{H} is order @var{N}, then
+@var{V} must have @var{N} columns but may have any number of rows.
+@end deftypefun
+
+@deftypefun void gsl_linalg_hessenberg_set_zero (gsl_matrix * @var{H})
+This function sets the lower triangular portion of @var{H}, below
+the subdiagonal, to zero. It is useful for clearing out the
+Householder vectors after calling @code{gsl_linalg_hessenberg}.
+@end deftypefun
+
+@node Bidiagonalization
+@section Bidiagonalization
+@cindex bidiagonalization of real matrices
+
+A general matrix @math{A} can be factorized by similarity
+transformations into the form,
+@tex
+\beforedisplay
+$$
+A = U B V^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = U B V^T
+@end example
+
+@end ifinfo
+@noindent
+where @math{U} and @math{V} are orthogonal matrices and @math{B} is a
+@math{N}-by-@math{N} bidiagonal matrix with non-zero entries only on the
+diagonal and superdiagonal. The size of @var{U} is @math{M}-by-@math{N}
+and the size of @var{V} is @math{N}-by-@math{N}.
+
+@deftypefun int gsl_linalg_bidiag_decomp (gsl_matrix * @var{A}, gsl_vector * @var{tau_U}, gsl_vector * @var{tau_V})
+This function factorizes the @math{M}-by-@math{N} matrix @var{A} into
+bidiagonal form @math{U B V^T}. The diagonal and superdiagonal of the
+matrix @math{B} are stored in the diagonal and superdiagonal of @var{A}.
+The orthogonal matrices @math{U} and @var{V} are stored as compressed
+Householder vectors in the remaining elements of @var{A}. The
+Householder coefficients are stored in the vectors @var{tau_U} and
+@var{tau_V}. The length of @var{tau_U} must equal the number of
+elements in the diagonal of @var{A} and the length of @var{tau_V} should
+be one element shorter.
+@end deftypefun
+
+@deftypefun int gsl_linalg_bidiag_unpack (const gsl_matrix * @var{A}, const gsl_vector * @var{tau_U}, gsl_matrix * @var{U}, const gsl_vector * @var{tau_V}, gsl_matrix * @var{V}, gsl_vector * @var{diag}, gsl_vector * @var{superdiag})
+This function unpacks the bidiagonal decomposition of @var{A} given by
+@code{gsl_linalg_bidiag_decomp}, (@var{A}, @var{tau_U}, @var{tau_V})
+into the separate orthogonal matrices @var{U}, @var{V} and the diagonal
+vector @var{diag} and superdiagonal @var{superdiag}. Note that @var{U}
+is stored as a compact @math{M}-by-@math{N} orthogonal matrix satisfying
+@math{U^T U = I} for efficiency.
+@end deftypefun
+
+@deftypefun int gsl_linalg_bidiag_unpack2 (gsl_matrix * @var{A}, gsl_vector * @var{tau_U}, gsl_vector * @var{tau_V}, gsl_matrix * @var{V})
+This function unpacks the bidiagonal decomposition of @var{A} given by
+@code{gsl_linalg_bidiag_decomp}, (@var{A}, @var{tau_U}, @var{tau_V})
+into the separate orthogonal matrices @var{U}, @var{V} and the diagonal
+vector @var{diag} and superdiagonal @var{superdiag}. The matrix @var{U}
+is stored in-place in @var{A}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_bidiag_unpack_B (const gsl_matrix * @var{A}, gsl_vector * @var{diag}, gsl_vector * @var{superdiag})
+This function unpacks the diagonal and superdiagonal of the bidiagonal
+decomposition of @var{A} given by @code{gsl_linalg_bidiag_decomp}, into
+the diagonal vector @var{diag} and superdiagonal vector @var{superdiag}.
+@end deftypefun
+
+@node Householder Transformations
+@section Householder Transformations
+@cindex Householder matrix
+@cindex Householder transformation
+@cindex transformation, Householder
+
+A Householder transformation is a rank-1 modification of the identity
+matrix which can be used to zero out selected elements of a vector. A
+Householder matrix @math{P} takes the form,
+@tex
+\beforedisplay
+$$
+P = I - \tau v v^T
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+P = I - \tau v v^T
+@end example
+
+@end ifinfo
+@noindent
+where @math{v} is a vector (called the @dfn{Householder vector}) and
+@math{\tau = 2/(v^T v)}. The functions described in this section use the
+rank-1 structure of the Householder matrix to create and apply
+Householder transformations efficiently.
+
+@deftypefun double gsl_linalg_householder_transform (gsl_vector * @var{v})
+This function prepares a Householder transformation @math{P = I - \tau v
+v^T} which can be used to zero all the elements of the input vector except
+the first. On output the transformation is stored in the vector @var{v}
+and the scalar @math{\tau} is returned.
+@end deftypefun
+
+@deftypefun int gsl_linalg_householder_hm (double tau, const gsl_vector * v, gsl_matrix * A)
+This function applies the Householder matrix @math{P} defined by the
+scalar @var{tau} and the vector @var{v} to the left-hand side of the
+matrix @var{A}. On output the result @math{P A} is stored in @var{A}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_householder_mh (double tau, const gsl_vector * v, gsl_matrix * A)
+This function applies the Householder matrix @math{P} defined by the
+scalar @var{tau} and the vector @var{v} to the right-hand side of the
+matrix @var{A}. On output the result @math{A P} is stored in @var{A}.
+@end deftypefun
+
+@deftypefun int gsl_linalg_householder_hv (double tau, const gsl_vector * v, gsl_vector * w)
+This function applies the Householder transformation @math{P} defined by
+the scalar @var{tau} and the vector @var{v} to the vector @var{w}. On
+output the result @math{P w} is stored in @var{w}.
+@end deftypefun
+
+@comment @deftypefun int gsl_linalg_householder_hm1 (double tau, gsl_matrix * A)
+@comment This function applies the Householder transform, defined by the scalar
+@comment @var{tau} and the vector @var{v}, to a matrix being build up from the
+@comment identity matrix, using the first column of @var{A} as a householder vector.
+@comment @end deftypefun
+
+@node Householder solver for linear systems
+@section Householder solver for linear systems
+@cindex solution of linear system by Householder transformations
+@cindex Householder linear solver
+
+@deftypefun int gsl_linalg_HH_solve (gsl_matrix * @var{A}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the system @math{A x = b} directly using
+Householder transformations. On output the solution is stored in @var{x}
+and @var{b} is not modified. The matrix @var{A} is destroyed by the
+Householder transformations.
+@end deftypefun
+
+@deftypefun int gsl_linalg_HH_svx (gsl_matrix * @var{A}, gsl_vector * @var{x})
+This function solves the system @math{A x = b} in-place using
+Householder transformations. On input @var{x} should contain the
+right-hand side @math{b}, which is replaced by the solution on output. The
+matrix @var{A} is destroyed by the Householder transformations.
+@end deftypefun
+
+@node Tridiagonal Systems
+@section Tridiagonal Systems
+@cindex tridiagonal systems
+
+@deftypefun int gsl_linalg_solve_tridiag (const gsl_vector * @var{diag}, const gsl_vector * @var{e}, const gsl_vector * @var{f}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the general @math{N}-by-@math{N} system @math{A x =
+b} where @var{A} is tridiagonal (@c{$N\geq 2$}
+@math{N >= 2}). The super-diagonal and
+sub-diagonal vectors @var{e} and @var{f} must be one element shorter
+than the diagonal vector @var{diag}. The form of @var{A} for the 4-by-4
+case is shown below,
+@tex
+\beforedisplay
+$$
+A = \pmatrix{d_0&e_0& 0& 0\cr
+ f_0&d_1&e_1& 0\cr
+ 0 &f_1&d_2&e_2\cr
+ 0 &0 &f_2&d_3\cr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = ( d_0 e_0 0 0 )
+ ( f_0 d_1 e_1 0 )
+ ( 0 f_1 d_2 e_2 )
+ ( 0 0 f_2 d_3 )
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun int gsl_linalg_solve_symm_tridiag (const gsl_vector * @var{diag}, const gsl_vector * @var{e}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the general @math{N}-by-@math{N} system @math{A x =
+b} where @var{A} is symmetric tridiagonal (@c{$N\geq 2$}
+@math{N >= 2}). The off-diagonal vector
+@var{e} must be one element shorter than the diagonal vector @var{diag}.
+The form of @var{A} for the 4-by-4 case is shown below,
+@tex
+\beforedisplay
+$$
+A = \pmatrix{d_0&e_0& 0& 0\cr
+ e_0&d_1&e_1& 0\cr
+ 0 &e_1&d_2&e_2\cr
+ 0 &0 &e_2&d_3\cr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = ( d_0 e_0 0 0 )
+ ( e_0 d_1 e_1 0 )
+ ( 0 e_1 d_2 e_2 )
+ ( 0 0 e_2 d_3 )
+@end example
+@end ifinfo
+The current implementation uses a variant of Cholesky decomposition
+which can cause division by zero if the matrix is not positive definite.
+@end deftypefun
+
+@deftypefun int gsl_linalg_solve_cyc_tridiag (const gsl_vector * @var{diag}, const gsl_vector * @var{e}, const gsl_vector * @var{f}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the general @math{N}-by-@math{N} system @math{A x =
+b} where @var{A} is cyclic tridiagonal (@c{$N\geq 3$}
+@math{N >= 3}). The cyclic super-diagonal and
+sub-diagonal vectors @var{e} and @var{f} must have the same number of
+elements as the diagonal vector @var{diag}. The form of @var{A} for the
+4-by-4 case is shown below,
+@tex
+\beforedisplay
+$$
+A = \pmatrix{d_0&e_0& 0 &f_3\cr
+ f_0&d_1&e_1& 0 \cr
+ 0 &f_1&d_2&e_2\cr
+ e_3& 0 &f_2&d_3\cr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = ( d_0 e_0 0 f_3 )
+ ( f_0 d_1 e_1 0 )
+ ( 0 f_1 d_2 e_2 )
+ ( e_3 0 f_2 d_3 )
+@end example
+@end ifinfo
+@end deftypefun
+
+
+@deftypefun int gsl_linalg_solve_symm_cyc_tridiag (const gsl_vector * @var{diag}, const gsl_vector * @var{e}, const gsl_vector * @var{b}, gsl_vector * @var{x})
+This function solves the general @math{N}-by-@math{N} system @math{A x =
+b} where @var{A} is symmetric cyclic tridiagonal (@c{$N\geq 3$}
+@math{N >= 3}). The cyclic
+off-diagonal vector @var{e} must have the same number of elements as the
+diagonal vector @var{diag}. The form of @var{A} for the 4-by-4 case is
+shown below,
+@tex
+\beforedisplay
+$$
+A = \pmatrix{d_0&e_0& 0 &e_3\cr
+ e_0&d_1&e_1& 0 \cr
+ 0 &e_1&d_2&e_2\cr
+ e_3& 0 &e_2&d_3\cr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A = ( d_0 e_0 0 e_3 )
+ ( e_0 d_1 e_1 0 )
+ ( 0 e_1 d_2 e_2 )
+ ( e_3 0 e_2 d_3 )
+@end example
+@end ifinfo
+@end deftypefun
+
+@node Balancing
+@section Balancing
+@cindex balancing matrices
+
+The process of balancing a matrix applies similarity transformations
+to make the rows and columns have comparable norms. This is
+useful, for example, to reduce roundoff errors in the solution
+of eigenvalue problems. Balancing a matrix @math{A} consists
+of replacing @math{A} with a similar matrix
+@tex
+\beforedisplay
+$$
+A' = D^{-1} A D
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+A' = D^(-1) A D
+@end example
+
+@end ifinfo
+where @math{D} is a diagonal matrix whose entries are powers
+of the floating point radix.
+
+@deftypefun int gsl_linalg_balance_matrix (gsl_matrix * @var{A}, gsl_vector * @var{D})
+This function replaces the matrix @var{A} with its balanced counterpart
+and stores the diagonal elements of the similarity transformation
+into the vector @var{D}.
+@end deftypefun
+
+@node Linear Algebra Examples
+@section Examples
+
+The following program solves the linear system @math{A x = b}. The
+system to be solved is,
+@tex
+\beforedisplay
+$$
+\left(
+\matrix{0.18& 0.60& 0.57& 0.96\cr
+0.41& 0.24& 0.99& 0.58\cr
+0.14& 0.30& 0.97& 0.66\cr
+0.51& 0.13& 0.19& 0.85}
+\right)
+\left(
+\matrix{x_0\cr
+x_1\cr
+x_2\cr
+x_3}
+\right)
+=
+\left(
+\matrix{1.0\cr
+2.0\cr
+3.0\cr
+4.0}
+\right)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+[ 0.18 0.60 0.57 0.96 ] [x0] [1.0]
+[ 0.41 0.24 0.99 0.58 ] [x1] = [2.0]
+[ 0.14 0.30 0.97 0.66 ] [x2] [3.0]
+[ 0.51 0.13 0.19 0.85 ] [x3] [4.0]
+@end example
+
+@end ifinfo
+@noindent
+and the solution is found using LU decomposition of the matrix @math{A}.
+
+@example
+@verbatiminclude examples/linalglu.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+@verbatiminclude examples/linalglu.out
+@end example
+
+@noindent
+This can be verified by multiplying the solution @math{x} by the
+original matrix @math{A} using @sc{gnu octave},
+
+@example
+octave> A = [ 0.18, 0.60, 0.57, 0.96;
+ 0.41, 0.24, 0.99, 0.58;
+ 0.14, 0.30, 0.97, 0.66;
+ 0.51, 0.13, 0.19, 0.85 ];
+
+octave> x = [ -4.05205; -12.6056; 1.66091; 8.69377];
+
+octave> A * x
+ans =
+ 1.0000
+ 2.0000
+ 3.0000
+ 4.0000
+@end example
+
+@noindent
+This reproduces the original right-hand side vector, @math{b}, in
+accordance with the equation @math{A x = b}.
+
+@node Linear Algebra References and Further Reading
+@section References and Further Reading
+
+Further information on the algorithms described in this section can be
+found in the following book,
+
+@itemize @asis
+@item
+G. H. Golub, C. F. Van Loan, @cite{Matrix Computations} (3rd Ed, 1996),
+Johns Hopkins University Press, ISBN 0-8018-5414-8.
+@end itemize
+
+@noindent
+The @sc{lapack} library is described in the following manual,
+
+@itemize @asis
+@item
+@cite{LAPACK Users' Guide} (Third Edition, 1999), Published by SIAM,
+ISBN 0-89871-447-8.
+
+@uref{http://www.netlib.org/lapack}
+@end itemize
+
+@noindent
+The @sc{lapack} source code can be found at the website above, along
+with an online copy of the users guide.
+
+@noindent
+The Modified Golub-Reinsch algorithm is described in the following paper,
+
+@itemize @asis
+@item
+T.F. Chan, ``An Improved Algorithm for Computing the Singular Value
+Decomposition'', @cite{ACM Transactions on Mathematical Software}, 8
+(1982), pp 72--83.
+@end itemize
+
+@noindent
+The Jacobi algorithm for singular value decomposition is described in
+the following papers,
+
+@itemize @asis
+@item
+J.C. Nash, ``A one-sided transformation method for the singular value
+decomposition and algebraic eigenproblem'', @cite{Computer Journal},
+Volume 18, Number 1 (1973), p 74--76
+
+@item
+James Demmel, Kresimir Veselic, ``Jacobi's Method is more accurate than
+QR'', @cite{Lapack Working Note 15} (LAWN-15), October 1989. Available
+from netlib, @uref{http://www.netlib.org/lapack/} in the @code{lawns} or
+@code{lawnspdf} directories.
+@end itemize
+
+
+
diff --git a/gsl-1.9/doc/math.texi b/gsl-1.9/doc/math.texi
new file mode 100644
index 0000000..5f28d71
--- /dev/null
+++ b/gsl-1.9/doc/math.texi
@@ -0,0 +1,339 @@
+@cindex elementary functions
+@cindex mathematical functions, elementary
+
+This chapter describes basic mathematical functions. Some of these
+functions are present in system libraries, but the alternative versions
+given here can be used as a substitute when the system functions are not
+available.
+
+The functions and macros described in this chapter are defined in the
+header file @file{gsl_math.h}.
+
+@menu
+* Mathematical Constants::
+* Infinities and Not-a-number::
+* Elementary Functions::
+* Small integer powers::
+* Testing the Sign of Numbers::
+* Testing for Odd and Even Numbers::
+* Maximum and Minimum functions::
+* Approximate Comparison of Floating Point Numbers::
+@end menu
+
+@node Mathematical Constants
+@section Mathematical Constants
+@cindex mathematical constants, defined as macros
+@cindex numerical constants, defined as macros
+@cindex constants, mathematical---defined as macros
+@cindex macros for mathematical constants
+The library ensures that the standard @sc{bsd} mathematical constants
+are defined. For reference, here is a list of the constants:
+
+@table @code
+@item M_E
+@cindex e, defined as a macro
+The base of exponentials, @math{e}
+
+@item M_LOG2E
+The base-2 logarithm of @math{e}, @math{\log_2 (e)}
+
+@item M_LOG10E
+The base-10 logarithm of @math{e}, @c{$\log_{10}(e)$}
+@math{\log_10 (e)}
+
+@item M_SQRT2
+The square root of two, @math{\sqrt 2}
+
+@item M_SQRT1_2
+The square root of one-half, @c{$\sqrt{1/2}$}
+@math{\sqrt@{1/2@}}
+
+@item M_SQRT3
+The square root of three, @math{\sqrt 3}
+
+@item M_PI
+@cindex pi, defined as a macro
+The constant pi, @math{\pi}
+
+@item M_PI_2
+Pi divided by two, @math{\pi/2}
+
+@item M_PI_4
+Pi divided by four, @math{\pi/4}
+
+@item M_SQRTPI
+The square root of pi, @math{\sqrt\pi}
+
+@item M_2_SQRTPI
+Two divided by the square root of pi, @math{2/\sqrt\pi}
+
+@item M_1_PI
+The reciprocal of pi, @math{1/\pi}
+
+@item M_2_PI
+Twice the reciprocal of pi, @math{2/\pi}
+
+@item M_LN10
+The natural logarithm of ten, @math{\ln(10)}
+
+@item M_LN2
+The natural logarithm of two, @math{\ln(2)}
+
+@item M_LNPI
+The natural logarithm of pi, @math{\ln(\pi)}
+
+@item M_EULER
+@cindex Euler's constant, defined as a macro
+Euler's constant, @math{\gamma}
+
+@end table
+
+@node Infinities and Not-a-number
+@section Infinities and Not-a-number
+
+@cindex infinity, defined as a macro
+@cindex IEEE infinity, defined as a macro
+@cindex NaN, defined as a macro
+@cindex Not-a-number, defined as a macro
+@cindex IEEE NaN, defined as a macro
+
+@defmac GSL_POSINF
+This macro contains the IEEE representation of positive infinity,
+@math{+\infty}. It is computed from the expression @code{+1.0/0.0}.
+@end defmac
+
+@defmac GSL_NEGINF
+This macro contains the IEEE representation of negative infinity,
+@math{-\infty}. It is computed from the expression @code{-1.0/0.0}.
+@end defmac
+
+@defmac GSL_NAN
+This macro contains the IEEE representation of the Not-a-Number symbol,
+@code{NaN}. It is computed from the ratio @code{0.0/0.0}.
+@end defmac
+
+@deftypefun int gsl_isnan (const double @var{x})
+This function returns 1 if @var{x} is not-a-number.
+@end deftypefun
+
+@deftypefun int gsl_isinf (const double @var{x})
+This function returns @math{+1} if @var{x} is positive infinity,
+@math{-1} if @var{x} is negative infinity and 0 otherwise.
+@end deftypefun
+
+@deftypefun int gsl_finite (const double @var{x})
+This function returns 1 if @var{x} is a real number, and 0 if it is
+infinite or not-a-number.
+@end deftypefun
+
+
+@node Elementary Functions
+@section Elementary Functions
+
+The following routines provide portable implementations of functions
+found in the BSD math library. When native versions are not available
+the functions described here can be used instead. The substitution can
+be made automatically if you use @code{autoconf} to compile your
+application (@pxref{Portability functions}).
+
+@deftypefun double gsl_log1p (const double @var{x})
+@cindex log1p
+@cindex logarithm, computed accurately near 1
+This function computes the value of @math{\log(1+x)} in a way that is
+accurate for small @var{x}. It provides an alternative to the BSD math
+function @code{log1p(x)}.
+@end deftypefun
+
+@deftypefun double gsl_expm1 (const double @var{x})
+@cindex expm1
+@cindex exponential, difference from 1 computed accurately
+This function computes the value of @math{\exp(x)-1} in a way that is
+accurate for small @var{x}. It provides an alternative to the BSD math
+function @code{expm1(x)}.
+@end deftypefun
+
+@deftypefun double gsl_hypot (const double @var{x}, const double @var{y})
+@cindex hypot
+@cindex euclidean distance function, hypot
+@cindex length, computed accurately using hypot
+This function computes the value of
+@c{$\sqrt{x^2 + y^2}$}
+@math{\sqrt@{x^2 + y^2@}} in a way that avoids overflow. It provides an
+alternative to the BSD math function @code{hypot(x,y)}.
+@end deftypefun
+
+@deftypefun double gsl_acosh (const double @var{x})
+@cindex acosh
+@cindex hyperbolic cosine, inverse
+@cindex inverse hyperbolic cosine
+This function computes the value of @math{\arccosh(x)}. It provides an
+alternative to the standard math function @code{acosh(x)}.
+@end deftypefun
+
+@deftypefun double gsl_asinh (const double @var{x})
+@cindex asinh
+@cindex hyperbolic sine, inverse
+@cindex inverse hyperbolic sine
+This function computes the value of @math{\arcsinh(x)}. It provides an
+alternative to the standard math function @code{asinh(x)}.
+@end deftypefun
+
+@deftypefun double gsl_atanh (const double @var{x})
+@cindex atanh
+@cindex hyperbolic tangent, inverse
+@cindex inverse hyperbolic tangent
+This function computes the value of @math{\arctanh(x)}. It provides an
+alternative to the standard math function @code{atanh(x)}.
+@end deftypefun
+
+
+@deftypefun double gsl_ldexp (double @var{x}, int @var{e})
+@cindex ldexp
+This function computes the value of @math{x * 2^e}. It provides an
+alternative to the standard math function @code{ldexp(x,e)}.
+@end deftypefun
+
+@deftypefun double gsl_frexp (double @var{x}, int * @var{e})
+@cindex frexp
+This function splits the number @math{x} into its normalized fraction
+@math{f} and exponent @math{e}, such that @math{x = f * 2^e} and
+@c{$0.5 \le f < 1$}
+@math{0.5 <= f < 1}. The function returns @math{f} and stores the
+exponent in @math{e}. If @math{x} is zero, both @math{f} and @math{e}
+are set to zero. This function provides an alternative to the standard
+math function @code{frexp(x, e)}.
+@end deftypefun
+
+@node Small integer powers
+@section Small integer powers
+
+A common complaint about the standard C library is its lack of a
+function for calculating (small) integer powers. GSL provides some simple
+functions to fill this gap. For reasons of efficiency, these functions
+do not check for overflow or underflow conditions.
+
+@deftypefun double gsl_pow_int (double @var{x}, int @var{n})
+This routine computes the power @math{x^n} for integer @var{n}. The
+power is computed efficiently---for example, @math{x^8} is computed as
+@math{((x^2)^2)^2}, requiring only 3 multiplications. A version of this
+function which also computes the numerical error in the result is
+available as @code{gsl_sf_pow_int_e}.
+@end deftypefun
+
+@deftypefun double gsl_pow_2 (const double @var{x})
+@deftypefunx double gsl_pow_3 (const double @var{x})
+@deftypefunx double gsl_pow_4 (const double @var{x})
+@deftypefunx double gsl_pow_5 (const double @var{x})
+@deftypefunx double gsl_pow_6 (const double @var{x})
+@deftypefunx double gsl_pow_7 (const double @var{x})
+@deftypefunx double gsl_pow_8 (const double @var{x})
+@deftypefunx double gsl_pow_9 (const double @var{x})
+These functions can be used to compute small integer powers @math{x^2},
+@math{x^3}, etc. efficiently. The functions will be inlined when
+possible so that use of these functions should be as efficient as
+explicitly writing the corresponding product expression.
+@end deftypefun
+
+@example
+#include <gsl/gsl_math.h>
+double y = gsl_pow_4 (3.141) /* compute 3.141**4 */
+@end example
+
+@node Testing the Sign of Numbers
+@section Testing the Sign of Numbers
+
+@defmac GSL_SIGN (x)
+This macro returns the sign of @var{x}. It is defined as @code{((x) >= 0
+? 1 : -1)}. Note that with this definition the sign of zero is positive
+(regardless of its @sc{ieee} sign bit).
+@end defmac
+
+@node Testing for Odd and Even Numbers
+@section Testing for Odd and Even Numbers
+
+@defmac GSL_IS_ODD (n)
+This macro evaluates to 1 if @var{n} is odd and 0 if @var{n} is
+even. The argument @var{n} must be of integer type.
+@end defmac
+
+@defmac GSL_IS_EVEN (n)
+This macro is the opposite of @code{GSL_IS_ODD(n)}. It evaluates to 1 if
+@var{n} is even and 0 if @var{n} is odd. The argument @var{n} must be of
+integer type.
+@end defmac
+
+@node Maximum and Minimum functions
+@section Maximum and Minimum functions
+
+@defmac GSL_MAX (a, b)
+@cindex maximum of two numbers
+This macro returns the maximum of @var{a} and @var{b}. It is defined as
+@code{((a) > (b) ? (a):(b))}.
+@end defmac
+
+@defmac GSL_MIN (a, b)
+@cindex minimum of two numbers
+This macro returns the minimum of @var{a} and @var{b}. It is defined as
+@code{((a) < (b) ? (a):(b))}.
+@end defmac
+
+@deftypefun {extern inline double} GSL_MAX_DBL (double @var{a}, double @var{b})
+This function returns the maximum of the double precision numbers
+@var{a} and @var{b} using an inline function. The use of a function
+allows for type checking of the arguments as an extra safety feature. On
+platforms where inline functions are not available the macro
+@code{GSL_MAX} will be automatically substituted.
+@end deftypefun
+
+@deftypefun {extern inline double} GSL_MIN_DBL (double @var{a}, double @var{b})
+This function returns the minimum of the double precision numbers
+@var{a} and @var{b} using an inline function. The use of a function
+allows for type checking of the arguments as an extra safety feature. On
+platforms where inline functions are not available the macro
+@code{GSL_MIN} will be automatically substituted.
+@end deftypefun
+
+@deftypefun {extern inline int} GSL_MAX_INT (int @var{a}, int @var{b})
+@deftypefunx {extern inline int} GSL_MIN_INT (int @var{a}, int @var{b})
+These functions return the maximum or minimum of the integers @var{a}
+and @var{b} using an inline function. On platforms where inline
+functions are not available the macros @code{GSL_MAX} or @code{GSL_MIN}
+will be automatically substituted.
+@end deftypefun
+
+@deftypefun {extern inline long double} GSL_MAX_LDBL (long double @var{a}, long double @var{b})
+@deftypefunx {extern inline long double} GSL_MIN_LDBL (long double @var{a}, long double @var{b})
+These functions return the maximum or minimum of the long doubles @var{a}
+and @var{b} using an inline function. On platforms where inline
+functions are not available the macros @code{GSL_MAX} or @code{GSL_MIN}
+will be automatically substituted.
+@end deftypefun
+
+@node Approximate Comparison of Floating Point Numbers
+@section Approximate Comparison of Floating Point Numbers
+
+It is sometimes useful to be able to compare two floating point numbers
+approximately, to allow for rounding and truncation errors. The following
+function implements the approximate floating-point comparison algorithm
+proposed by D.E. Knuth in Section 4.2.2 of @cite{Seminumerical
+Algorithms} (3rd edition).
+
+@deftypefun int gsl_fcmp (double @var{x}, double @var{y}, double @var{epsilon})
+@cindex approximate comparison of floating point numbers
+@cindex safe comparison of floating point numbers
+@cindex floating point numbers, approximate comparison
+This function determines whether @math{x} and @math{y} are approximately
+equal to a relative accuracy @var{epsilon}.
+
+The relative accuracy is measured using an interval of size @math{2
+\delta}, where @math{\delta = 2^k \epsilon} and @math{k} is the
+maximum base-2 exponent of @math{x} and @math{y} as computed by the
+function @code{frexp}.
+
+If @math{x} and @math{y} lie within this interval, they are considered
+approximately equal and the function returns 0. Otherwise if @math{x <
+y}, the function returns @math{-1}, or if @math{x > y}, the function returns
+@math{+1}.
+
+The implementation is based on the package @code{fcmp} by T.C. Belding.
+@end deftypefun
diff --git a/gsl-1.9/doc/mdate-sh b/gsl-1.9/doc/mdate-sh
new file mode 100755
index 0000000..4b2efdf
--- /dev/null
+++ b/gsl-1.9/doc/mdate-sh
@@ -0,0 +1,193 @@
+#!/bin/sh
+# Get modification time of a file or directory and pretty-print it.
+
+scriptversion=2005-02-07.09
+
+# Copyright (C) 1995, 1996, 1997, 2003, 2004, 2005 Free Software
+# Foundation, Inc.
+# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+case $1 in
+ '')
+ echo "$0: No file. Try \`$0 --help' for more information." 1>&2
+ exit 1;
+ ;;
+ -h | --h*)
+ cat <<\EOF
+Usage: mdate-sh [--help] [--version] FILE
+
+Pretty-print the modification time of FILE.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+ exit $?
+ ;;
+ -v | --v*)
+ echo "mdate-sh $scriptversion"
+ exit $?
+ ;;
+esac
+
+# Prevent date giving response in another language.
+LANG=C
+export LANG
+LC_ALL=C
+export LC_ALL
+LC_TIME=C
+export LC_TIME
+
+save_arg1="$1"
+
+# Find out how to get the extended ls output of a file or directory.
+if ls -L /dev/null 1>/dev/null 2>&1; then
+ ls_command='ls -L -l -d'
+else
+ ls_command='ls -l -d'
+fi
+
+# A `ls -l' line looks as follows on OS/2.
+# drwxrwx--- 0 Aug 11 2001 foo
+# This differs from Unix, which adds ownership information.
+# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
+#
+# To find the date, we split the line on spaces and iterate on words
+# until we find a month. This cannot work with files whose owner is a
+# user named `Jan', or `Feb', etc. However, it's unlikely that `/'
+# will be owned by a user whose name is a month. So we first look at
+# the extended ls output of the root directory to decide how many
+# words should be skipped to get the date.
+
+# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
+set x`ls -l -d /`
+
+# Find which argument is the month.
+month=
+command=
+until test $month
+do
+ shift
+ # Add another shift to the command.
+ command="$command shift;"
+ case $1 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+ esac
+done
+
+# Get the extended ls output of the file or directory.
+set dummy x`eval "$ls_command \"\$save_arg1\""`
+
+# Remove all preceding arguments
+eval $command
+
+# Because of the dummy argument above, month is in $2.
+#
+# On a POSIX system, we should have
+#
+# $# = 5
+# $1 = file size
+# $2 = month
+# $3 = day
+# $4 = year or time
+# $5 = filename
+#
+# On Darwin 7.7.0 and 7.6.0, we have
+#
+# $# = 4
+# $1 = day
+# $2 = month
+# $3 = year or time
+# $4 = filename
+
+# Get the month.
+case $2 in
+ Jan) month=January; nummonth=1;;
+ Feb) month=February; nummonth=2;;
+ Mar) month=March; nummonth=3;;
+ Apr) month=April; nummonth=4;;
+ May) month=May; nummonth=5;;
+ Jun) month=June; nummonth=6;;
+ Jul) month=July; nummonth=7;;
+ Aug) month=August; nummonth=8;;
+ Sep) month=September; nummonth=9;;
+ Oct) month=October; nummonth=10;;
+ Nov) month=November; nummonth=11;;
+ Dec) month=December; nummonth=12;;
+esac
+
+case $3 in
+ ???*) day=$1;;
+ *) day=$3; shift;;
+esac
+
+# Here we have to deal with the problem that the ls output gives either
+# the time of day or the year.
+case $3 in
+ *:*) set `date`; eval year=\$$#
+ case $2 in
+ Jan) nummonthtod=1;;
+ Feb) nummonthtod=2;;
+ Mar) nummonthtod=3;;
+ Apr) nummonthtod=4;;
+ May) nummonthtod=5;;
+ Jun) nummonthtod=6;;
+ Jul) nummonthtod=7;;
+ Aug) nummonthtod=8;;
+ Sep) nummonthtod=9;;
+ Oct) nummonthtod=10;;
+ Nov) nummonthtod=11;;
+ Dec) nummonthtod=12;;
+ esac
+ # For the first six month of the year the time notation can also
+ # be used for files modified in the last year.
+ if (expr $nummonth \> $nummonthtod) > /dev/null;
+ then
+ year=`expr $year - 1`
+ fi;;
+ *) year=$3;;
+esac
+
+# The result.
+echo $day $month $year
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-end: "$"
+# End:
diff --git a/gsl-1.9/doc/min-interval.eps b/gsl-1.9/doc/min-interval.eps
new file mode 100644
index 0000000..96b7913
--- /dev/null
+++ b/gsl-1.9/doc/min-interval.eps
@@ -0,0 +1,330 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: tmp.xfig.eps
+%%Creator: fig2dev Version 3.2 Patchlevel 1
+%%CreationDate: Mon Aug 16 15:21:28 1999
+%%For: bjg@netsci (Brian Gough,,,,)
+%%Orientation: Portrait
+%%BoundingBox: 0 0 346 205
+%%Pages: 0
+%%BeginSetup
+%%EndSetup
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.557 0.557 0.557 srgb} bind def
+/col33 {0.255 0.271 0.255 srgb} bind def
+/col34 {0.557 0.557 0.557 srgb} bind def
+/col35 {0.255 0.271 0.255 srgb} bind def
+/col36 {0.557 0.557 0.557 srgb} bind def
+/col37 {0.255 0.271 0.255 srgb} bind def
+/col38 {0.557 0.557 0.557 srgb} bind def
+/col39 {0.255 0.271 0.255 srgb} bind def
+/col40 {0.557 0.557 0.557 srgb} bind def
+/col41 {0.255 0.271 0.255 srgb} bind def
+/col42 {0.557 0.557 0.557 srgb} bind def
+/col43 {0.255 0.271 0.255 srgb} bind def
+/col44 {0.557 0.557 0.557 srgb} bind def
+/col45 {0.557 0.557 0.557 srgb} bind def
+/col46 {0.557 0.557 0.557 srgb} bind def
+/col47 {0.557 0.557 0.557 srgb} bind def
+/col48 {0.557 0.557 0.557 srgb} bind def
+/col49 {0.557 0.557 0.557 srgb} bind def
+/col50 {0.557 0.557 0.557 srgb} bind def
+/col51 {0.557 0.557 0.557 srgb} bind def
+/col52 {0.557 0.557 0.557 srgb} bind def
+/col53 {0.557 0.557 0.557 srgb} bind def
+/col54 {0.557 0.557 0.557 srgb} bind def
+/col55 {0.255 0.271 0.255 srgb} bind def
+/col56 {0.557 0.557 0.557 srgb} bind def
+/col57 {0.255 0.271 0.255 srgb} bind def
+/col58 {0.557 0.557 0.557 srgb} bind def
+/col59 {0.255 0.271 0.255 srgb} bind def
+/col60 {0.557 0.557 0.557 srgb} bind def
+/col61 {0.255 0.271 0.255 srgb} bind def
+/col62 {0.557 0.557 0.557 srgb} bind def
+/col63 {0.255 0.271 0.255 srgb} bind def
+/col64 {0.557 0.557 0.557 srgb} bind def
+/col65 {0.255 0.271 0.255 srgb} bind def
+/col66 {0.557 0.557 0.557 srgb} bind def
+/col67 {0.255 0.271 0.255 srgb} bind def
+/col68 {0.557 0.557 0.557 srgb} bind def
+/col69 {0.255 0.271 0.255 srgb} bind def
+/col70 {0.557 0.557 0.557 srgb} bind def
+/col71 {0.255 0.271 0.255 srgb} bind def
+/col72 {0.557 0.557 0.557 srgb} bind def
+
+end
+save
+-30.0 227.0 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add
+ 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+ bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+ 4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /endash 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Times-Roman /Times-Roman-iso isovec ReEncode
+ /DrawEllipse {
+ /endangle exch def
+ /startangle exch def
+ /yrad exch def
+ /xrad exch def
+ /y exch def
+ /x exch def
+ /savematrix mtrx currentmatrix def
+ x y tr xrad yrad sc 0 0 1 startangle endangle arc
+ closepath
+ savematrix setmatrix
+ } def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+%%EndProlog
+
+$F2psBegin
+10 setmiterlimit
+n -1000 4776 m -1000 -1000 l 7264 -1000 l 7264 4776 l cp clip
+ 0.06000 0.06000 sc
+7.500 slw
+% Ellipse
+n 2175 2250 25 25 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 4050 2700 25 25 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Ellipse
+n 5475 1555 25 25 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+/Times-Roman-iso ff 180.00 scf sf
+1950 2475 m
+gs 1 -1 sc (\(a\)) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+5500 1800 m
+gs 1 -1 sc (\(b\)) col0 sh gr
+/Times-Roman-iso ff 180.00 scf sf
+4200 2925 m
+gs 1 -1 sc (\(x\)) col0 sh gr
+% Polyline
+n 744 3590 m 819 3590 l gs col-1 s gr
+% Polyline
+n 6226 3590 m 6151 3590 l gs col-1 s gr
+% Polyline
+n 744 3062 m 819 3062 l gs col-1 s gr
+% Polyline
+n 6226 3062 m 6151 3062 l gs col-1 s gr
+% Polyline
+n 744 2535 m 819 2535 l gs col-1 s gr
+% Polyline
+n 6226 2535 m 6151 2535 l gs col-1 s gr
+% Polyline
+n 744 2007 m 819 2007 l gs col-1 s gr
+% Polyline
+n 6226 2007 m 6151 2007 l gs col-1 s gr
+% Polyline
+n 744 1479 m 819 1479 l gs col-1 s gr
+% Polyline
+n 6226 1479 m 6151 1479 l gs col-1 s gr
+% Polyline
+n 744 952 m 819 952 l gs col-1 s gr
+% Polyline
+n 6226 952 m 6151 952 l gs col-1 s gr
+% Polyline
+n 744 424 m 819 424 l gs col-1 s gr
+% Polyline
+n 6226 424 m 6151 424 l gs col-1 s gr
+% Polyline
+n 744 3590 m 744 3515 l gs col-1 s gr
+% Polyline
+n 744 424 m 744 499 l gs col-1 s gr
+% Polyline
+n 1658 3590 m 1658 3515 l gs col-1 s gr
+% Polyline
+n 1658 424 m 1658 499 l gs col-1 s gr
+% Polyline
+n 2571 3590 m 2571 3515 l gs col-1 s gr
+% Polyline
+n 2571 424 m 2571 499 l gs col-1 s gr
+% Polyline
+n 3485 3590 m 3485 3515 l gs col-1 s gr
+% Polyline
+n 3485 424 m 3485 499 l gs col-1 s gr
+% Polyline
+n 4399 3590 m 4399 3515 l gs col-1 s gr
+% Polyline
+n 4399 424 m 4399 499 l gs col-1 s gr
+% Polyline
+n 5312 3590 m 5312 3515 l gs col-1 s gr
+% Polyline
+n 5312 424 m 5312 499 l gs col-1 s gr
+% Polyline
+n 6226 3590 m 6226 3515 l gs col-1 s gr
+% Polyline
+n 6226 424 m 6226 499 l gs col-1 s gr
+% Polyline
+n 744 3590 m 6226 3590 l 6226 424 l 744 424 l 744 3590 l cp gs col-1 s gr
+% Polyline
+n 6074 561 m 6082 561 l gs col-1 s gr
+% Polyline
+n 744 424 m 799 519 l 855 612 l 910 703 l 965 792 l 1021 879 l
+ 1076 965 l 1132 1048 l 1187 1129 l 1242 1209 l 1298 1286 l
+ 1353 1362 l 1408 1436 l 1464 1507 l 1519 1577 l 1575 1645 l
+ 1630 1711 l 1685 1775 l 1741 1837 l 1796 1897 l 1851 1955 l
+ 1907 2011 l 1962 2066 l 2018 2118 l 2073 2168 l 2128 2217 l
+ 2184 2263 l 2239 2308 l 2294 2351 l 2350 2391 l 2405 2430 l
+ 2461 2467 l 2516 2502 l 2571 2535 l 2627 2566 l 2682 2595 l
+ 2737 2622 l 2793 2647 l 2848 2670 l 2904 2692 l 2959 2711 l
+ 3014 2728 l 3070 2744 l 3125 2758 l 3180 2769 l 3236 2779 l
+ 3291 2787 l 3347 2792 l 3402 2796 l 3457 2798 l 3513 2798 l
+ 3568 2796 l 3623 2792 l 3679 2787 l 3734 2779 l 3790 2769 l
+ 3845 2758 l 3900 2744 l 3956 2728 l 4011 2711 l 4066 2692 l
+ 4122 2670 l 4177 2647 l 4233 2622 l 4288 2595 l 4343 2566 l
+ 4399 2535 l 4454 2502 l 4509 2467 l 4565 2430 l 4620 2391 l
+ 4676 2351 l 4731 2308 l 4786 2263 l 4842 2217 l 4897 2168 l
+ 4952 2118 l 5008 2066 l 5063 2011 l 5119 1955 l 5174 1897 l
+ 5229 1837 l 5285 1775 l 5340 1711 l 5395 1645 l 5451 1577 l
+ 5506 1507 l 5562 1436 l 5617 1362 l 5672 1286 l 5728 1209 l
+ 5783 1129 l 5838 1048 l 5894 965 l 5949 879 l 6005 792 l
+ 6060 703 l 6115 612 l 6171 519 l 6226 424 l gs col-1 s gr
+/Times-Roman-iso ff 150.00 scf sf
+670 3652 m
+gs 1 -1 sc (0) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+670 3124 m
+gs 1 -1 sc (2) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+670 2597 m
+gs 1 -1 sc (4) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+670 2069 m
+gs 1 -1 sc (6) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+670 1541 m
+gs 1 -1 sc (8) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+670 1014 m
+gs 1 -1 sc (10) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+670 486 m
+gs 1 -1 sc (12) dup sw pop neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+744 3776 m
+gs 1 -1 sc (-3) dup sw pop 2 div neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+1658 3776 m
+gs 1 -1 sc (-2) dup sw pop 2 div neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+2571 3776 m
+gs 1 -1 sc (-1) dup sw pop 2 div neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+3485 3776 m
+gs 1 -1 sc (0) dup sw pop 2 div neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+4399 3776 m
+gs 1 -1 sc (1) dup sw pop 2 div neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+5312 3776 m
+gs 1 -1 sc (2) dup sw pop 2 div neg 0 rm col-1 sh gr
+/Times-Roman-iso ff 150.00 scf sf
+6226 3776 m
+gs 1 -1 sc (3) dup sw pop 2 div neg 0 rm col-1 sh gr
+$F2psEnd
+rs
+showpage
diff --git a/gsl-1.9/doc/min.texi b/gsl-1.9/doc/min.texi
new file mode 100644
index 0000000..9cd7962
--- /dev/null
+++ b/gsl-1.9/doc/min.texi
@@ -0,0 +1,400 @@
+@cindex optimization, see minimization
+@cindex maximization, see minimization
+@cindex minimization, one-dimensional
+@cindex finding minima
+@cindex nonlinear functions, minimization
+
+This chapter describes routines for finding minima of arbitrary
+one-dimensional functions. The library provides low level components
+for a variety of iterative minimizers and convergence tests. These can be
+combined by the user to achieve the desired solution, with full access
+to the intermediate steps of the algorithms. Each class of methods uses
+the same framework, so that you can switch between minimizers at runtime
+without needing to recompile your program. Each instance of a minimizer
+keeps track of its own state, allowing the minimizers to be used in
+multi-threaded programs.
+
+The header file @file{gsl_min.h} contains prototypes for the
+minimization functions and related declarations. To use the minimization
+algorithms to find the maximum of a function simply invert its sign.
+
+@menu
+* Minimization Overview::
+* Minimization Caveats::
+* Initializing the Minimizer::
+* Providing the function to minimize::
+* Minimization Iteration::
+* Minimization Stopping Parameters::
+* Minimization Algorithms::
+* Minimization Examples::
+* Minimization References and Further Reading::
+@end menu
+
+@node Minimization Overview
+@section Overview
+@cindex minimization, overview
+
+The minimization algorithms begin with a bounded region known to contain
+a minimum. The region is described by a lower bound @math{a} and an
+upper bound @math{b}, with an estimate of the location of the minimum
+@math{x}.
+
+@iftex
+@sp 1
+@center @image{min-interval,3.4in}
+@end iftex
+
+@noindent
+The value of the function at @math{x} must be less than the value of the
+function at the ends of the interval,
+@tex
+$$f(a) > f(x) < f(b)$$
+@end tex
+@ifinfo
+
+@example
+f(a) > f(x) < f(b)
+@end example
+
+@end ifinfo
+@noindent
+This condition guarantees that a minimum is contained somewhere within
+the interval. On each iteration a new point @math{x'} is selected using
+one of the available algorithms. If the new point is a better estimate
+of the minimum, i.e.@: where @math{f(x') < f(x)}, then the current
+estimate of the minimum @math{x} is updated. The new point also allows
+the size of the bounded interval to be reduced, by choosing the most
+compact set of points which satisfies the constraint @math{f(a) > f(x) <
+f(b)}. The interval is reduced until it encloses the true minimum to a
+desired tolerance. This provides a best estimate of the location of the
+minimum and a rigorous error estimate.
+
+Several bracketing algorithms are available within a single framework.
+The user provides a high-level driver for the algorithm, and the
+library provides the individual functions necessary for each of the
+steps. There are three main phases of the iteration. The steps are,
+
+@itemize @bullet
+@item
+initialize minimizer state, @var{s}, for algorithm @var{T}
+
+@item
+update @var{s} using the iteration @var{T}
+
+@item
+test @var{s} for convergence, and repeat iteration if necessary
+@end itemize
+
+@noindent
+The state for the minimizers is held in a @code{gsl_min_fminimizer}
+struct. The updating procedure uses only function evaluations (not
+derivatives).
+
+@node Minimization Caveats
+@section Caveats
+@cindex minimization, caveats
+
+Note that minimization functions can only search for one minimum at a
+time. When there are several minima in the search area, the first
+minimum to be found will be returned; however it is difficult to predict
+which of the minima this will be. @emph{In most cases, no error will be
+reported if you try to find a minimum in an area where there is more
+than one.}
+
+With all minimization algorithms it can be difficult to determine the
+location of the minimum to full numerical precision. The behavior of the
+function in the region of the minimum @math{x^*} can be approximated by
+a Taylor expansion,
+@tex
+$$
+y = f(x^*) + {1 \over 2} f''(x^*) (x - x^*)^2
+$$
+@end tex
+@ifinfo
+
+@example
+y = f(x^*) + (1/2) f''(x^*) (x - x^*)^2
+@end example
+
+@end ifinfo
+@noindent
+and the second term of this expansion can be lost when added to the
+first term at finite precision. This magnifies the error in locating
+@math{x^*}, making it proportional to @math{\sqrt \epsilon} (where
+@math{\epsilon} is the relative accuracy of the floating point numbers).
+For functions with higher order minima, such as @math{x^4}, the
+magnification of the error is correspondingly worse. The best that can
+be achieved is to converge to the limit of numerical accuracy in the
+function values, rather than the location of the minimum itself.
+
+@node Initializing the Minimizer
+@section Initializing the Minimizer
+
+@deftypefun {gsl_min_fminimizer *} gsl_min_fminimizer_alloc (const gsl_min_fminimizer_type * @var{T})
+This function returns a pointer to a newly allocated instance of a
+minimizer of type @var{T}. For example, the following code
+creates an instance of a golden section minimizer,
+
+@example
+const gsl_min_fminimizer_type * T
+ = gsl_min_fminimizer_goldensection;
+gsl_min_fminimizer * s
+ = gsl_min_fminimizer_alloc (T);
+@end example
+
+If there is insufficient memory to create the minimizer then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun int gsl_min_fminimizer_set (gsl_min_fminimizer * @var{s}, gsl_function * @var{f}, double @var{x_minimum}, double @var{x_lower}, double @var{x_upper})
+This function sets, or resets, an existing minimizer @var{s} to use the
+function @var{f} and the initial search interval [@var{x_lower},
+@var{x_upper}], with a guess for the location of the minimum
+@var{x_minimum}.
+
+If the interval given does not contain a minimum, then the function
+returns an error code of @code{GSL_EINVAL}.
+@end deftypefun
+
+@deftypefun int gsl_min_fminimizer_set_with_values (gsl_min_fminimizer * @var{s}, gsl_function * @var{f}, double @var{x_minimum}, double @var{f_minimum}, double @var{x_lower}, double @var{f_lower}, double @var{x_upper}, double @var{f_upper})
+This function is equivalent to @code{gsl_min_fminimizer_set} but uses
+the values @var{f_minimum}, @var{f_lower} and @var{f_upper} instead of
+computing @code{f(x_minimum)}, @code{f(x_lower)} and @code{f(x_upper)}.
+@end deftypefun
+
+
+@deftypefun void gsl_min_fminimizer_free (gsl_min_fminimizer * @var{s})
+This function frees all the memory associated with the minimizer
+@var{s}.
+@end deftypefun
+
+@deftypefun {const char *} gsl_min_fminimizer_name (const gsl_min_fminimizer * @var{s})
+This function returns a pointer to the name of the minimizer. For example,
+
+@example
+printf ("s is a '%s' minimizer\n",
+ gsl_min_fminimizer_name (s));
+@end example
+
+@noindent
+would print something like @code{s is a 'brent' minimizer}.
+@end deftypefun
+
+@node Providing the function to minimize
+@section Providing the function to minimize
+@cindex minimization, providing a function to minimize
+
+You must provide a continuous function of one variable for the
+minimizers to operate on. In order to allow for general parameters the
+functions are defined by a @code{gsl_function} data type
+(@pxref{Providing the function to solve}).
+
+@node Minimization Iteration
+@section Iteration
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any minimizer of the
+corresponding type. The same functions work for all minimizers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+@deftypefun int gsl_min_fminimizer_iterate (gsl_min_fminimizer * @var{s})
+This function performs a single iteration of the minimizer @var{s}. If the
+iteration encounters an unexpected problem then an error code will be
+returned,
+
+@table @code
+@item GSL_EBADFUNC
+the iteration encountered a singular point where the function evaluated
+to @code{Inf} or @code{NaN}.
+
+@item GSL_FAILURE
+the algorithm could not improve the current best approximation or
+bounding interval.
+@end table
+@end deftypefun
+
+The minimizer maintains a current best estimate of the position of the
+minimum at all times, and the current interval bounding the minimum.
+This information can be accessed with the following auxiliary functions,
+
+@deftypefun double gsl_min_fminimizer_x_minimum (const gsl_min_fminimizer * @var{s})
+This function returns the current estimate of the position of the
+minimum for the minimizer @var{s}.
+@end deftypefun
+
+@deftypefun double gsl_min_fminimizer_x_upper (const gsl_min_fminimizer * @var{s})
+@deftypefunx double gsl_min_fminimizer_x_lower (const gsl_min_fminimizer * @var{s})
+These functions return the current upper and lower bound of the interval
+for the minimizer @var{s}.
+@end deftypefun
+
+@deftypefun double gsl_min_fminimizer_f_minimum (const gsl_min_fminimizer * @var{s})
+@deftypefunx double gsl_min_fminimizer_f_upper (const gsl_min_fminimizer * @var{s})
+@deftypefunx double gsl_min_fminimizer_f_lower (const gsl_min_fminimizer * @var{s})
+These functions return the value of the function at the current estimate
+of the minimum and at the upper and lower bounds of the interval for the
+minimizer @var{s}.
+@end deftypefun
+
+@node Minimization Stopping Parameters
+@section Stopping Parameters
+@cindex minimization, stopping parameters
+
+A minimization procedure should stop when one of the following
+conditions is true:
+
+@itemize @bullet
+@item
+A minimum has been found to within the user-specified precision.
+
+@item
+A user-specified maximum number of iterations has been reached.
+
+@item
+An error has occurred.
+@end itemize
+
+@noindent
+The handling of these conditions is under user control. The function
+below allows the user to test the precision of the current result.
+
+@deftypefun int gsl_min_test_interval (double @var{x_lower}, double @var{x_upper}, double @var{epsabs}, double @var{epsrel})
+This function tests for the convergence of the interval [@var{x_lower},
+@var{x_upper}] with absolute error @var{epsabs} and relative error
+@var{epsrel}. The test returns @code{GSL_SUCCESS} if the following
+condition is achieved,
+@tex
+\beforedisplay
+$$
+|a - b| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, \min(|a|,|b|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|a - b| < epsabs + epsrel min(|a|,|b|)
+@end example
+
+@end ifinfo
+@noindent
+when the interval @math{x = [a,b]} does not include the origin. If the
+interval includes the origin then @math{\min(|a|,|b|)} is replaced by
+zero (which is the minimum value of @math{|x|} over the interval). This
+ensures that the relative error is accurately estimated for minima close
+to the origin.
+
+This condition on the interval also implies that any estimate of the
+minimum @math{x_m} in the interval satisfies the same condition with respect
+to the true minimum @math{x_m^*},
+@tex
+\beforedisplay
+$$
+|x_m - x_m^*| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, x_m^*
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|x_m - x_m^*| < epsabs + epsrel x_m^*
+@end example
+
+@end ifinfo
+@noindent
+assuming that the true minimum @math{x_m^*} is contained within the interval.
+@end deftypefun
+
+@comment ============================================================
+
+@node Minimization Algorithms
+@section Minimization Algorithms
+
+The minimization algorithms described in this section require an initial
+interval which is guaranteed to contain a minimum---if @math{a} and
+@math{b} are the endpoints of the interval and @math{x} is an estimate
+of the minimum then @math{f(a) > f(x) < f(b)}. This ensures that the
+function has at least one minimum somewhere in the interval. If a valid
+initial interval is used then these algorithm cannot fail, provided the
+function is well-behaved.
+
+@deffn {Minimizer} gsl_min_fminimizer_goldensection
+
+@cindex golden section algorithm for finding minima
+@cindex minimum finding, golden section algorithm
+
+The @dfn{golden section algorithm} is the simplest method of bracketing
+the minimum of a function. It is the slowest algorithm provided by the
+library, with linear convergence.
+
+On each iteration, the algorithm first compares the subintervals from
+the endpoints to the current minimum. The larger subinterval is divided
+in a golden section (using the famous ratio @math{(3-\sqrt 5)/2 =
+0.3189660}@dots{}) and the value of the function at this new point is
+calculated. The new value is used with the constraint @math{f(a') >
+f(x') < f(b')} to a select new interval containing the minimum, by
+discarding the least useful point. This procedure can be continued
+indefinitely until the interval is sufficiently small. Choosing the
+golden section as the bisection ratio can be shown to provide the
+fastest convergence for this type of algorithm.
+
+@end deffn
+
+@comment ============================================================
+
+@deffn {Minimizer} gsl_min_fminimizer_brent
+@cindex Brent's method for finding minima
+@cindex minimum finding, Brent's method
+
+The @dfn{Brent minimization algorithm} combines a parabolic
+interpolation with the golden section algorithm. This produces a fast
+algorithm which is still robust.
+
+The outline of the algorithm can be summarized as follows: on each
+iteration Brent's method approximates the function using an
+interpolating parabola through three existing points. The minimum of the
+parabola is taken as a guess for the minimum. If it lies within the
+bounds of the current interval then the interpolating point is accepted,
+and used to generate a smaller interval. If the interpolating point is
+not accepted then the algorithm falls back to an ordinary golden section
+step. The full details of Brent's method include some additional checks
+to improve convergence.
+@end deffn
+
+@comment ============================================================
+
+@node Minimization Examples
+@section Examples
+
+The following program uses the Brent algorithm to find the minimum of
+the function @math{f(x) = \cos(x) + 1}, which occurs at @math{x = \pi}.
+The starting interval is @math{(0,6)}, with an initial guess for the
+minimum of @math{2}.
+
+@example
+@verbatiminclude examples/min.c
+@end example
+
+@noindent
+Here are the results of the minimization procedure.
+
+@smallexample
+$ ./a.out
+@verbatiminclude examples/min.out
+@end smallexample
+
+@node Minimization References and Further Reading
+@section References and Further Reading
+
+Further information on Brent's algorithm is available in the following
+book,
+
+@itemize @asis
+@item
+Richard Brent, @cite{Algorithms for minimization without derivatives},
+Prentice-Hall (1973), republished by Dover in paperback (2002), ISBN
+0-486-41998-3.
+@end itemize
+
diff --git a/gsl-1.9/doc/montecarlo.texi b/gsl-1.9/doc/montecarlo.texi
new file mode 100644
index 0000000..0c3aabe
--- /dev/null
+++ b/gsl-1.9/doc/montecarlo.texi
@@ -0,0 +1,718 @@
+@cindex Monte Carlo integration
+@cindex stratified sampling in monte carlo integration
+This chapter describes routines for multidimensional Monte Carlo
+integration. These include the traditional Monte Carlo method and
+adaptive algorithms such as @sc{vegas} and @sc{miser} which use
+importance sampling and stratified sampling techniques. Each algorithm
+computes an estimate of a multidimensional definite integral of the
+form,
+@tex
+\beforedisplay
+$$
+I = \int_{x_l}^{x_u} dx\,\int_{y_l}^{y_u}dy\,... f(x,y,...)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_xl^xu dx \int_yl^yu dy ... f(x, y, ...)
+@end example
+
+@end ifinfo
+@noindent
+over a hypercubic region @math{((x_l,x_u)}, @math{(y_l,y_u), ...)} using
+a fixed number of function calls. The routines also provide a
+statistical estimate of the error on the result. This error estimate
+should be taken as a guide rather than as a strict error bound---random
+sampling of the region may not uncover all the important features
+of the function, resulting in an underestimate of the error.
+
+The functions are defined in separate header files for each routine,
+@code{gsl_monte_plain.h}, @file{gsl_monte_miser.h} and
+@file{gsl_monte_vegas.h}.
+
+@menu
+* Monte Carlo Interface::
+* PLAIN Monte Carlo::
+* MISER::
+* VEGAS::
+* Monte Carlo Examples::
+* Monte Carlo Integration References and Further Reading::
+@end menu
+
+@node Monte Carlo Interface
+@section Interface
+All of the Monte Carlo integration routines use the same general form of
+interface. There is an allocator to allocate memory for control
+variables and workspace, a routine to initialize those control
+variables, the integrator itself, and a function to free the space when
+done.
+
+Each integration function requires a random number generator to be
+supplied, and returns an estimate of the integral and its standard
+deviation. The accuracy of the result is determined by the number of
+function calls specified by the user. If a known level of accuracy is
+required this can be achieved by calling the integrator several times
+and averaging the individual results until the desired accuracy is
+obtained.
+
+Random sample points used within the Monte Carlo routines are always
+chosen strictly within the integration region, so that endpoint
+singularities are automatically avoided.
+
+The function to be integrated has its own datatype, defined in the
+header file @file{gsl_monte.h}.
+
+@deftp {Data Type} gsl_monte_function
+
+This data type defines a general function with parameters for Monte
+Carlo integration.
+
+@table @code
+@item double (* f) (double * @var{x}, size_t @var{dim}, void * @var{params})
+this function should return the value
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} for the argument @var{x} and parameters @var{params},
+where @var{x} is an array of size @var{dim} giving the coordinates of
+the point where the function is to be evaluated.
+
+@item size_t dim
+the number of dimensions for @var{x}.
+
+@item void * params
+a pointer to the parameters of the function.
+@end table
+@end deftp
+
+@noindent
+Here is an example for a quadratic function in two dimensions,
+@tex
+\beforedisplay
+$$
+f(x,y) = a x^2 + b x y + c y^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f(x,y) = a x^2 + b x y + c y^2
+@end example
+
+@end ifinfo
+@noindent
+with @math{a = 3}, @math{b = 2}, @math{c = 1}. The following code
+defines a @code{gsl_monte_function} @code{F} which you could pass to an
+integrator:
+
+@example
+struct my_f_params @{ double a; double b; double c; @};
+
+double
+my_f (double x[], size_t dim, void * p) @{
+ struct my_f_params * fp = (struct my_f_params *)p;
+
+ if (dim != 2)
+ @{
+ fprintf (stderr, "error: dim != 2");
+ abort ();
+ @}
+
+ return fp->a * x[0] * x[0]
+ + fp->b * x[0] * x[1]
+ + fp->c * x[1] * x[1];
+@}
+
+gsl_monte_function F;
+struct my_f_params params = @{ 3.0, 2.0, 1.0 @};
+
+F.f = &my_f;
+F.dim = 2;
+F.params = &params;
+@end example
+
+@noindent
+The function @math{f(x)} can be evaluated using the following macro,
+
+@example
+#define GSL_MONTE_FN_EVAL(F,x)
+ (*((F)->f))(x,(F)->dim,(F)->params)
+@end example
+
+@node PLAIN Monte Carlo
+@section PLAIN Monte Carlo
+@cindex plain monte carlo
+The plain Monte Carlo algorithm samples points randomly from the
+integration region to estimate the integral and its error. Using this
+algorithm the estimate of the integral @math{E(f; N)} for @math{N}
+randomly distributed points @math{x_i} is given by,
+@tex
+\beforedisplay
+$$
+E(f; N) = V \langle f \rangle = {V \over N} \sum_i^N f(x_i)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+E(f; N) = = V <f> = (V / N) \sum_i^N f(x_i)
+@end example
+
+@end ifinfo
+@noindent
+where @math{V} is the volume of the integration region. The error on
+this estimate @math{\sigma(E;N)} is calculated from the estimated
+variance of the mean,
+@tex
+\beforedisplay
+$$
+\sigma^2 (E; N) = {V \over N } \sum_i^N (f(x_i) - \langle f \rangle)^2.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\sigma^2 (E; N) = (V / N) \sum_i^N (f(x_i) - <f>)^2.
+@end example
+
+@end ifinfo
+@noindent
+For large @math{N} this variance decreases asymptotically as
+@math{\Var(f)/N}, where @math{\Var(f)} is the true variance of the
+function over the integration region. The error estimate itself should
+decrease as @c{$\sigma(f)/\sqrt{N}$}
+@math{\sigma(f)/\sqrt@{N@}}. The familiar law of errors
+decreasing as @c{$1/\sqrt{N}$}
+@math{1/\sqrt@{N@}} applies---to reduce the error by a
+factor of 10 requires a 100-fold increase in the number of sample
+points.
+
+The functions described in this section are declared in the header file
+@file{gsl_monte_plain.h}.
+
+@deftypefun {gsl_monte_plain_state *} gsl_monte_plain_alloc (size_t @var{dim})
+This function allocates and initializes a workspace for Monte Carlo
+integration in @var{dim} dimensions.
+@end deftypefun
+
+@deftypefun int gsl_monte_plain_init (gsl_monte_plain_state* @var{s})
+This function initializes a previously allocated integration state.
+This allows an existing workspace to be reused for different
+integrations.
+@end deftypefun
+
+@deftypefun int gsl_monte_plain_integrate (gsl_monte_function * @var{f}, double * @var{xl}, double * @var{xu}, size_t @var{dim}, size_t @var{calls}, gsl_rng * @var{r}, gsl_monte_plain_state * @var{s}, double * @var{result}, double * @var{abserr})
+This routines uses the plain Monte Carlo algorithm to integrate the
+function @var{f} over the @var{dim}-dimensional hypercubic region
+defined by the lower and upper limits in the arrays @var{xl} and
+@var{xu}, each of size @var{dim}. The integration uses a fixed number
+of function calls @var{calls}, and obtains random sampling points using
+the random number generator @var{r}. A previously allocated workspace
+@var{s} must be supplied. The result of the integration is returned in
+@var{result}, with an estimated absolute error @var{abserr}.
+@end deftypefun
+
+@deftypefun void gsl_monte_plain_free (gsl_monte_plain_state * @var{s})
+This function frees the memory associated with the integrator state
+@var{s}.
+@end deftypefun
+
+@node MISER
+@section MISER
+@cindex MISER monte carlo integration
+@cindex recursive stratified sampling, MISER
+
+The @sc{miser} algorithm of Press and Farrar is based on recursive
+stratified sampling. This technique aims to reduce the overall
+integration error by concentrating integration points in the regions of
+highest variance.
+
+The idea of stratified sampling begins with the observation that for two
+disjoint regions @math{a} and @math{b} with Monte Carlo estimates of the
+integral @math{E_a(f)} and @math{E_b(f)} and variances
+@math{\sigma_a^2(f)} and @math{\sigma_b^2(f)}, the variance
+@math{\Var(f)} of the combined estimate
+@c{$E(f) = {1\over 2} (E_a(f) + E_b(f))$}
+@math{E(f) = (1/2) (E_a(f) + E_b(f))}
+is given by,
+@tex
+\beforedisplay
+$$
+\Var(f) = {\sigma_a^2(f) \over 4 N_a} + {\sigma_b^2(f) \over 4 N_b}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Var(f) = (\sigma_a^2(f) / 4 N_a) + (\sigma_b^2(f) / 4 N_b).
+@end example
+
+@end ifinfo
+@noindent
+It can be shown that this variance is minimized by distributing the
+points such that,
+@tex
+\beforedisplay
+$$
+{N_a \over N_a+N_b} = {\sigma_a \over \sigma_a + \sigma_b}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+N_a / (N_a + N_b) = \sigma_a / (\sigma_a + \sigma_b).
+@end example
+
+@end ifinfo
+@noindent
+Hence the smallest error estimate is obtained by allocating sample
+points in proportion to the standard deviation of the function in each
+sub-region.
+
+The @sc{miser} algorithm proceeds by bisecting the integration region
+along one coordinate axis to give two sub-regions at each step. The
+direction is chosen by examining all @math{d} possible bisections and
+selecting the one which will minimize the combined variance of the two
+sub-regions. The variance in the sub-regions is estimated by sampling
+with a fraction of the total number of points available to the current
+step. The same procedure is then repeated recursively for each of the
+two half-spaces from the best bisection. The remaining sample points are
+allocated to the sub-regions using the formula for @math{N_a} and
+@math{N_b}. This recursive allocation of integration points continues
+down to a user-specified depth where each sub-region is integrated using
+a plain Monte Carlo estimate. These individual values and their error
+estimates are then combined upwards to give an overall result and an
+estimate of its error.
+
+The functions described in this section are declared in the header file
+@file{gsl_monte_miser.h}.
+
+@deftypefun {gsl_monte_miser_state *} gsl_monte_miser_alloc (size_t @var{dim})
+This function allocates and initializes a workspace for Monte Carlo
+integration in @var{dim} dimensions. The workspace is used to maintain
+the state of the integration.
+@end deftypefun
+
+@deftypefun int gsl_monte_miser_init (gsl_monte_miser_state* @var{s})
+This function initializes a previously allocated integration state.
+This allows an existing workspace to be reused for different
+integrations.
+@end deftypefun
+
+@deftypefun int gsl_monte_miser_integrate (gsl_monte_function * @var{f}, double * @var{xl}, double * @var{xu}, size_t @var{dim}, size_t @var{calls}, gsl_rng * @var{r}, gsl_monte_miser_state * @var{s}, double * @var{result}, double * @var{abserr})
+This routines uses the @sc{miser} Monte Carlo algorithm to integrate the
+function @var{f} over the @var{dim}-dimensional hypercubic region
+defined by the lower and upper limits in the arrays @var{xl} and
+@var{xu}, each of size @var{dim}. The integration uses a fixed number
+of function calls @var{calls}, and obtains random sampling points using
+the random number generator @var{r}. A previously allocated workspace
+@var{s} must be supplied. The result of the integration is returned in
+@var{result}, with an estimated absolute error @var{abserr}.
+@end deftypefun
+
+@deftypefun void gsl_monte_miser_free (gsl_monte_miser_state * @var{s})
+This function frees the memory associated with the integrator state
+@var{s}.
+@end deftypefun
+
+The @sc{miser} algorithm has several configurable parameters. The
+following variables can be accessed through the
+@code{gsl_monte_miser_state} struct,
+
+@deftypevar double estimate_frac
+This parameter specifies the fraction of the currently available number of
+function calls which are allocated to estimating the variance at each
+recursive step. The default value is 0.1.
+@end deftypevar
+
+@deftypevar size_t min_calls
+This parameter specifies the minimum number of function calls required
+for each estimate of the variance. If the number of function calls
+allocated to the estimate using @var{estimate_frac} falls below
+@var{min_calls} then @var{min_calls} are used instead. This ensures
+that each estimate maintains a reasonable level of accuracy. The
+default value of @var{min_calls} is @code{16 * dim}.
+@end deftypevar
+
+@deftypevar size_t min_calls_per_bisection
+This parameter specifies the minimum number of function calls required
+to proceed with a bisection step. When a recursive step has fewer calls
+available than @var{min_calls_per_bisection} it performs a plain Monte
+Carlo estimate of the current sub-region and terminates its branch of
+the recursion. The default value of this parameter is @code{32 *
+min_calls}.
+@end deftypevar
+
+@deftypevar double alpha
+This parameter controls how the estimated variances for the two
+sub-regions of a bisection are combined when allocating points. With
+recursive sampling the overall variance should scale better than
+@math{1/N}, since the values from the sub-regions will be obtained using
+a procedure which explicitly minimizes their variance. To accommodate
+this behavior the @sc{miser} algorithm allows the total variance to
+depend on a scaling parameter @math{\alpha},
+@tex
+\beforedisplay
+$$
+\Var(f) = {\sigma_a \over N_a^\alpha} + {\sigma_b \over N_b^\alpha}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Var(f) = @{\sigma_a \over N_a^\alpha@} + @{\sigma_b \over N_b^\alpha@}.
+@end example
+
+@end ifinfo
+@noindent
+The authors of the original paper describing @sc{miser} recommend the
+value @math{\alpha = 2} as a good choice, obtained from numerical
+experiments, and this is used as the default value in this
+implementation.
+@end deftypevar
+
+@deftypevar double dither
+This parameter introduces a random fractional variation of size
+@var{dither} into each bisection, which can be used to break the
+symmetry of integrands which are concentrated near the exact center of
+the hypercubic integration region. The default value of dither is zero,
+so no variation is introduced. If needed, a typical value of
+@var{dither} is 0.1.
+@end deftypevar
+
+@node VEGAS
+@section VEGAS
+@cindex VEGAS monte carlo integration
+@cindex importance sampling, VEGAS
+
+The @sc{vegas} algorithm of Lepage is based on importance sampling. It
+samples points from the probability distribution described by the
+function @math{|f|}, so that the points are concentrated in the regions
+that make the largest contribution to the integral.
+
+In general, if the Monte Carlo integral of @math{f} is sampled with
+points distributed according to a probability distribution described by
+the function @math{g}, we obtain an estimate @math{E_g(f; N)},
+@tex
+\beforedisplay
+$$
+E_g(f; N) = E(f/g; N)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+E_g(f; N) = E(f/g; N)
+@end example
+
+@end ifinfo
+@noindent
+with a corresponding variance,
+@tex
+\beforedisplay
+$$
+\Var_g(f; N) = \Var(f/g; N).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Var_g(f; N) = \Var(f/g; N).
+@end example
+
+@end ifinfo
+@noindent
+If the probability distribution is chosen as @math{g = |f|/I(|f|)} then
+it can be shown that the variance @math{V_g(f; N)} vanishes, and the
+error in the estimate will be zero. In practice it is not possible to
+sample from the exact distribution @math{g} for an arbitrary function, so
+importance sampling algorithms aim to produce efficient approximations
+to the desired distribution.
+
+The @sc{vegas} algorithm approximates the exact distribution by making a
+number of passes over the integration region while histogramming the
+function @math{f}. Each histogram is used to define a sampling
+distribution for the next pass. Asymptotically this procedure converges
+to the desired distribution. In order
+to avoid the number of histogram bins growing like @math{K^d} the
+probability distribution is approximated by a separable function:
+@c{$g(x_1, x_2,\ldots) = g_1(x_1) g_2(x_2)\ldots$}
+@math{g(x_1, x_2, ...) = g_1(x_1) g_2(x_2) ...}
+so that the number of bins required is only @math{Kd}.
+This is equivalent to locating the peaks of the function from the
+projections of the integrand onto the coordinate axes. The efficiency
+of @sc{vegas} depends on the validity of this assumption. It is most
+efficient when the peaks of the integrand are well-localized. If an
+integrand can be rewritten in a form which is approximately separable
+this will increase the efficiency of integration with @sc{vegas}.
+
+@sc{vegas} incorporates a number of additional features, and combines both
+stratified sampling and importance sampling. The integration region is
+divided into a number of ``boxes'', with each box getting a fixed
+number of points (the goal is 2). Each box can then have a fractional
+number of bins, but if the ratio of bins-per-box is less than two, Vegas switches to a
+kind variance reduction (rather than importance sampling).
+
+
+@deftypefun {gsl_monte_vegas_state *} gsl_monte_vegas_alloc (size_t @var{dim})
+This function allocates and initializes a workspace for Monte Carlo
+integration in @var{dim} dimensions. The workspace is used to maintain
+the state of the integration.
+@end deftypefun
+
+@deftypefun int gsl_monte_vegas_init (gsl_monte_vegas_state* @var{s})
+This function initializes a previously allocated integration state.
+This allows an existing workspace to be reused for different
+integrations.
+@end deftypefun
+
+@deftypefun int gsl_monte_vegas_integrate (gsl_monte_function * @var{f}, double * @var{xl}, double * @var{xu}, size_t @var{dim}, size_t @var{calls}, gsl_rng * @var{r}, gsl_monte_vegas_state * @var{s}, double * @var{result}, double * @var{abserr})
+This routines uses the @sc{vegas} Monte Carlo algorithm to integrate the
+function @var{f} over the @var{dim}-dimensional hypercubic region
+defined by the lower and upper limits in the arrays @var{xl} and
+@var{xu}, each of size @var{dim}. The integration uses a fixed number
+of function calls @var{calls}, and obtains random sampling points using
+the random number generator @var{r}. A previously allocated workspace
+@var{s} must be supplied. The result of the integration is returned in
+@var{result}, with an estimated absolute error @var{abserr}. The result
+and its error estimate are based on a weighted average of independent
+samples. The chi-squared per degree of freedom for the weighted average
+is returned via the state struct component, @var{s->chisq}, and must be
+consistent with 1 for the weighted average to be reliable.
+@end deftypefun
+
+@deftypefun void gsl_monte_vegas_free (gsl_monte_vegas_state * @var{s})
+This function frees the memory associated with the integrator state
+@var{s}.
+@end deftypefun
+
+The @sc{vegas} algorithm computes a number of independent estimates of the
+integral internally, according to the @code{iterations} parameter
+described below, and returns their weighted average. Random sampling of
+the integrand can occasionally produce an estimate where the error is
+zero, particularly if the function is constant in some regions. An
+estimate with zero error causes the weighted average to break down and
+must be handled separately. In the original Fortran implementations of
+@sc{vegas} the error estimate is made non-zero by substituting a small
+value (typically @code{1e-30}). The implementation in GSL differs from
+this and avoids the use of an arbitrary constant---it either assigns
+the value a weight which is the average weight of the preceding
+estimates or discards it according to the following procedure,
+
+@table @asis
+@item current estimate has zero error, weighted average has finite error
+
+The current estimate is assigned a weight which is the average weight of
+the preceding estimates.
+
+@item current estimate has finite error, previous estimates had zero error
+
+The previous estimates are discarded and the weighted averaging
+procedure begins with the current estimate.
+
+@item current estimate has zero error, previous estimates had zero error
+
+The estimates are averaged using the arithmetic mean, but no error is computed.
+@end table
+
+The @sc{vegas} algorithm is highly configurable. The following variables
+can be accessed through the @code{gsl_monte_vegas_state} struct,
+
+@deftypevar double result
+@deftypevarx double sigma
+These parameters contain the raw value of the integral @var{result} and
+its error @var{sigma} from the last iteration of the algorithm.
+@end deftypevar
+
+@deftypevar double chisq
+This parameter gives the chi-squared per degree of freedom for the
+weighted estimate of the integral. The value of @var{chisq} should be
+close to 1. A value of @var{chisq} which differs significantly from 1
+indicates that the values from different iterations are inconsistent.
+In this case the weighted error will be under-estimated, and further
+iterations of the algorithm are needed to obtain reliable results.
+@end deftypevar
+
+@deftypevar double alpha
+The parameter @code{alpha} controls the stiffness of the rebinning
+algorithm. It is typically set between one and two. A value of zero
+prevents rebinning of the grid. The default value is 1.5.
+@end deftypevar
+
+@deftypevar size_t iterations
+The number of iterations to perform for each call to the routine. The
+default value is 5 iterations.
+@end deftypevar
+
+@deftypevar int stage
+Setting this determines the @dfn{stage} of the calculation. Normally,
+@code{stage = 0} which begins with a new uniform grid and empty weighted
+average. Calling vegas with @code{stage = 1} retains the grid from the
+previous run but discards the weighted average, so that one can ``tune''
+the grid using a relatively small number of points and then do a large
+run with @code{stage = 1} on the optimized grid. Setting @code{stage =
+2} keeps the grid and the weighted average from the previous run, but
+may increase (or decrease) the number of histogram bins in the grid
+depending on the number of calls available. Choosing @code{stage = 3}
+enters at the main loop, so that nothing is changed, and is equivalent
+to performing additional iterations in a previous call.
+@end deftypevar
+
+@deftypevar int mode
+The possible choices are @code{GSL_VEGAS_MODE_IMPORTANCE},
+@code{GSL_VEGAS_MODE_STRATIFIED}, @code{GSL_VEGAS_MODE_IMPORTANCE_ONLY}.
+This determines whether @sc{vegas} will use importance sampling or
+stratified sampling, or whether it can pick on its own. In low
+dimensions @sc{vegas} uses strict stratified sampling (more precisely,
+stratified sampling is chosen if there are fewer than 2 bins per box).
+@end deftypevar
+
+@deftypevar int verbose
+@deftypevarx {FILE *} ostream
+These parameters set the level of information printed by @sc{vegas}. All
+information is written to the stream @var{ostream}. The default setting
+of @var{verbose} is @code{-1}, which turns off all output. A
+@var{verbose} value of @code{0} prints summary information about the
+weighted average and final result, while a value of @code{1} also
+displays the grid coordinates. A value of @code{2} prints information
+from the rebinning procedure for each iteration.
+@end deftypevar
+
+@node Monte Carlo Examples
+@section Examples
+
+The example program below uses the Monte Carlo routines to estimate the
+value of the following 3-dimensional integral from the theory of random
+walks,
+@tex
+\beforedisplay
+$$
+I = \int_{-\pi}^{+\pi} {dk_x \over 2\pi}
+ \int_{-\pi}^{+\pi} {dk_y \over 2\pi}
+ \int_{-\pi}^{+\pi} {dk_z \over 2\pi}
+ { 1 \over (1 - \cos(k_x)\cos(k_y)\cos(k_z))}.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+I = \int_@{-pi@}^@{+pi@} @{dk_x/(2 pi)@}
+ \int_@{-pi@}^@{+pi@} @{dk_y/(2 pi)@}
+ \int_@{-pi@}^@{+pi@} @{dk_z/(2 pi)@}
+ 1 / (1 - cos(k_x)cos(k_y)cos(k_z)).
+@end example
+
+@end ifinfo
+@noindent
+The analytic value of this integral can be shown to be @math{I =
+\Gamma(1/4)^4/(4 \pi^3) = 1.393203929685676859...}. The integral gives
+the mean time spent at the origin by a random walk on a body-centered
+cubic lattice in three dimensions.
+
+For simplicity we will compute the integral over the region
+@math{(0,0,0)} to @math{(\pi,\pi,\pi)} and multiply by 8 to obtain the
+full result. The integral is slowly varying in the middle of the region
+but has integrable singularities at the corners @math{(0,0,0)},
+@math{(0,\pi,\pi)}, @math{(\pi,0,\pi)} and @math{(\pi,\pi,0)}. The
+Monte Carlo routines only select points which are strictly within the
+integration region and so no special measures are needed to avoid these
+singularities.
+
+@smallexample
+@verbatiminclude examples/monte.c
+@end smallexample
+
+@noindent
+With 500,000 function calls the plain Monte Carlo algorithm achieves a
+fractional error of 0.6%. The estimated error @code{sigma} is
+consistent with the actual error, and the computed result differs from
+the true result by about one standard deviation,
+
+@example
+plain ==================
+result = 1.385867
+sigma = 0.007938
+exact = 1.393204
+error = -0.007337 = 0.9 sigma
+@end example
+
+@noindent
+The @sc{miser} algorithm reduces the error by a factor of two, and also
+correctly estimates the error,
+
+@example
+miser ==================
+result = 1.390656
+sigma = 0.003743
+exact = 1.393204
+error = -0.002548 = 0.7 sigma
+@end example
+
+@noindent
+In the case of the @sc{vegas} algorithm the program uses an initial
+warm-up run of 10,000 function calls to prepare, or ``warm up'', the grid.
+This is followed by a main run with five iterations of 100,000 function
+calls. The chi-squared per degree of freedom for the five iterations are
+checked for consistency with 1, and the run is repeated if the results
+have not converged. In this case the estimates are consistent on the
+first pass.
+
+@example
+vegas warm-up ==================
+result = 1.386925
+sigma = 0.002651
+exact = 1.393204
+error = -0.006278 = 2 sigma
+converging...
+result = 1.392957 sigma = 0.000452 chisq/dof = 1.1
+vegas final ==================
+result = 1.392957
+sigma = 0.000452
+exact = 1.393204
+error = -0.000247 = 0.5 sigma
+@end example
+
+@noindent
+If the value of @code{chisq} had differed significantly from 1 it would
+indicate inconsistent results, with a correspondingly underestimated
+error. The final estimate from @sc{vegas} (using a similar number of
+function calls) is significantly more accurate than the other two
+algorithms.
+
+@node Monte Carlo Integration References and Further Reading
+@section References and Further Reading
+
+The @sc{miser} algorithm is described in the following article by Press
+and Farrar,
+
+@itemize @asis
+@item
+W.H. Press, G.R. Farrar, @cite{Recursive Stratified Sampling for
+Multidimensional Monte Carlo Integration},
+Computers in Physics, v4 (1990), pp190--195.
+@end itemize
+
+@noindent
+The @sc{vegas} algorithm is described in the following papers,
+
+@itemize @asis
+@item
+G.P. Lepage,
+@cite{A New Algorithm for Adaptive Multidimensional Integration},
+Journal of Computational Physics 27, 192--203, (1978)
+
+@item
+G.P. Lepage,
+@cite{VEGAS: An Adaptive Multi-dimensional Integration Program},
+Cornell preprint CLNS 80-447, March 1980
+@end itemize
+
diff --git a/gsl-1.9/doc/multifit.texi b/gsl-1.9/doc/multifit.texi
new file mode 100644
index 0000000..6467b67
--- /dev/null
+++ b/gsl-1.9/doc/multifit.texi
@@ -0,0 +1,645 @@
+@cindex nonlinear least squares fitting
+@cindex least squares fitting, nonlinear
+
+This chapter describes functions for multidimensional nonlinear
+least-squares fitting. The library provides low level components for a
+variety of iterative solvers and convergence tests. These can be
+combined by the user to achieve the desired solution, with full access
+to the intermediate steps of the iteration. Each class of methods uses
+the same framework, so that you can switch between solvers at runtime
+without needing to recompile your program. Each instance of a solver
+keeps track of its own state, allowing the solvers to be used in
+multi-threaded programs.
+
+The header file @file{gsl_multifit_nlin.h} contains prototypes for the
+multidimensional nonlinear fitting functions and related declarations.
+
+@menu
+* Overview of Nonlinear Least-Squares Fitting::
+* Initializing the Nonlinear Least-Squares Solver::
+* Providing the Function to be Minimized::
+* Iteration of the Minimization Algorithm::
+* Search Stopping Parameters for Minimization Algorithms::
+* Minimization Algorithms using Derivatives::
+* Minimization Algorithms without Derivatives::
+* Computing the covariance matrix of best fit parameters::
+* Example programs for Nonlinear Least-Squares Fitting::
+* References and Further Reading for Nonlinear Least-Squares Fitting::
+@end menu
+
+@node Overview of Nonlinear Least-Squares Fitting
+@section Overview
+@cindex nonlinear least squares fitting, overview
+
+The problem of multidimensional nonlinear least-squares fitting requires
+the minimization of the squared residuals of @math{n} functions,
+@math{f_i}, in @math{p} parameters, @math{x_i},
+@tex
+\beforedisplay
+$$
+\Phi(x) = {1 \over 2} || F(x) ||^2
+ = {1 \over 2} \sum_{i=1}^{n} f_i (x_1, \dots, x_p)^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Phi(x) = (1/2) || F(x) ||^2
+ = (1/2) \sum_@{i=1@}^@{n@} f_i(x_1, ..., x_p)^2
+@end example
+
+@end ifinfo
+@noindent
+All algorithms proceed from an initial guess using the linearization,
+@tex
+\beforedisplay
+$$
+\psi(p) = || F(x+p) || \approx || F(x) + J p\, ||
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\psi(p) = || F(x+p) || ~=~ || F(x) + J p ||
+@end example
+
+@end ifinfo
+@noindent
+where @math{x} is the initial point, @math{p} is the proposed step
+and @math{J} is the
+Jacobian matrix @c{$J_{ij} = \partial f_i / \partial x_j$}
+@math{J_@{ij@} = d f_i / d x_j}.
+Additional strategies are used to enlarge the region of convergence.
+These include requiring a decrease in the norm @math{||F||} on each
+step or using a trust region to avoid steps which fall outside the linear
+regime.
+
+To perform a weighted least-squares fit of a nonlinear model
+@math{Y(x,t)} to data (@math{t_i}, @math{y_i}) with independent gaussian
+errors @math{\sigma_i}, use function components of the following form,
+@tex
+\beforedisplay
+$$
+f_i = {(Y(x, t_i) - y_i) \over \sigma_i}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f_i = (Y(x, t_i) - y_i) / \sigma_i
+@end example
+
+@end ifinfo
+@noindent
+Note that the model parameters are denoted by @math{x} in this chapter
+since the non-linear least-squares algorithms are described
+geometrically (i.e. finding the minimum of a surface). The
+independent variable of any data to be fitted is denoted by @math{t}.
+
+With the definition above the Jacobian is
+@c{$J_{ij} = (1 / \sigma_i) \partial Y_i / \partial x_j$}
+@math{J_@{ij@} =(1 / \sigma_i) d Y_i / d x_j}, where @math{Y_i = Y(x,t_i)}.
+
+
+@node Initializing the Nonlinear Least-Squares Solver
+@section Initializing the Solver
+
+@deftypefun {gsl_multifit_fsolver *} gsl_multifit_fsolver_alloc (const gsl_multifit_fsolver_type * @var{T}, size_t @var{n}, size_t @var{p})
+This function returns a pointer to a newly allocated instance of a
+solver of type @var{T} for @var{n} observations and @var{p} parameters.
+The number of observations @var{n} must be greater than or equal to
+parameters @var{p}.
+
+If there is insufficient memory to create the solver then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun {gsl_multifit_fdfsolver *} gsl_multifit_fdfsolver_alloc (const gsl_multifit_fdfsolver_type * @var{T}, size_t @var{n}, size_t @var{p})
+This function returns a pointer to a newly allocated instance of a
+derivative solver of type @var{T} for @var{n} observations and @var{p}
+parameters. For example, the following code creates an instance of a
+Levenberg-Marquardt solver for 100 data points and 3 parameters,
+
+@example
+const gsl_multifit_fdfsolver_type * T
+ = gsl_multifit_fdfsolver_lmder;
+gsl_multifit_fdfsolver * s
+ = gsl_multifit_fdfsolver_alloc (T, 100, 3);
+@end example
+
+@noindent
+The number of observations @var{n} must be greater than or equal to
+parameters @var{p}.
+
+If there is insufficient memory to create the solver then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun int gsl_multifit_fsolver_set (gsl_multifit_fsolver * @var{s}, gsl_multifit_function * @var{f}, gsl_vector * @var{x})
+This function initializes, or reinitializes, an existing solver @var{s}
+to use the function @var{f} and the initial guess @var{x}.
+@end deftypefun
+
+@deftypefun int gsl_multifit_fdfsolver_set (gsl_multifit_fdfsolver * @var{s}, gsl_multifit_function_fdf * @var{fdf}, gsl_vector * @var{x})
+This function initializes, or reinitializes, an existing solver @var{s}
+to use the function and derivative @var{fdf} and the initial guess
+@var{x}.
+@end deftypefun
+
+@deftypefun void gsl_multifit_fsolver_free (gsl_multifit_fsolver * @var{s})
+@deftypefunx void gsl_multifit_fdfsolver_free (gsl_multifit_fdfsolver * @var{s})
+These functions free all the memory associated with the solver @var{s}.
+@end deftypefun
+
+@deftypefun {const char *} gsl_multifit_fsolver_name (const gsl_multifit_fsolver * @var{s})
+@deftypefunx {const char *} gsl_multifit_fdfsolver_name (const gsl_multifit_fdfsolver * @var{s})
+These functions return a pointer to the name of the solver. For example,
+
+@example
+printf ("s is a '%s' solver\n",
+ gsl_multifit_fdfsolver_name (s));
+@end example
+
+@noindent
+would print something like @code{s is a 'lmder' solver}.
+@end deftypefun
+
+@node Providing the Function to be Minimized
+@section Providing the Function to be Minimized
+
+You must provide @math{n} functions of @math{p} variables for the
+minimization algorithms to operate on. In order to allow for
+arbitrary parameters the functions are defined by the following data
+types:
+
+@deftp {Data Type} gsl_multifit_function
+This data type defines a general system of functions with arbitrary parameters.
+
+@table @code
+@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f})
+this function should store the vector result
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} in @var{f} for argument @var{x} and arbitrary parameters @var{params},
+returning an appropriate error code if the function cannot be computed.
+
+@item size_t n
+the number of functions, i.e. the number of components of the
+vector @var{f}.
+
+@item size_t p
+the number of independent variables, i.e. the number of components of
+the vector @var{x}.
+
+@item void * params
+a pointer to the arbitrary parameters of the function.
+@end table
+@end deftp
+
+@deftp {Data Type} gsl_multifit_function_fdf
+This data type defines a general system of functions with arbitrary parameters and
+the corresponding Jacobian matrix of derivatives,
+
+@table @code
+@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f})
+this function should store the vector result
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} in @var{f} for argument @var{x} and arbitrary parameters @var{params},
+returning an appropriate error code if the function cannot be computed.
+
+@item int (* df) (const gsl_vector * @var{x}, void * @var{params}, gsl_matrix * @var{J})
+this function should store the @var{n}-by-@var{p} matrix result
+@c{$J_{ij} = \partial f_i(x,\hbox{\it params}) / \partial x_j$}
+@math{J_ij = d f_i(x,params) / d x_j} in @var{J} for argument @var{x}
+and arbitrary parameters @var{params}, returning an appropriate error code if the
+function cannot be computed.
+
+@item int (* fdf) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}, gsl_matrix * @var{J})
+This function should set the values of the @var{f} and @var{J} as above,
+for arguments @var{x} and arbitrary parameters @var{params}. This function
+provides an optimization of the separate functions for @math{f(x)} and
+@math{J(x)}---it is always faster to compute the function and its
+derivative at the same time.
+
+@item size_t n
+the number of functions, i.e. the number of components of the
+vector @var{f}.
+
+@item size_t p
+the number of independent variables, i.e. the number of components of
+the vector @var{x}.
+
+@item void * params
+a pointer to the arbitrary parameters of the function.
+@end table
+@end deftp
+
+Note that when fitting a non-linear model against experimental data,
+the data is passed to the functions above using the
+@var{params} argument and the trial best-fit parameters through the
+@var{x} argument.
+
+@node Iteration of the Minimization Algorithm
+@section Iteration
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any solver of the
+corresponding type. The same functions work for all solvers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+@deftypefun int gsl_multifit_fsolver_iterate (gsl_multifit_fsolver * @var{s})
+@deftypefunx int gsl_multifit_fdfsolver_iterate (gsl_multifit_fdfsolver * @var{s})
+These functions perform a single iteration of the solver @var{s}. If
+the iteration encounters an unexpected problem then an error code will
+be returned. The solver maintains a current estimate of the best-fit
+parameters at all times.
+@end deftypefun
+
+The solver struct @var{s} contains the following entries, which can
+be used to track the progress of the solution:
+
+@table @code
+@item gsl_vector * x
+The current position.
+
+@item gsl_vector * f
+The function value at the current position.
+
+@item gsl_vector * dx
+The difference between the current position and the previous position,
+i.e. the last step, taken as a vector.
+
+@item gsl_matrix * J
+The Jacobian matrix at the current position (for the
+@code{gsl_multifit_fdfsolver} struct only)
+@end table
+
+The best-fit information also can be accessed with the following
+auxiliary functions,
+
+@deftypefun {gsl_vector *} gsl_multifit_fsolver_position (const gsl_multifit_fsolver * @var{s})
+@deftypefunx {gsl_vector *} gsl_multifit_fdfsolver_position (const gsl_multifit_fdfsolver * @var{s})
+These functions return the current position (i.e. best-fit parameters)
+@code{s->x} of the solver @var{s}.
+@end deftypefun
+
+@node Search Stopping Parameters for Minimization Algorithms
+@section Search Stopping Parameters
+@cindex nonlinear fitting, stopping parameters
+
+A minimization procedure should stop when one of the following conditions is
+true:
+
+@itemize @bullet
+@item
+A minimum has been found to within the user-specified precision.
+
+@item
+A user-specified maximum number of iterations has been reached.
+
+@item
+An error has occurred.
+@end itemize
+
+@noindent
+The handling of these conditions is under user control. The functions
+below allow the user to test the current estimate of the best-fit
+parameters in several standard ways.
+
+@deftypefun int gsl_multifit_test_delta (const gsl_vector * @var{dx}, const gsl_vector * @var{x}, double @var{epsabs}, double @var{epsrel})
+
+This function tests for the convergence of the sequence by comparing the
+last step @var{dx} with the absolute error @var{epsabs} and relative
+error @var{epsrel} to the current position @var{x}. The test returns
+@code{GSL_SUCCESS} if the following condition is achieved,
+@tex
+\beforedisplay
+$$
+|dx_i| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, |x_i|
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|dx_i| < epsabs + epsrel |x_i|
+@end example
+
+@end ifinfo
+@noindent
+for each component of @var{x} and returns @code{GSL_CONTINUE} otherwise.
+@end deftypefun
+
+@cindex residual, in nonlinear systems of equations
+@deftypefun int gsl_multifit_test_gradient (const gsl_vector * @var{g}, double @var{epsabs})
+This function tests the residual gradient @var{g} against the absolute
+error bound @var{epsabs}. Mathematically, the gradient should be
+exactly zero at the minimum. The test returns @code{GSL_SUCCESS} if the
+following condition is achieved,
+@tex
+\beforedisplay
+$$
+\sum_i |g_i| < \hbox{\it epsabs}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\sum_i |g_i| < epsabs
+@end example
+
+@end ifinfo
+@noindent
+and returns @code{GSL_CONTINUE} otherwise. This criterion is suitable
+for situations where the precise location of the minimum, @math{x},
+is unimportant provided a value can be found where the gradient is small
+enough.
+@end deftypefun
+
+
+@deftypefun int gsl_multifit_gradient (const gsl_matrix * @var{J}, const gsl_vector * @var{f}, gsl_vector * @var{g})
+This function computes the gradient @var{g} of @math{\Phi(x) = (1/2)
+||F(x)||^2} from the Jacobian matrix @math{J} and the function values
+@var{f}, using the formula @math{g = J^T f}.
+@end deftypefun
+
+@node Minimization Algorithms using Derivatives
+@section Minimization Algorithms using Derivatives
+
+The minimization algorithms described in this section make use of both
+the function and its derivative. They require an initial guess for the
+location of the minimum. There is no absolute guarantee of
+convergence---the function must be suitable for this technique and the
+initial guess must be sufficiently close to the minimum for it to work.
+
+@comment ============================================================
+@cindex Levenberg-Marquardt algorithms
+@deffn {Derivative Solver} gsl_multifit_fdfsolver_lmsder
+@cindex LMDER algorithm
+@cindex MINPACK, minimization algorithms
+This is a robust and efficient version of the Levenberg-Marquardt
+algorithm as implemented in the scaled @sc{lmder} routine in
+@sc{minpack}. Minpack was written by Jorge J. Mor@'e, Burton S. Garbow
+and Kenneth E. Hillstrom.
+
+The algorithm uses a generalized trust region to keep each step under
+control. In order to be accepted a proposed new position @math{x'} must
+satisfy the condition @math{|D (x' - x)| < \delta}, where @math{D} is a
+diagonal scaling matrix and @math{\delta} is the size of the trust
+region. The components of @math{D} are computed internally, using the
+column norms of the Jacobian to estimate the sensitivity of the residual
+to each component of @math{x}. This improves the behavior of the
+algorithm for badly scaled functions.
+
+On each iteration the algorithm attempts to minimize the linear system
+@math{|F + J p|} subject to the constraint @math{|D p| < \Delta}. The
+solution to this constrained linear system is found using the
+Levenberg-Marquardt method.
+
+The proposed step is now tested by evaluating the function at the
+resulting point, @math{x'}. If the step reduces the norm of the
+function sufficiently, and follows the predicted behavior of the
+function within the trust region, then it is accepted and the size of the
+trust region is increased. If the proposed step fails to improve the
+solution, or differs significantly from the expected behavior within
+the trust region, then the size of the trust region is decreased and
+another trial step is computed.
+
+The algorithm also monitors the progress of the solution and returns an
+error if the changes in the solution are smaller than the machine
+precision. The possible error codes are,
+
+@table @code
+@item GSL_ETOLF
+the decrease in the function falls below machine precision
+
+@item GSL_ETOLX
+the change in the position vector falls below machine precision
+
+@item GSL_ETOLG
+the norm of the gradient, relative to the norm of the function, falls
+below machine precision
+@end table
+
+@noindent
+These error codes indicate that further iterations will be unlikely to
+change the solution from its current value.
+
+@end deffn
+
+@deffn {Derivative Solver} gsl_multifit_fdfsolver_lmder
+This is an unscaled version of the @sc{lmder} algorithm. The elements of the
+diagonal scaling matrix @math{D} are set to 1. This algorithm may be
+useful in circumstances where the scaled version of @sc{lmder} converges too
+slowly, or the function is already scaled appropriately.
+@end deffn
+
+@node Minimization Algorithms without Derivatives
+@section Minimization Algorithms without Derivatives
+
+There are no algorithms implemented in this section at the moment.
+
+@node Computing the covariance matrix of best fit parameters
+@section Computing the covariance matrix of best fit parameters
+@cindex best-fit parameters, covariance
+@cindex least squares, covariance of best-fit parameters
+@cindex covariance matrix, nonlinear fits
+
+@deftypefun int gsl_multifit_covar (const gsl_matrix * @var{J}, double @var{epsrel}, gsl_matrix * @var{covar})
+This function uses the Jacobian matrix @var{J} to compute the covariance
+matrix of the best-fit parameters, @var{covar}. The parameter
+@var{epsrel} is used to remove linear-dependent columns when @var{J} is
+rank deficient.
+
+The covariance matrix is given by,
+@tex
+\beforedisplay
+$$
+C = (J^T J)^{-1}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+covar = (J^T J)^@{-1@}
+@end example
+
+@end ifinfo
+@noindent
+and is computed by QR decomposition of J with column-pivoting. Any
+columns of @math{R} which satisfy
+@tex
+\beforedisplay
+$$
+|R_{kk}| \leq epsrel |R_{11}|
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|R_@{kk@}| <= epsrel |R_@{11@}|
+@end example
+
+@end ifinfo
+@noindent
+are considered linearly-dependent and are excluded from the covariance
+matrix (the corresponding rows and columns of the covariance matrix are
+set to zero).
+
+If the minimisation uses the weighted least-squares function
+@math{f_i = (Y(x, t_i) - y_i) / \sigma_i} then the covariance
+matrix above gives the statistical error on the best-fit parameters
+resulting from the gaussian errors @math{\sigma_i} on
+the underlying data @math{y_i}. This can be verified from the relation
+@math{\delta f = J \delta c} and the fact that the fluctuations in @math{f}
+from the data @math{y_i} are normalised by @math{\sigma_i} and
+so satisfy @c{$\langle \delta f \delta f^T \rangle = I$}
+@math{<\delta f \delta f^T> = I}.
+
+For an unweighted least-squares function @math{f_i = (Y(x, t_i) -
+y_i)} the covariance matrix above should be multiplied by the variance
+of the residuals about the best-fit @math{\sigma^2 = \sum (y_i - Y(x,t_i))^2 / (n-p)}
+to give the variance-covariance
+matrix @math{\sigma^2 C}. This estimates the statistical error on the
+best-fit parameters from the scatter of the underlying data.
+
+For more information about covariance matrices see @ref{Fitting Overview}.
+@end deftypefun
+
+@comment ============================================================
+
+@node Example programs for Nonlinear Least-Squares Fitting
+@section Examples
+
+The following example program fits a weighted exponential model with
+background to experimental data, @math{Y = A \exp(-\lambda t) + b}. The
+first part of the program sets up the functions @code{expb_f} and
+@code{expb_df} to calculate the model and its Jacobian. The appropriate
+fitting function is given by,
+@tex
+\beforedisplay
+$$
+f_i = ((A \exp(-\lambda t_i) + b) - y_i)/\sigma_i
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f_i = ((A \exp(-\lambda t_i) + b) - y_i)/\sigma_i
+@end example
+
+@end ifinfo
+@noindent
+where we have chosen @math{t_i = i}. The Jacobian matrix @math{J} is
+the derivative of these functions with respect to the three parameters
+(@math{A}, @math{\lambda}, @math{b}). It is given by,
+@tex
+\beforedisplay
+$$
+J_{ij} = {\partial f_i \over \partial x_j}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+J_@{ij@} = d f_i / d x_j
+@end example
+
+@end ifinfo
+@noindent
+where @math{x_0 = A}, @math{x_1 = \lambda} and @math{x_2 = b}.
+
+@example
+@verbatiminclude examples/expfit.c
+@end example
+
+@noindent
+The main part of the program sets up a Levenberg-Marquardt solver and
+some simulated random data. The data uses the known parameters
+(1.0,5.0,0.1) combined with gaussian noise (standard deviation = 0.1)
+over a range of 40 timesteps. The initial guess for the parameters is
+chosen as (0.0, 1.0, 0.0).
+
+@example
+@verbatiminclude examples/nlfit.c
+@end example
+
+@noindent
+The iteration terminates when the change in x is smaller than 0.0001, as
+both an absolute and relative change. Here are the results of running
+the program:
+
+@smallexample
+iter: 0 x=1.00000000 0.00000000 0.00000000 |f(x)|=117.349
+status=success
+iter: 1 x=1.64659312 0.01814772 0.64659312 |f(x)|=76.4578
+status=success
+iter: 2 x=2.85876037 0.08092095 1.44796363 |f(x)|=37.6838
+status=success
+iter: 3 x=4.94899512 0.11942928 1.09457665 |f(x)|=9.58079
+status=success
+iter: 4 x=5.02175572 0.10287787 1.03388354 |f(x)|=5.63049
+status=success
+iter: 5 x=5.04520433 0.10405523 1.01941607 |f(x)|=5.44398
+status=success
+iter: 6 x=5.04535782 0.10404906 1.01924871 |f(x)|=5.44397
+chisq/dof = 0.800996
+A = 5.04536 +/- 0.06028
+lambda = 0.10405 +/- 0.00316
+b = 1.01925 +/- 0.03782
+status = success
+@end smallexample
+
+@noindent
+The approximate values of the parameters are found correctly, and the
+chi-squared value indicates a good fit (the chi-squared per degree of
+freedom is approximately 1). In this case the errors on the parameters
+can be estimated from the square roots of the diagonal elements of the
+covariance matrix.
+
+If the chi-squared value shows a poor fit (i.e. @c{$\chi^2/(n-p) \gg 1$}
+@math{chi^2/dof >> 1}) then the error estimates obtained from the
+covariance matrix will be too small. In the example program the error estimates
+are multiplied by @c{$\sqrt{\chi^2/(n-p)}$}
+@math{\sqrt@{\chi^2/dof@}} in this case, a common way of increasing the
+errors for a poor fit. Note that a poor fit will result from the use
+an inappropriate model, and the scaled error estimates may then
+be outside the range of validity for gaussian errors.
+
+@iftex
+@sp 1
+@center @image{fit-exp,3.4in}
+@end iftex
+
+@node References and Further Reading for Nonlinear Least-Squares Fitting
+@section References and Further Reading
+
+The @sc{minpack} algorithm is described in the following article,
+
+@itemize @asis
+@item
+J.J. Mor@'e, @cite{The Levenberg-Marquardt Algorithm: Implementation and
+Theory}, Lecture Notes in Mathematics, v630 (1978), ed G. Watson.
+@end itemize
+
+@noindent
+The following paper is also relevant to the algorithms described in this
+section,
+
+@itemize @asis
+@item
+J.J. Mor@'e, B.S. Garbow, K.E. Hillstrom, ``Testing Unconstrained
+Optimization Software'', ACM Transactions on Mathematical Software, Vol
+7, No 1 (1981), p 17--41.
+@end itemize
+
diff --git a/gsl-1.9/doc/multimin.eps b/gsl-1.9/doc/multimin.eps
new file mode 100644
index 0000000..9db3034
--- /dev/null
+++ b/gsl-1.9/doc/multimin.eps
@@ -0,0 +1,778 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: minplot.eps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Thu Oct 25 17:40:53 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 301 302
+%%Orientation: Portrait
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+252 280 M
+63 0 V
+4724 0 R
+-63 0 V
+168 280 M
+(0) Rshow
+252 854 M
+63 0 V
+4724 0 R
+-63 0 V
+168 854 M
+(1) Rshow
+252 1428 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(2) Rshow
+252 2002 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(3) Rshow
+252 2576 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(4) Rshow
+252 3150 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(5) Rshow
+252 3724 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(6) Rshow
+252 4298 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(7) Rshow
+252 4872 M
+63 0 V
+4724 0 R
+-63 0 V
+-4808 0 R
+(8) Rshow
+252 280 M
+0 63 V
+0 4529 R
+0 -63 V
+252 140 M
+(0) Cshow
+850 280 M
+0 63 V
+0 4529 R
+0 -63 V
+850 140 M
+(1) Cshow
+1449 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(2) Cshow
+2047 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(3) Cshow
+2646 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(4) Cshow
+3244 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(5) Cshow
+3842 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(6) Cshow
+4441 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(7) Cshow
+5039 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(8) Cshow
+1.000 UL
+LTb
+252 280 M
+4787 0 V
+0 4592 V
+-4787 0 V
+252 280 L
+1.000 UP
+1.000 UL
+LT0
+3242 4293 M
+-5 -11 V
+-9 -21 V
+-17 -43 V
+-36 -85 V
+-71 -171 V
+2962 3621 L
+2677 2939 L
+2108 1575 L
+1958 1215 L
+-395 76 V
+772 1443 L
+78 -15 V
+3242 4293 Pls
+3237 4282 Pls
+3228 4261 Pls
+3211 4218 Pls
+3175 4133 Pls
+3104 3962 Pls
+2962 3621 Pls
+2677 2939 Pls
+2108 1575 Pls
+1958 1215 Pls
+1563 1291 Pls
+772 1443 Pls
+850 1428 Pls
+1.000 UL
+LT1
+1020 1817 M
+-59 10 V
+-59 5 V
+-61 2 V
+-60 -3 V
+-60 -7 V
+-58 -11 V
+-56 -14 V
+-54 -19 V
+-51 -22 V
+-47 -26 V
+-44 -28 V
+-38 -32 V
+-34 -33 V
+-29 -37 V
+-23 -37 V
+-18 -40 V
+-11 -40 V
+-6 -41 V
+1 -41 V
+7 -40 V
+13 -40 V
+18 -39 V
+24 -38 V
+30 -36 V
+35 -33 V
+40 -31 V
+44 -28 V
+48 -25 V
+52 -21 V
+54 -18 V
+57 -14 V
+58 -10 V
+60 -6 V
+60 -2 V
+61 2 V
+59 7 V
+59 10 V
+56 15 V
+55 18 V
+51 22 V
+47 25 V
+44 28 V
+39 31 V
+35 34 V
+29 36 V
+24 37 V
+18 40 V
+12 40 V
+6 41 V
+0 40 V
+-6 41 V
+-12 40 V
+-18 40 V
+-24 37 V
+-29 36 V
+-35 34 V
+-39 31 V
+-44 28 V
+-47 25 V
+-51 22 V
+-55 18 V
+-56 15 V
+-59 10 V
+-59 7 V
+-61 2 V
+-60 -2 V
+-60 -6 V
+-58 -10 V
+-57 -14 V
+-54 -18 V
+-52 -21 V
+-48 -25 V
+-44 -28 V
+-40 -31 V
+-35 -33 V
+-30 -36 V
+-24 -38 V
+-18 -39 V
+-13 -40 V
+-7 -40 V
+-1 -41 V
+6 -41 V
+11 -40 V
+18 -40 V
+23 -37 V
+29 -37 V
+34 -33 V
+38 -32 V
+44 -28 V
+47 -26 V
+51 -22 V
+54 -19 V
+56 -14 V
+58 -11 V
+60 -7 V
+60 -3 V
+61 2 V
+59 5 V
+59 10 V
+1.000 UL
+LT2
+1096 1992 M
+-85 14 V
+-86 8 V
+-88 2 V
+-87 -4 V
+-87 -10 V
+-84 -15 V
+-82 -22 V
+-78 -27 V
+-74 -32 V
+-68 -37 V
+-25 -16 V
+0 -850 R
+38 -24 V
+70 -36 V
+75 -31 V
+79 -26 V
+82 -20 V
+85 -15 V
+86 -8 V
+88 -3 V
+87 3 V
+87 9 V
+84 16 V
+82 20 V
+79 27 V
+74 31 V
+69 37 V
+63 41 V
+57 45 V
+50 49 V
+42 52 V
+35 54 V
+26 57 V
+18 58 V
+8 59 V
+0 60 V
+-8 59 V
+-18 58 V
+-26 57 V
+-35 54 V
+-42 52 V
+-50 49 V
+-57 45 V
+-63 41 V
+-69 37 V
+-74 31 V
+-79 27 V
+-82 20 V
+-84 16 V
+-87 9 V
+-87 3 V
+-88 -3 V
+-86 -8 V
+-85 -15 V
+-82 -20 V
+-79 -26 V
+-75 -31 V
+-70 -36 V
+-38 -24 V
+0 -850 R
+25 -16 V
+68 -37 V
+74 -32 V
+78 -27 V
+82 -22 V
+84 -15 V
+87 -10 V
+87 -4 V
+88 2 V
+86 8 V
+85 14 V
+1.000 UL
+LT3
+1202 2235 M
+-121 20 V
+-125 12 V
+-125 3 V
+-125 -6 V
+583 2250 L
+462 2227 L
+345 2197 L
+-93 -32 V
+252 691 M
+4 -2 V
+368 652 L
+486 623 L
+608 603 L
+732 590 L
+125 -4 V
+125 5 V
+124 13 V
+121 22 V
+117 30 V
+112 38 V
+106 45 V
+99 52 V
+91 59 V
+81 64 V
+72 70 V
+60 74 V
+49 79 V
+38 81 V
+25 83 V
+13 85 V
+0 84 V
+-13 85 V
+-25 83 V
+-38 81 V
+-49 79 V
+-60 74 V
+-72 70 V
+-81 64 V
+-91 59 V
+-99 52 V
+-106 45 V
+-112 38 V
+-117 30 V
+-121 22 V
+-124 13 V
+-125 5 V
+-125 -4 V
+608 2253 L
+486 2233 L
+368 2204 L
+256 2167 L
+-4 -2 V
+252 691 M
+93 -32 V
+462 629 L
+583 606 L
+706 592 L
+125 -6 V
+125 3 V
+125 12 V
+121 20 V
+1.000 UL
+LT4
+1351 2576 M
+-173 28 V
+-177 17 V
+-178 4 V
+-178 -8 V
+470 2597 L
+298 2565 L
+-46 -12 V
+252 303 M
+80 -19 V
+21 -4 V
+992 0 R
+41 7 V
+167 43 V
+159 53 V
+151 65 V
+141 74 V
+129 83 V
+115 92 V
+102 100 V
+86 105 V
+70 112 V
+53 115 V
+36 118 V
+18 121 V
+0 120 V
+-18 121 V
+-36 118 V
+-53 115 V
+-70 112 V
+-86 105 V
+-102 100 V
+-115 92 V
+-129 83 V
+-141 74 V
+-151 65 V
+-159 53 V
+-167 43 V
+-173 31 V
+-176 18 V
+-178 7 V
+-178 -5 V
+505 2602 L
+332 2572 L
+-80 -19 V
+252 303 M
+46 -12 V
+59 -11 V
+994 0 R
+1.000 UL
+LT5
+1560 3056 M
+-245 40 V
+-251 24 V
+-252 6 V
+560 3114 L
+310 3086 L
+-58 -11 V
+2693 280 M
+140 112 V
+144 140 V
+122 151 V
+100 157 V
+75 164 V
+51 168 V
+25 170 V
+0 172 V
+-25 170 V
+-51 168 V
+-75 164 V
+-100 157 V
+-122 151 V
+-144 140 V
+-164 131 V
+-183 118 V
+-199 106 V
+-214 91 V
+-227 76 V
+-236 60 V
+-245 44 V
+-249 26 V
+-253 10 V
+-252 -8 V
+361 3093 L
+252 3074 L
+1.000 UL
+LT6
+1855 3731 M
+-348 57 V
+-354 32 V
+-357 9 V
+439 3813 L
+252 3792 L
+3955 280 M
+76 94 V
+140 223 V
+107 231 V
+72 238 V
+36 241 V
+0 242 V
+-36 241 V
+-72 238 V
+-107 231 V
+-140 223 V
+-173 212 V
+-204 200 V
+-232 184 V
+-258 168 V
+-282 148 V
+-303 129 V
+-320 108 V
+-335 85 V
+-346 62 V
+-353 38 V
+-356 13 V
+512 3818 L
+252 3792 L
+1.000 UL
+LT7
+2270 4684 M
+-491 81 V
+-501 46 V
+-505 12 V
+269 4801 L
+-17 -2 V
+5039 3282 M
+-223 219 V
+-328 260 V
+-366 237 V
+-399 211 V
+-428 182 V
+-453 152 V
+-473 121 V
+-489 87 V
+-499 54 V
+-505 19 V
+371 4808 L
+252 4796 L
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/gsl-1.9/doc/multimin.texi b/gsl-1.9/doc/multimin.texi
new file mode 100644
index 0000000..4eb1ae8
--- /dev/null
+++ b/gsl-1.9/doc/multimin.texi
@@ -0,0 +1,752 @@
+@cindex minimization, multidimensional
+
+This chapter describes routines for finding minima of arbitrary
+multidimensional functions. The library provides low level components
+for a variety of iterative minimizers and convergence tests. These can
+be combined by the user to achieve the desired solution, while providing
+full access to the intermediate steps of the algorithms. Each class of
+methods uses the same framework, so that you can switch between
+minimizers at runtime without needing to recompile your program. Each
+instance of a minimizer keeps track of its own state, allowing the
+minimizers to be used in multi-threaded programs. The minimization
+algorithms can be used to maximize a function by inverting its sign.
+
+The header file @file{gsl_multimin.h} contains prototypes for the
+minimization functions and related declarations.
+
+@menu
+* Multimin Overview::
+* Multimin Caveats::
+* Initializing the Multidimensional Minimizer::
+* Providing a function to minimize::
+* Multimin Iteration::
+* Multimin Stopping Criteria::
+* Multimin Algorithms::
+* Multimin Examples::
+* Multimin References and Further Reading::
+@end menu
+
+@node Multimin Overview
+@section Overview
+
+The problem of multidimensional minimization requires finding a point
+@math{x} such that the scalar function,
+@tex
+\beforedisplay
+$$
+f(x_1, \dots, x_n)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f(x_1, @dots{}, x_n)
+@end example
+
+@end ifinfo
+@noindent
+takes a value which is lower than at any neighboring point. For smooth
+functions the gradient @math{g = \nabla f} vanishes at the minimum. In
+general there are no bracketing methods available for the
+minimization of @math{n}-dimensional functions. The algorithms
+proceed from an initial guess using a search algorithm which attempts
+to move in a downhill direction.
+
+Algorithms making use of the gradient of the function perform a
+one-dimensional line minimisation along this direction until the lowest
+point is found to a suitable tolerance. The search direction is then
+updated with local information from the function and its derivatives,
+and the whole process repeated until the true @math{n}-dimensional
+minimum is found.
+
+The Nelder-Mead Simplex algorithm applies a different strategy. It
+maintains @math{n+1} trial parameter vectors as the vertices of a
+@math{n}-dimensional simplex. In each iteration step it tries to
+improve the worst vertex by a simple geometrical transformation until
+the size of the simplex falls below a given tolerance.
+
+Both types of algorithms use a standard framework. The user provides a
+high-level driver for the algorithms, and the library provides the
+individual functions necessary for each of the steps. There are three
+main phases of the iteration. The steps are,
+
+@itemize @bullet
+@item
+initialize minimizer state, @var{s}, for algorithm @var{T}
+
+@item
+update @var{s} using the iteration @var{T}
+
+@item
+test @var{s} for convergence, and repeat iteration if necessary
+@end itemize
+
+@noindent
+Each iteration step consists either of an improvement to the
+line-minimisation in the current direction or an update to the search
+direction itself. The state for the minimizers is held in a
+@code{gsl_multimin_fdfminimizer} struct or a
+@code{gsl_multimin_fminimizer} struct.
+
+@node Multimin Caveats
+@section Caveats
+@cindex Multimin, caveats
+
+Note that the minimization algorithms can only search for one local
+minimum at a time. When there are several local minima in the search
+area, the first minimum to be found will be returned; however it is
+difficult to predict which of the minima this will be. In most cases,
+no error will be reported if you try to find a local minimum in an area
+where there is more than one.
+
+It is also important to note that the minimization algorithms find local
+minima; there is no way to determine whether a minimum is a global
+minimum of the function in question.
+
+@node Initializing the Multidimensional Minimizer
+@section Initializing the Multidimensional Minimizer
+
+The following function initializes a multidimensional minimizer. The
+minimizer itself depends only on the dimension of the problem and the
+algorithm and can be reused for different problems.
+
+@deftypefun {gsl_multimin_fdfminimizer *} gsl_multimin_fdfminimizer_alloc (const gsl_multimin_fdfminimizer_type * @var{T}, size_t @var{n})
+@deftypefunx {gsl_multimin_fminimizer *} gsl_multimin_fminimizer_alloc (const gsl_multimin_fminimizer_type * @var{T}, size_t @var{n})
+This function returns a pointer to a newly allocated instance of a
+minimizer of type @var{T} for an @var{n}-dimension function. If there
+is insufficient memory to create the minimizer then the function returns
+a null pointer and the error handler is invoked with an error code of
+@code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun int gsl_multimin_fdfminimizer_set (gsl_multimin_fdfminimizer * @var{s}, gsl_multimin_function_fdf * @var{fdf}, const gsl_vector * @var{x}, double @var{step_size}, double @var{tol})
+This function initializes the minimizer @var{s} to minimize the function
+@var{fdf} starting from the initial point @var{x}. The size of the
+first trial step is given by @var{step_size}. The accuracy of the line
+minimization is specified by @var{tol}. The precise meaning of this
+parameter depends on the method used. Typically the line minimization
+is considered successful if the gradient of the function @math{g} is
+orthogonal to the current search direction @math{p} to a relative
+accuracy of @var{tol}, where @c{$p\cdot g < tol |p| |g|$}
+@math{dot(p,g) < tol |p| |g|}. A @var{tol} value of 0.1 is
+suitable for most purposes, since line minimization only needs to
+be carried out approximately. Note that setting @var{tol} to zero will
+force the use of ``exact'' line-searches, which are extremely expensive.
+
+@deftypefunx int gsl_multimin_fminimizer_set (gsl_multimin_fminimizer * @var{s}, gsl_multimin_function * @var{f}, const gsl_vector * @var{x}, const gsl_vector * @var{step_size})
+This function initializes the minimizer @var{s} to minimize the function
+@var{f}, starting from the initial point
+@var{x}. The size of the initial trial steps is given in vector
+@var{step_size}. The precise meaning of this parameter depends on the
+method used.
+@end deftypefun
+
+@deftypefun void gsl_multimin_fdfminimizer_free (gsl_multimin_fdfminimizer * @var{s})
+@deftypefunx void gsl_multimin_fminimizer_free (gsl_multimin_fminimizer * @var{s})
+This function frees all the memory associated with the minimizer
+@var{s}.
+@end deftypefun
+
+@deftypefun {const char *} gsl_multimin_fdfminimizer_name (const gsl_multimin_fdfminimizer * @var{s})
+@deftypefunx {const char *} gsl_multimin_fminimizer_name (const gsl_multimin_fminimizer * @var{s})
+This function returns a pointer to the name of the minimizer. For example,
+
+@example
+printf ("s is a '%s' minimizer\n",
+ gsl_multimin_fdfminimizer_name (s));
+@end example
+
+@noindent
+would print something like @code{s is a 'conjugate_pr' minimizer}.
+@end deftypefun
+
+@node Providing a function to minimize
+@section Providing a function to minimize
+
+You must provide a parametric function of @math{n} variables for the
+minimizers to operate on. You may also need to provide a routine which
+calculates the gradient of the function and a third routine which
+calculates both the function value and the gradient together. In order
+to allow for general parameters the functions are defined by the
+following data types:
+
+@deftp {Data Type} gsl_multimin_function_fdf
+This data type defines a general function of @math{n} variables with
+parameters and the corresponding gradient vector of derivatives,
+
+@table @code
+@item double (* f) (const gsl_vector * @var{x}, void * @var{params})
+this function should return the result
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} for argument @var{x} and parameters @var{params}.
+
+@item void (* df) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{g})
+this function should store the @var{n}-dimensional gradient
+@c{$g_i = \partial f(x,\hbox{\it params}) / \partial x_i$}
+@math{g_i = d f(x,params) / d x_i} in the vector @var{g} for argument @var{x}
+and parameters @var{params}, returning an appropriate error code if the
+function cannot be computed.
+
+@item void (* fdf) (const gsl_vector * @var{x}, void * @var{params}, double * f, gsl_vector * @var{g})
+This function should set the values of the @var{f} and @var{g} as above,
+for arguments @var{x} and parameters @var{params}. This function
+provides an optimization of the separate functions for @math{f(x)} and
+@math{g(x)}---it is always faster to compute the function and its
+derivative at the same time.
+
+@item size_t n
+the dimension of the system, i.e. the number of components of the
+vectors @var{x}.
+
+@item void * params
+a pointer to the parameters of the function.
+@end table
+@end deftp
+@deftp {Data Type} gsl_multimin_function
+This data type defines a general function of @math{n} variables with
+parameters,
+
+@table @code
+@item double (* f) (const gsl_vector * @var{x}, void * @var{params})
+this function should return the result
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} for argument @var{x} and parameters @var{params}.
+
+@item size_t n
+the dimension of the system, i.e. the number of components of the
+vectors @var{x}.
+
+@item void * params
+a pointer to the parameters of the function.
+@end table
+@end deftp
+
+@noindent
+The following example function defines a simple paraboloid with two
+parameters,
+
+@example
+/* Paraboloid centered on (dp[0],dp[1]) */
+
+double
+my_f (const gsl_vector *v, void *params)
+@{
+ double x, y;
+ double *dp = (double *)params;
+
+ x = gsl_vector_get(v, 0);
+ y = gsl_vector_get(v, 1);
+
+ return 10.0 * (x - dp[0]) * (x - dp[0]) +
+ 20.0 * (y - dp[1]) * (y - dp[1]) + 30.0;
+@}
+
+/* The gradient of f, df = (df/dx, df/dy). */
+void
+my_df (const gsl_vector *v, void *params,
+ gsl_vector *df)
+@{
+ double x, y;
+ double *dp = (double *)params;
+
+ x = gsl_vector_get(v, 0);
+ y = gsl_vector_get(v, 1);
+
+ gsl_vector_set(df, 0, 20.0 * (x - dp[0]));
+ gsl_vector_set(df, 1, 40.0 * (y - dp[1]));
+@}
+
+/* Compute both f and df together. */
+void
+my_fdf (const gsl_vector *x, void *params,
+ double *f, gsl_vector *df)
+@{
+ *f = my_f(x, params);
+ my_df(x, params, df);
+@}
+@end example
+
+@noindent
+The function can be initialized using the following code,
+
+@example
+gsl_multimin_function_fdf my_func;
+
+double p[2] = @{ 1.0, 2.0 @}; /* center at (1,2) */
+
+my_func.f = &my_f;
+my_func.df = &my_df;
+my_func.fdf = &my_fdf;
+my_func.n = 2;
+my_func.params = (void *)p;
+@end example
+
+@node Multimin Iteration
+@section Iteration
+
+The following function drives the iteration of each algorithm. The
+function performs one iteration to update the state of the minimizer.
+The same function works for all minimizers so that different methods can
+be substituted at runtime without modifications to the code.
+
+@deftypefun int gsl_multimin_fdfminimizer_iterate (gsl_multimin_fdfminimizer * @var{s})
+@deftypefunx int gsl_multimin_fminimizer_iterate (gsl_multimin_fminimizer * @var{s})
+These functions perform a single iteration of the minimizer @var{s}. If
+the iteration encounters an unexpected problem then an error code will
+be returned.
+@end deftypefun
+
+@noindent
+The minimizer maintains a current best estimate of the minimum at all
+times. This information can be accessed with the following auxiliary
+functions,
+
+@deftypefun {gsl_vector *} gsl_multimin_fdfminimizer_x (const gsl_multimin_fdfminimizer * @var{s})
+@deftypefunx {gsl_vector *} gsl_multimin_fminimizer_x (const gsl_multimin_fminimizer * @var{s})
+@deftypefunx double gsl_multimin_fdfminimizer_minimum (const gsl_multimin_fdfminimizer * @var{s})
+@deftypefunx double gsl_multimin_fminimizer_minimum (const gsl_multimin_fminimizer * @var{s})
+@deftypefunx {gsl_vector *} gsl_multimin_fdfminimizer_gradient (const gsl_multimin_fdfminimizer * @var{s})
+@deftypefunx double gsl_multimin_fminimizer_size (const gsl_multimin_fminimizer * @var{s})
+These functions return the current best estimate of the location of the
+minimum, the value of the function at that point, its gradient,
+and minimizer specific characteristic size for the minimizer @var{s}.
+@end deftypefun
+
+@deftypefun int gsl_multimin_fdfminimizer_restart (gsl_multimin_fdfminimizer * @var{s})
+This function resets the minimizer @var{s} to use the current point as a
+new starting point.
+@end deftypefun
+
+@node Multimin Stopping Criteria
+@section Stopping Criteria
+
+A minimization procedure should stop when one of the following
+conditions is true:
+
+@itemize @bullet
+@item
+A minimum has been found to within the user-specified precision.
+
+@item
+A user-specified maximum number of iterations has been reached.
+
+@item
+An error has occurred.
+@end itemize
+
+@noindent
+The handling of these conditions is under user control. The functions
+below allow the user to test the precision of the current result.
+
+@deftypefun int gsl_multimin_test_gradient (const gsl_vector * @var{g}, double @var{epsabs})
+This function tests the norm of the gradient @var{g} against the
+absolute tolerance @var{epsabs}. The gradient of a multidimensional
+function goes to zero at a minimum. The test returns @code{GSL_SUCCESS}
+if the following condition is achieved,
+@tex
+\beforedisplay
+$$
+|g| < \hbox{\it epsabs}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|g| < epsabs
+@end example
+
+@end ifinfo
+@noindent
+and returns @code{GSL_CONTINUE} otherwise. A suitable choice of
+@var{epsabs} can be made from the desired accuracy in the function for
+small variations in @math{x}. The relationship between these quantities
+is given by @c{$\delta{f} = g\,\delta{x}$}
+@math{\delta f = g \delta x}.
+@end deftypefun
+
+@deftypefun int gsl_multimin_test_size (const double @var{size}, double @var{epsabs})
+This function tests the minimizer specific characteristic
+size (if applicable to the used minimizer) against absolute tolerance @var{epsabs}.
+The test returns @code{GSL_SUCCESS} if the size is smaller than tolerance,
+otherwise @code{GSL_CONTINUE} is returned.
+@end deftypefun
+
+@node Multimin Algorithms
+@section Algorithms
+
+There are several minimization methods available. The best choice of
+algorithm depends on the problem. All of the algorithms use the value
+of the function and its gradient at each evaluation point, except for
+the Simplex algorithm which uses function values only.
+
+@deffn {Minimizer} gsl_multimin_fdfminimizer_conjugate_fr
+@cindex Fletcher-Reeves conjugate gradient algorithm, minimization
+@cindex Conjugate gradient algorithm, minimization
+@cindex minimization, conjugate gradient algorithm
+This is the Fletcher-Reeves conjugate gradient algorithm. The conjugate
+gradient algorithm proceeds as a succession of line minimizations. The
+sequence of search directions is used to build up an approximation to the
+curvature of the function in the neighborhood of the minimum.
+
+An initial search direction @var{p} is chosen using the gradient, and line
+minimization is carried out in that direction. The accuracy of the line
+minimization is specified by the parameter @var{tol}. The minimum
+along this line occurs when the function gradient @var{g} and the search direction
+@var{p} are orthogonal. The line minimization terminates when
+@c{$p\cdot g < tol |p| |g|$}
+@math{dot(p,g) < tol |p| |g|}. The
+search direction is updated using the Fletcher-Reeves formula
+@math{p' = g' - \beta g} where @math{\beta=-|g'|^2/|g|^2}, and
+the line minimization is then repeated for the new search
+direction.
+@end deffn
+
+@deffn {Minimizer} gsl_multimin_fdfminimizer_conjugate_pr
+@cindex Polak-Ribiere algorithm, minimization
+@cindex minimization, Polak-Ribiere algorithm
+This is the Polak-Ribiere conjugate gradient algorithm. It is similar
+to the Fletcher-Reeves method, differing only in the choice of the
+coefficient @math{\beta}. Both methods work well when the evaluation
+point is close enough to the minimum of the objective function that it
+is well approximated by a quadratic hypersurface.
+@end deffn
+
+@deffn {Minimizer} gsl_multimin_fdfminimizer_vector_bfgs2
+@deffnx {Minimizer} gsl_multimin_fdfminimizer_vector_bfgs
+@cindex BFGS algorithm, minimization
+@cindex minimization, BFGS algorithm
+These methods use the vector Broyden-Fletcher-Goldfarb-Shanno (BFGS)
+algorithm. This is a quasi-Newton method which builds up an approximation
+to the second derivatives of the function @math{f} using the difference
+between successive gradient vectors. By combining the first and second
+derivatives the algorithm is able to take Newton-type steps towards the
+function minimum, assuming quadratic behavior in that region.
+
+The @code{bfgs2} version of this minimizer is the most efficient
+version available, and is a faithful implementation of the line
+minimization scheme described in Fletcher's @cite{Practical Methods of
+Optimization}, Algorithms 2.6.2 and 2.6.4. It supercedes the original
+@code{bfgs} routine and requires substantially fewer function and
+gradient evaluations. The user-supplied tolerance @var{tol}
+corresponds to the parameter @math{\sigma} used by Fletcher. A value
+of 0.1 is recommended for typical use (larger values correspond to
+less accurate line searches).
+
+@end deffn
+
+@deffn {Minimizer} gsl_multimin_fdfminimizer_steepest_descent
+@cindex steepest descent algorithm, minimization
+@cindex minimization, steepest descent algorithm
+The steepest descent algorithm follows the downhill gradient of the
+function at each step. When a downhill step is successful the step-size
+is increased by a factor of two. If the downhill step leads to a higher
+function value then the algorithm backtracks and the step size is
+decreased using the parameter @var{tol}. A suitable value of @var{tol}
+for most applications is 0.1. The steepest descent method is
+inefficient and is included only for demonstration purposes.
+@end deffn
+
+@deffn {Minimizer} gsl_multimin_fminimizer_nmsimplex
+@cindex Nelder-Mead simplex algorithm for minimization
+@cindex simplex algorithm, minimization
+@cindex minimization, simplex algorithm
+This is the Simplex algorithm of Nelder and Mead. It constructs
+@math{n} vectors @math{p_i} from the
+starting vector @var{x} and the vector @var{step_size} as follows:
+@tex
+\beforedisplay
+$$
+\eqalign{
+p_0 & = (x_0, x_1, \cdots , x_n) \cr
+p_1 & = (x_0 + step\_size_0, x_1, \cdots , x_n) \cr
+p_2 & = (x_0, x_1 + step\_size_1, \cdots , x_n) \cr
+\dots &= \dots \cr
+p_n & = (x_0, x_1, \cdots , x_n+step\_size_n) \cr
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p_0 = (x_0, x_1, ... , x_n)
+p_1 = (x_0 + step_size_0, x_1, ... , x_n)
+p_2 = (x_0, x_1 + step_size_1, ... , x_n)
+... = ...
+p_n = (x_0, x_1, ... , x_n+step_size_n)
+@end example
+
+@end ifinfo
+@noindent
+These vectors form the @math{n+1} vertices of a simplex in @math{n}
+dimensions. On each iteration the algorithm tries to improve
+the parameter vector @math{p_i} corresponding to the highest
+function value by simple geometrical transformations. These
+are reflection, reflection followed by expansion, contraction and multiple
+contraction. Using these transformations the simplex moves through
+the parameter space towards the minimum, where it contracts itself.
+
+After each iteration, the best vertex is returned. Note, that due to
+the nature of the algorithm not every step improves the current
+best parameter vector. Usually several iterations are required.
+
+The routine calculates the minimizer specific characteristic size as the
+average distance from the geometrical center of the simplex to all its
+vertices. This size can be used as a stopping criteria, as the simplex
+contracts itself near the minimum. The size is returned by the function
+@code{gsl_multimin_fminimizer_size}.
+@end deffn
+
+@node Multimin Examples
+@section Examples
+
+This example program finds the minimum of the paraboloid function
+defined earlier. The location of the minimum is offset from the origin
+in @math{x} and @math{y}, and the function value at the minimum is
+non-zero. The main program is given below, it requires the example
+function given earlier in this chapter.
+
+@smallexample
+int
+main (void)
+@{
+ size_t iter = 0;
+ int status;
+
+ const gsl_multimin_fdfminimizer_type *T;
+ gsl_multimin_fdfminimizer *s;
+
+ /* Position of the minimum (1,2). */
+ double par[2] = @{ 1.0, 2.0 @};
+
+ gsl_vector *x;
+ gsl_multimin_function_fdf my_func;
+
+ my_func.f = &my_f;
+ my_func.df = &my_df;
+ my_func.fdf = &my_fdf;
+ my_func.n = 2;
+ my_func.params = &par;
+
+ /* Starting point, x = (5,7) */
+ x = gsl_vector_alloc (2);
+ gsl_vector_set (x, 0, 5.0);
+ gsl_vector_set (x, 1, 7.0);
+
+ T = gsl_multimin_fdfminimizer_conjugate_fr;
+ s = gsl_multimin_fdfminimizer_alloc (T, 2);
+
+ gsl_multimin_fdfminimizer_set (s, &my_func, x, 0.01, 1e-4);
+
+ do
+ @{
+ iter++;
+ status = gsl_multimin_fdfminimizer_iterate (s);
+
+ if (status)
+ break;
+
+ status = gsl_multimin_test_gradient (s->gradient, 1e-3);
+
+ if (status == GSL_SUCCESS)
+ printf ("Minimum found at:\n");
+
+ printf ("%5d %.5f %.5f %10.5f\n", iter,
+ gsl_vector_get (s->x, 0),
+ gsl_vector_get (s->x, 1),
+ s->f);
+
+ @}
+ while (status == GSL_CONTINUE && iter < 100);
+
+ gsl_multimin_fdfminimizer_free (s);
+ gsl_vector_free (x);
+
+ return 0;
+@}
+@end smallexample
+
+@noindent
+The initial step-size is chosen as 0.01, a conservative estimate in this
+case, and the line minimization parameter is set at 0.0001. The program
+terminates when the norm of the gradient has been reduced below
+0.001. The output of the program is shown below,
+
+@example
+ x y f
+ 1 4.99629 6.99072 687.84780
+ 2 4.98886 6.97215 683.55456
+ 3 4.97400 6.93501 675.01278
+ 4 4.94429 6.86073 658.10798
+ 5 4.88487 6.71217 625.01340
+ 6 4.76602 6.41506 561.68440
+ 7 4.52833 5.82083 446.46694
+ 8 4.05295 4.63238 261.79422
+ 9 3.10219 2.25548 75.49762
+ 10 2.85185 1.62963 67.03704
+ 11 2.19088 1.76182 45.31640
+ 12 0.86892 2.02622 30.18555
+Minimum found at:
+ 13 1.00000 2.00000 30.00000
+@end example
+
+@noindent
+Note that the algorithm gradually increases the step size as it
+successfully moves downhill, as can be seen by plotting the successive
+points.
+
+@iftex
+@sp 1
+@center @image{multimin,3.4in}
+@end iftex
+
+@noindent
+The conjugate gradient algorithm finds the minimum on its second
+direction because the function is purely quadratic. Additional
+iterations would be needed for a more complicated function.
+
+Here is another example using the Nelder-Mead Simplex algorithm to
+minimize the same example object function, as above.
+
+@smallexample
+int
+main(void)
+@{
+ size_t np = 2;
+ double par[2] = @{1.0, 2.0@};
+
+ const gsl_multimin_fminimizer_type *T =
+ gsl_multimin_fminimizer_nmsimplex;
+ gsl_multimin_fminimizer *s = NULL;
+ gsl_vector *ss, *x;
+ gsl_multimin_function minex_func;
+
+ size_t iter = 0, i;
+ int status;
+ double size;
+
+ /* Initial vertex size vector */
+ ss = gsl_vector_alloc (np);
+
+ /* Set all step sizes to 1 */
+ gsl_vector_set_all (ss, 1.0);
+
+ /* Starting point */
+ x = gsl_vector_alloc (np);
+
+ gsl_vector_set (x, 0, 5.0);
+ gsl_vector_set (x, 1, 7.0);
+
+ /* Initialize method and iterate */
+ minex_func.f = &my_f;
+ minex_func.n = np;
+ minex_func.params = (void *)&par;
+
+ s = gsl_multimin_fminimizer_alloc (T, np);
+ gsl_multimin_fminimizer_set (s, &minex_func, x, ss);
+
+ do
+ @{
+ iter++;
+ status = gsl_multimin_fminimizer_iterate(s);
+
+ if (status)
+ break;
+
+ size = gsl_multimin_fminimizer_size (s);
+ status = gsl_multimin_test_size (size, 1e-2);
+
+ if (status == GSL_SUCCESS)
+ @{
+ printf ("converged to minimum at\n");
+ @}
+
+ printf ("%5d ", iter);
+ for (i = 0; i < np; i++)
+ @{
+ printf ("%10.3e ", gsl_vector_get (s->x, i));
+ @}
+ printf ("f() = %7.3f size = %.3f\n", s->fval, size);
+ @}
+ while (status == GSL_CONTINUE && iter < 100);
+
+ gsl_vector_free(x);
+ gsl_vector_free(ss);
+ gsl_multimin_fminimizer_free (s);
+
+ return status;
+@}
+@end smallexample
+
+@noindent
+The minimum search stops when the Simplex size drops to 0.01. The output is
+shown below.
+
+@example
+ 1 6.500e+00 5.000e+00 f() = 512.500 size = 1.082
+ 2 5.250e+00 4.000e+00 f() = 290.625 size = 1.372
+ 3 5.250e+00 4.000e+00 f() = 290.625 size = 1.372
+ 4 5.500e+00 1.000e+00 f() = 252.500 size = 1.372
+ 5 2.625e+00 3.500e+00 f() = 101.406 size = 1.823
+ 6 3.469e+00 1.375e+00 f() = 98.760 size = 1.526
+ 7 1.820e+00 3.156e+00 f() = 63.467 size = 1.105
+ 8 1.820e+00 3.156e+00 f() = 63.467 size = 1.105
+ 9 1.016e+00 2.812e+00 f() = 43.206 size = 1.105
+ 10 2.041e+00 2.008e+00 f() = 40.838 size = 0.645
+ 11 1.236e+00 1.664e+00 f() = 32.816 size = 0.645
+ 12 1.236e+00 1.664e+00 f() = 32.816 size = 0.447
+ 13 5.225e-01 1.980e+00 f() = 32.288 size = 0.447
+ 14 1.103e+00 2.073e+00 f() = 30.214 size = 0.345
+ 15 1.103e+00 2.073e+00 f() = 30.214 size = 0.264
+ 16 1.103e+00 2.073e+00 f() = 30.214 size = 0.160
+ 17 9.864e-01 1.934e+00 f() = 30.090 size = 0.132
+ 18 9.190e-01 1.987e+00 f() = 30.069 size = 0.092
+ 19 1.028e+00 2.017e+00 f() = 30.013 size = 0.056
+ 20 1.028e+00 2.017e+00 f() = 30.013 size = 0.046
+ 21 1.028e+00 2.017e+00 f() = 30.013 size = 0.033
+ 22 9.874e-01 1.985e+00 f() = 30.006 size = 0.028
+ 23 9.846e-01 1.995e+00 f() = 30.003 size = 0.023
+ 24 1.007e+00 2.003e+00 f() = 30.001 size = 0.012
+converged to minimum at
+ 25 1.007e+00 2.003e+00 f() = 30.001 size = 0.010
+@end example
+
+@noindent
+The simplex size first increases, while the simplex moves towards the
+minimum. After a while the size begins to decrease as the simplex
+contracts around the minimum.
+
+@node Multimin References and Further Reading
+@section References and Further Reading
+
+The conjugate gradient and BFGS methods are described in detail in the
+following book,
+
+@itemize @asis
+@item R. Fletcher,
+@cite{Practical Methods of Optimization (Second Edition)} Wiley
+(1987), ISBN 0471915475.
+@end itemize
+
+A brief description of multidimensional minimization algorithms and
+more recent references can be found in,
+
+@itemize @asis
+@item C.W. Ueberhuber,
+@cite{Numerical Computation (Volume 2)}, Chapter 14, Section 4.4
+``Minimization Methods'', p.@: 325--335, Springer (1997), ISBN
+3-540-62057-5.
+@end itemize
+
+@noindent
+The simplex algorithm is described in the following paper,
+
+@itemize @asis
+@item J.A. Nelder and R. Mead,
+@cite{A simplex method for function minimization}, Computer Journal
+vol.@: 7 (1965), 308--315.
+@end itemize
+
+@noindent
diff --git a/gsl-1.9/doc/multiroots.texi b/gsl-1.9/doc/multiroots.texi
new file mode 100644
index 0000000..b0dc49c
--- /dev/null
+++ b/gsl-1.9/doc/multiroots.texi
@@ -0,0 +1,1083 @@
+@cindex solving nonlinear systems of equations
+@cindex nonlinear systems of equations, solution of
+@cindex systems of equations, nonlinear
+
+This chapter describes functions for multidimensional root-finding
+(solving nonlinear systems with @math{n} equations in @math{n}
+unknowns). The library provides low level components for a variety of
+iterative solvers and convergence tests. These can be combined by the
+user to achieve the desired solution, with full access to the
+intermediate steps of the iteration. Each class of methods uses the
+same framework, so that you can switch between solvers at runtime
+without needing to recompile your program. Each instance of a solver
+keeps track of its own state, allowing the solvers to be used in
+multi-threaded programs. The solvers are based on the original Fortran
+library @sc{minpack}.
+
+The header file @file{gsl_multiroots.h} contains prototypes for the
+multidimensional root finding functions and related declarations.
+
+@menu
+* Overview of Multidimensional Root Finding::
+* Initializing the Multidimensional Solver::
+* Providing the multidimensional system of equations to solve::
+* Iteration of the multidimensional solver::
+* Search Stopping Parameters for the multidimensional solver::
+* Algorithms using Derivatives::
+* Algorithms without Derivatives::
+* Example programs for Multidimensional Root finding::
+* References and Further Reading for Multidimensional Root Finding::
+@end menu
+
+@node Overview of Multidimensional Root Finding
+@section Overview
+@cindex multidimensional root finding, overview
+
+The problem of multidimensional root finding requires the simultaneous
+solution of @math{n} equations, @math{f_i}, in @math{n} variables,
+@math{x_i},
+@tex
+\beforedisplay
+$$
+f_i (x_1, \dots, x_n) = 0 \qquad\hbox{for}~i = 1 \dots n.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f_i (x_1, ..., x_n) = 0 for i = 1 ... n.
+@end example
+
+@end ifinfo
+@noindent
+In general there are no bracketing methods available for @math{n}
+dimensional systems, and no way of knowing whether any solutions
+exist. All algorithms proceed from an initial guess using a variant of
+the Newton iteration,
+@tex
+\beforedisplay
+$$
+x \to x' = x - J^{-1} f(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x -> x' = x - J^@{-1@} f(x)
+@end example
+
+@end ifinfo
+@noindent
+where @math{x}, @math{f} are vector quantities and @math{J} is the
+Jacobian matrix @c{$J_{ij} = \partial f_i / \partial x_j$}
+@math{J_@{ij@} = d f_i / d x_j}.
+Additional strategies can be used to enlarge the region of
+convergence. These include requiring a decrease in the norm @math{|f|} on
+each step proposed by Newton's method, or taking steepest-descent steps in
+the direction of the negative gradient of @math{|f|}.
+
+Several root-finding algorithms are available within a single framework.
+The user provides a high-level driver for the algorithms, and the
+library provides the individual functions necessary for each of the
+steps. There are three main phases of the iteration. The steps are,
+
+@itemize @bullet
+@item
+initialize solver state, @var{s}, for algorithm @var{T}
+
+@item
+update @var{s} using the iteration @var{T}
+
+@item
+test @var{s} for convergence, and repeat iteration if necessary
+@end itemize
+
+@noindent
+The evaluation of the Jacobian matrix can be problematic, either because
+programming the derivatives is intractable or because computation of the
+@math{n^2} terms of the matrix becomes too expensive. For these reasons
+the algorithms provided by the library are divided into two classes according
+to whether the derivatives are available or not.
+
+The state for solvers with an analytic Jacobian matrix is held in a
+@code{gsl_multiroot_fdfsolver} struct. The updating procedure requires
+both the function and its derivatives to be supplied by the user.
+
+The state for solvers which do not use an analytic Jacobian matrix is
+held in a @code{gsl_multiroot_fsolver} struct. The updating procedure
+uses only function evaluations (not derivatives). The algorithms
+estimate the matrix @math{J} or @c{$J^{-1}$}
+@math{J^@{-1@}} by approximate methods.
+
+@node Initializing the Multidimensional Solver
+@section Initializing the Solver
+
+The following functions initialize a multidimensional solver, either
+with or without derivatives. The solver itself depends only on the
+dimension of the problem and the algorithm and can be reused for
+different problems.
+
+@deftypefun {gsl_multiroot_fsolver *} gsl_multiroot_fsolver_alloc (const gsl_multiroot_fsolver_type * @var{T}, size_t @var{n})
+This function returns a pointer to a newly allocated instance of a
+solver of type @var{T} for a system of @var{n} dimensions.
+For example, the following code creates an instance of a hybrid solver,
+to solve a 3-dimensional system of equations.
+
+@example
+const gsl_multiroot_fsolver_type * T
+ = gsl_multiroot_fsolver_hybrid;
+gsl_multiroot_fsolver * s
+ = gsl_multiroot_fsolver_alloc (T, 3);
+@end example
+
+@noindent
+If there is insufficient memory to create the solver then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun {gsl_multiroot_fdfsolver *} gsl_multiroot_fdfsolver_alloc (const gsl_multiroot_fdfsolver_type * @var{T}, size_t @var{n})
+This function returns a pointer to a newly allocated instance of a
+derivative solver of type @var{T} for a system of @var{n} dimensions.
+For example, the following code creates an instance of a Newton-Raphson solver,
+for a 2-dimensional system of equations.
+
+@example
+const gsl_multiroot_fdfsolver_type * T
+ = gsl_multiroot_fdfsolver_newton;
+gsl_multiroot_fdfsolver * s =
+ gsl_multiroot_fdfsolver_alloc (T, 2);
+@end example
+
+@noindent
+If there is insufficient memory to create the solver then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun int gsl_multiroot_fsolver_set (gsl_multiroot_fsolver * @var{s}, gsl_multiroot_function * @var{f}, gsl_vector * @var{x})
+This function sets, or resets, an existing solver @var{s} to use the
+function @var{f} and the initial guess @var{x}.
+@end deftypefun
+
+@deftypefun int gsl_multiroot_fdfsolver_set (gsl_multiroot_fdfsolver * @var{s}, gsl_multiroot_function_fdf * @var{fdf}, gsl_vector * @var{x})
+This function sets, or resets, an existing solver @var{s} to use the
+function and derivative @var{fdf} and the initial guess @var{x}.
+@end deftypefun
+
+@deftypefun void gsl_multiroot_fsolver_free (gsl_multiroot_fsolver * @var{s})
+@deftypefunx void gsl_multiroot_fdfsolver_free (gsl_multiroot_fdfsolver * @var{s})
+These functions free all the memory associated with the solver @var{s}.
+@end deftypefun
+
+@deftypefun {const char *} gsl_multiroot_fsolver_name (const gsl_multiroot_fsolver * @var{s})
+@deftypefunx {const char *} gsl_multiroot_fdfsolver_name (const gsl_multiroot_fdfsolver * @var{s})
+These functions return a pointer to the name of the solver. For example,
+
+@example
+printf ("s is a '%s' solver\n",
+ gsl_multiroot_fdfsolver_name (s));
+@end example
+
+@noindent
+would print something like @code{s is a 'newton' solver}.
+@end deftypefun
+
+@node Providing the multidimensional system of equations to solve
+@section Providing the function to solve
+@cindex multidimensional root finding, providing a function to solve
+
+You must provide @math{n} functions of @math{n} variables for the root
+finders to operate on. In order to allow for general parameters the
+functions are defined by the following data types:
+
+@deftp {Data Type} gsl_multiroot_function
+This data type defines a general system of functions with parameters.
+
+@table @code
+@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f})
+this function should store the vector result
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} in @var{f} for argument @var{x} and parameters @var{params},
+returning an appropriate error code if the function cannot be computed.
+
+@item size_t n
+the dimension of the system, i.e. the number of components of the
+vectors @var{x} and @var{f}.
+
+@item void * params
+a pointer to the parameters of the function.
+@end table
+@end deftp
+
+@noindent
+Here is an example using Powell's test function,
+@tex
+\beforedisplay
+$$
+f_1(x) = A x_0 x_1 - 1,
+f_2(x) = \exp(-x_0) + \exp(-x_1) - (1 + 1/A)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f_1(x) = A x_0 x_1 - 1,
+f_2(x) = exp(-x_0) + exp(-x_1) - (1 + 1/A)
+@end example
+
+@end ifinfo
+@noindent
+with @math{A = 10^4}. The following code defines a
+@code{gsl_multiroot_function} system @code{F} which you could pass to a
+solver:
+
+@example
+struct powell_params @{ double A; @};
+
+int
+powell (gsl_vector * x, void * p, gsl_vector * f) @{
+ struct powell_params * params
+ = *(struct powell_params *)p;
+ const double A = (params->A);
+ const double x0 = gsl_vector_get(x,0);
+ const double x1 = gsl_vector_get(x,1);
+
+ gsl_vector_set (f, 0, A * x0 * x1 - 1);
+ gsl_vector_set (f, 1, (exp(-x0) + exp(-x1)
+ - (1.0 + 1.0/A)));
+ return GSL_SUCCESS
+@}
+
+gsl_multiroot_function F;
+struct powell_params params = @{ 10000.0 @};
+
+F.f = &powell;
+F.n = 2;
+F.params = &params;
+@end example
+
+@deftp {Data Type} gsl_multiroot_function_fdf
+This data type defines a general system of functions with parameters and
+the corresponding Jacobian matrix of derivatives,
+
+@table @code
+@item int (* f) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f})
+this function should store the vector result
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} in @var{f} for argument @var{x} and parameters @var{params},
+returning an appropriate error code if the function cannot be computed.
+
+@item int (* df) (const gsl_vector * @var{x}, void * @var{params}, gsl_matrix * @var{J})
+this function should store the @var{n}-by-@var{n} matrix result
+@c{$J_{ij} = \partial f_i(x,\hbox{\it params}) / \partial x_j$}
+@math{J_ij = d f_i(x,params) / d x_j} in @var{J} for argument @var{x}
+and parameters @var{params}, returning an appropriate error code if the
+function cannot be computed.
+
+@item int (* fdf) (const gsl_vector * @var{x}, void * @var{params}, gsl_vector * @var{f}, gsl_matrix * @var{J})
+This function should set the values of the @var{f} and @var{J} as above,
+for arguments @var{x} and parameters @var{params}. This function
+provides an optimization of the separate functions for @math{f(x)} and
+@math{J(x)}---it is always faster to compute the function and its
+derivative at the same time.
+
+@item size_t n
+the dimension of the system, i.e. the number of components of the
+vectors @var{x} and @var{f}.
+
+@item void * params
+a pointer to the parameters of the function.
+@end table
+@end deftp
+
+@noindent
+The example of Powell's test function defined above can be extended to
+include analytic derivatives using the following code,
+
+@example
+int
+powell_df (gsl_vector * x, void * p, gsl_matrix * J)
+@{
+ struct powell_params * params
+ = *(struct powell_params *)p;
+ const double A = (params->A);
+ const double x0 = gsl_vector_get(x,0);
+ const double x1 = gsl_vector_get(x,1);
+ gsl_matrix_set (J, 0, 0, A * x1);
+ gsl_matrix_set (J, 0, 1, A * x0);
+ gsl_matrix_set (J, 1, 0, -exp(-x0));
+ gsl_matrix_set (J, 1, 1, -exp(-x1));
+ return GSL_SUCCESS
+@}
+
+int
+powell_fdf (gsl_vector * x, void * p,
+ gsl_matrix * f, gsl_matrix * J) @{
+ struct powell_params * params
+ = *(struct powell_params *)p;
+ const double A = (params->A);
+ const double x0 = gsl_vector_get(x,0);
+ const double x1 = gsl_vector_get(x,1);
+
+ const double u0 = exp(-x0);
+ const double u1 = exp(-x1);
+
+ gsl_vector_set (f, 0, A * x0 * x1 - 1);
+ gsl_vector_set (f, 1, u0 + u1 - (1 + 1/A));
+
+ gsl_matrix_set (J, 0, 0, A * x1);
+ gsl_matrix_set (J, 0, 1, A * x0);
+ gsl_matrix_set (J, 1, 0, -u0);
+ gsl_matrix_set (J, 1, 1, -u1);
+ return GSL_SUCCESS
+@}
+
+gsl_multiroot_function_fdf FDF;
+
+FDF.f = &powell_f;
+FDF.df = &powell_df;
+FDF.fdf = &powell_fdf;
+FDF.n = 2;
+FDF.params = 0;
+@end example
+
+@noindent
+Note that the function @code{powell_fdf} is able to reuse existing terms
+from the function when calculating the Jacobian, thus saving time.
+
+@node Iteration of the multidimensional solver
+@section Iteration
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any solver of the
+corresponding type. The same functions work for all solvers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+@deftypefun int gsl_multiroot_fsolver_iterate (gsl_multiroot_fsolver * @var{s})
+@deftypefunx int gsl_multiroot_fdfsolver_iterate (gsl_multiroot_fdfsolver * @var{s})
+These functions perform a single iteration of the solver @var{s}. If the
+iteration encounters an unexpected problem then an error code will be
+returned,
+
+@table @code
+@item GSL_EBADFUNC
+the iteration encountered a singular point where the function or its
+derivative evaluated to @code{Inf} or @code{NaN}.
+
+@item GSL_ENOPROG
+the iteration is not making any progress, preventing the algorithm from
+continuing.
+@end table
+@end deftypefun
+
+The solver maintains a current best estimate of the root at all times.
+This information can be accessed with the following auxiliary functions,
+
+@deftypefun {gsl_vector *} gsl_multiroot_fsolver_root (const gsl_multiroot_fsolver * @var{s})
+@deftypefunx {gsl_vector *} gsl_multiroot_fdfsolver_root (const gsl_multiroot_fdfsolver * @var{s})
+These functions return the current estimate of the root for the solver @var{s}.
+@end deftypefun
+
+@deftypefun {gsl_vector *} gsl_multiroot_fsolver_f (const gsl_multiroot_fsolver * @var{s})
+@deftypefunx {gsl_vector *} gsl_multiroot_fdfsolver_f (const gsl_multiroot_fdfsolver * @var{s})
+These functions return the function value @math{f(x)} at the current
+estimate of the root for the solver @var{s}.
+@end deftypefun
+
+@deftypefun {gsl_vector *} gsl_multiroot_fsolver_dx (const gsl_multiroot_fsolver * @var{s})
+@deftypefunx {gsl_vector *} gsl_multiroot_fdfsolver_dx (const gsl_multiroot_fdfsolver * @var{s})
+These functions return the last step @math{dx} taken by the solver
+@var{s}.
+@end deftypefun
+
+@node Search Stopping Parameters for the multidimensional solver
+@section Search Stopping Parameters
+@cindex root finding, stopping parameters
+
+A root finding procedure should stop when one of the following conditions is
+true:
+
+@itemize @bullet
+@item
+A multidimensional root has been found to within the user-specified precision.
+
+@item
+A user-specified maximum number of iterations has been reached.
+
+@item
+An error has occurred.
+@end itemize
+
+@noindent
+The handling of these conditions is under user control. The functions
+below allow the user to test the precision of the current result in
+several standard ways.
+
+@deftypefun int gsl_multiroot_test_delta (const gsl_vector * @var{dx}, const gsl_vector * @var{x}, double @var{epsabs}, double @var{epsrel})
+
+This function tests for the convergence of the sequence by comparing the
+last step @var{dx} with the absolute error @var{epsabs} and relative
+error @var{epsrel} to the current position @var{x}. The test returns
+@code{GSL_SUCCESS} if the following condition is achieved,
+@tex
+\beforedisplay
+$$
+|dx_i| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, |x_i|
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|dx_i| < epsabs + epsrel |x_i|
+@end example
+
+@end ifinfo
+@noindent
+for each component of @var{x} and returns @code{GSL_CONTINUE} otherwise.
+@end deftypefun
+
+@cindex residual, in nonlinear systems of equations
+@deftypefun int gsl_multiroot_test_residual (const gsl_vector * @var{f}, double @var{epsabs})
+This function tests the residual value @var{f} against the absolute
+error bound @var{epsabs}. The test returns @code{GSL_SUCCESS} if the
+following condition is achieved,
+@tex
+\beforedisplay
+$$
+\sum_i |f_i| < \hbox{\it epsabs}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\sum_i |f_i| < epsabs
+@end example
+
+@end ifinfo
+@noindent
+and returns @code{GSL_CONTINUE} otherwise. This criterion is suitable
+for situations where the precise location of the root, @math{x}, is
+unimportant provided a value can be found where the residual is small
+enough.
+@end deftypefun
+
+@comment ============================================================
+
+@node Algorithms using Derivatives
+@section Algorithms using Derivatives
+
+The root finding algorithms described in this section make use of both
+the function and its derivative. They require an initial guess for the
+location of the root, but there is no absolute guarantee of
+convergence---the function must be suitable for this technique and the
+initial guess must be sufficiently close to the root for it to work.
+When the conditions are satisfied then convergence is quadratic.
+
+
+@comment ============================================================
+@cindex HYBRID algorithms for nonlinear systems
+@deffn {Derivative Solver} gsl_multiroot_fdfsolver_hybridsj
+@cindex HYBRIDSJ algorithm
+@cindex MINPACK, minimization algorithms
+This is a modified version of Powell's Hybrid method as implemented in
+the @sc{hybrj} algorithm in @sc{minpack}. Minpack was written by Jorge
+J. Mor@'e, Burton S. Garbow and Kenneth E. Hillstrom. The Hybrid
+algorithm retains the fast convergence of Newton's method but will also
+reduce the residual when Newton's method is unreliable.
+
+The algorithm uses a generalized trust region to keep each step under
+control. In order to be accepted a proposed new position @math{x'} must
+satisfy the condition @math{|D (x' - x)| < \delta}, where @math{D} is a
+diagonal scaling matrix and @math{\delta} is the size of the trust
+region. The components of @math{D} are computed internally, using the
+column norms of the Jacobian to estimate the sensitivity of the residual
+to each component of @math{x}. This improves the behavior of the
+algorithm for badly scaled functions.
+
+On each iteration the algorithm first determines the standard Newton
+step by solving the system @math{J dx = - f}. If this step falls inside
+the trust region it is used as a trial step in the next stage. If not,
+the algorithm uses the linear combination of the Newton and gradient
+directions which is predicted to minimize the norm of the function while
+staying inside the trust region,
+@tex
+\beforedisplay
+$$
+dx = - \alpha J^{-1} f(x) - \beta \nabla |f(x)|^2.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+dx = - \alpha J^@{-1@} f(x) - \beta \nabla |f(x)|^2.
+@end example
+
+@end ifinfo
+@noindent
+This combination of Newton and gradient directions is referred to as a
+@dfn{dogleg step}.
+
+The proposed step is now tested by evaluating the function at the
+resulting point, @math{x'}. If the step reduces the norm of the function
+sufficiently then it is accepted and size of the trust region is
+increased. If the proposed step fails to improve the solution then the
+size of the trust region is decreased and another trial step is
+computed.
+
+The speed of the algorithm is increased by computing the changes to the
+Jacobian approximately, using a rank-1 update. If two successive
+attempts fail to reduce the residual then the full Jacobian is
+recomputed. The algorithm also monitors the progress of the solution
+and returns an error if several steps fail to make any improvement,
+
+@table @code
+@item GSL_ENOPROG
+the iteration is not making any progress, preventing the algorithm from
+continuing.
+
+@item GSL_ENOPROGJ
+re-evaluations of the Jacobian indicate that the iteration is not
+making any progress, preventing the algorithm from continuing.
+@end table
+
+@end deffn
+
+@deffn {Derivative Solver} gsl_multiroot_fdfsolver_hybridj
+@cindex HYBRIDJ algorithm
+This algorithm is an unscaled version of @code{hybridsj}. The steps are
+controlled by a spherical trust region @math{|x' - x| < \delta}, instead
+of a generalized region. This can be useful if the generalized region
+estimated by @code{hybridsj} is inappropriate.
+@end deffn
+
+
+@deffn {Derivative Solver} gsl_multiroot_fdfsolver_newton
+@cindex Newton's method for systems of nonlinear equations
+
+Newton's Method is the standard root-polishing algorithm. The algorithm
+begins with an initial guess for the location of the solution. On each
+iteration a linear approximation to the function @math{F} is used to
+estimate the step which will zero all the components of the residual.
+The iteration is defined by the following sequence,
+@tex
+\beforedisplay
+$$
+x \to x' = x - J^{-1} f(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x -> x' = x - J^@{-1@} f(x)
+@end example
+
+@end ifinfo
+@noindent
+where the Jacobian matrix @math{J} is computed from the derivative
+functions provided by @var{f}. The step @math{dx} is obtained by solving
+the linear system,
+@tex
+\beforedisplay
+$$
+J \,dx = - f(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+J dx = - f(x)
+@end example
+
+@end ifinfo
+@noindent
+using LU decomposition.
+@end deffn
+
+@comment ============================================================
+
+@deffn {Derivative Solver} gsl_multiroot_fdfsolver_gnewton
+@cindex Modified Newton's method for nonlinear systems
+@cindex Newton algorithm, globally convergent
+This is a modified version of Newton's method which attempts to improve
+global convergence by requiring every step to reduce the Euclidean norm
+of the residual, @math{|f(x)|}. If the Newton step leads to an increase
+in the norm then a reduced step of relative size,
+@tex
+\beforedisplay
+$$
+t = (\sqrt{1 + 6 r} - 1) / (3 r)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+t = (\sqrt(1 + 6 r) - 1) / (3 r)
+@end example
+
+@end ifinfo
+@noindent
+is proposed, with @math{r} being the ratio of norms
+@math{|f(x')|^2/|f(x)|^2}. This procedure is repeated until a suitable step
+size is found.
+@end deffn
+
+@comment ============================================================
+
+@node Algorithms without Derivatives
+@section Algorithms without Derivatives
+
+The algorithms described in this section do not require any derivative
+information to be supplied by the user. Any derivatives needed are
+approximated by finite differences. Note that if the
+finite-differencing step size chosen by these routines is inappropriate,
+an explicit user-supplied numerical derivative can always be used with
+the algorithms described in the previous section.
+
+@deffn {Solver} gsl_multiroot_fsolver_hybrids
+@cindex HYBRIDS algorithm, scaled without derivatives
+This is a version of the Hybrid algorithm which replaces calls to the
+Jacobian function by its finite difference approximation. The finite
+difference approximation is computed using @code{gsl_multiroots_fdjac}
+with a relative step size of @code{GSL_SQRT_DBL_EPSILON}. Note that
+this step size will not be suitable for all problems.
+@end deffn
+
+@deffn {Solver} gsl_multiroot_fsolver_hybrid
+@cindex HYBRID algorithm, unscaled without derivatives
+This is a finite difference version of the Hybrid algorithm without
+internal scaling.
+@end deffn
+
+@comment ============================================================
+
+@deffn {Solver} gsl_multiroot_fsolver_dnewton
+
+@cindex Discrete Newton algorithm for multidimensional roots
+@cindex Newton algorithm, discrete
+
+The @dfn{discrete Newton algorithm} is the simplest method of solving a
+multidimensional system. It uses the Newton iteration
+@tex
+\beforedisplay
+$$
+x \to x - J^{-1} f(x)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x -> x - J^@{-1@} f(x)
+@end example
+
+@end ifinfo
+@noindent
+where the Jacobian matrix @math{J} is approximated by taking finite
+differences of the function @var{f}. The approximation scheme used by
+this implementation is,
+@tex
+\beforedisplay
+$$
+J_{ij} = (f_i(x + \delta_j) - f_i(x)) / \delta_j
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+J_@{ij@} = (f_i(x + \delta_j) - f_i(x)) / \delta_j
+@end example
+
+@end ifinfo
+@noindent
+where @math{\delta_j} is a step of size @math{\sqrt\epsilon |x_j|} with
+@math{\epsilon} being the machine precision
+(@c{$\epsilon \approx 2.22 \times 10^{-16}$}
+@math{\epsilon \approx 2.22 \times 10^-16}).
+The order of convergence of Newton's algorithm is quadratic, but the
+finite differences require @math{n^2} function evaluations on each
+iteration. The algorithm may become unstable if the finite differences
+are not a good approximation to the true derivatives.
+@end deffn
+
+@comment ============================================================
+
+@deffn {Solver} gsl_multiroot_fsolver_broyden
+@cindex Broyden algorithm for multidimensional roots
+@cindex multidimensional root finding, Broyden algorithm
+
+The @dfn{Broyden algorithm} is a version of the discrete Newton
+algorithm which attempts to avoids the expensive update of the Jacobian
+matrix on each iteration. The changes to the Jacobian are also
+approximated, using a rank-1 update,
+@tex
+\beforedisplay
+$$
+J^{-1} \to J^{-1} - (J^{-1} df - dx) dx^T J^{-1} / dx^T J^{-1} df
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+J^@{-1@} \to J^@{-1@} - (J^@{-1@} df - dx) dx^T J^@{-1@} / dx^T J^@{-1@} df
+@end example
+
+@end ifinfo
+@noindent
+where the vectors @math{dx} and @math{df} are the changes in @math{x}
+and @math{f}. On the first iteration the inverse Jacobian is estimated
+using finite differences, as in the discrete Newton algorithm.
+
+This approximation gives a fast update but is unreliable if the changes
+are not small, and the estimate of the inverse Jacobian becomes worse as
+time passes. The algorithm has a tendency to become unstable unless it
+starts close to the root. The Jacobian is refreshed if this instability
+is detected (consult the source for details).
+
+This algorithm is included only for demonstration purposes, and is not
+recommended for serious use.
+@end deffn
+
+@comment ============================================================
+
+
+@node Example programs for Multidimensional Root finding
+@section Examples
+
+The multidimensional solvers are used in a similar way to the
+one-dimensional root finding algorithms. This first example
+demonstrates the @code{hybrids} scaled-hybrid algorithm, which does not
+require derivatives. The program solves the Rosenbrock system of equations,
+@tex
+\beforedisplay
+$$
+f_1 (x, y) = a (1 - x),~
+f_2 (x, y) = b (y - x^2)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f_1 (x, y) = a (1 - x)
+f_2 (x, y) = b (y - x^2)
+@end example
+
+@end ifinfo
+@noindent
+with @math{a = 1, b = 10}. The solution of this system lies at
+@math{(x,y) = (1,1)} in a narrow valley.
+
+The first stage of the program is to define the system of equations,
+
+@example
+#include <stdlib.h>
+#include <stdio.h>
+#include <gsl/gsl_vector.h>
+#include <gsl/gsl_multiroots.h>
+
+struct rparams
+ @{
+ double a;
+ double b;
+ @};
+
+int
+rosenbrock_f (const gsl_vector * x, void *params,
+ gsl_vector * f)
+@{
+ double a = ((struct rparams *) params)->a;
+ double b = ((struct rparams *) params)->b;
+
+ const double x0 = gsl_vector_get (x, 0);
+ const double x1 = gsl_vector_get (x, 1);
+
+ const double y0 = a * (1 - x0);
+ const double y1 = b * (x1 - x0 * x0);
+
+ gsl_vector_set (f, 0, y0);
+ gsl_vector_set (f, 1, y1);
+
+ return GSL_SUCCESS;
+@}
+@end example
+
+@noindent
+The main program begins by creating the function object @code{f}, with
+the arguments @code{(x,y)} and parameters @code{(a,b)}. The solver
+@code{s} is initialized to use this function, with the @code{hybrids}
+method.
+
+@example
+int
+main (void)
+@{
+ const gsl_multiroot_fsolver_type *T;
+ gsl_multiroot_fsolver *s;
+
+ int status;
+ size_t i, iter = 0;
+
+ const size_t n = 2;
+ struct rparams p = @{1.0, 10.0@};
+ gsl_multiroot_function f = @{&rosenbrock_f, n, &p@};
+
+ double x_init[2] = @{-10.0, -5.0@};
+ gsl_vector *x = gsl_vector_alloc (n);
+
+ gsl_vector_set (x, 0, x_init[0]);
+ gsl_vector_set (x, 1, x_init[1]);
+
+ T = gsl_multiroot_fsolver_hybrids;
+ s = gsl_multiroot_fsolver_alloc (T, 2);
+ gsl_multiroot_fsolver_set (s, &f, x);
+
+ print_state (iter, s);
+
+ do
+ @{
+ iter++;
+ status = gsl_multiroot_fsolver_iterate (s);
+
+ print_state (iter, s);
+
+ if (status) /* check if solver is stuck */
+ break;
+
+ status =
+ gsl_multiroot_test_residual (s->f, 1e-7);
+ @}
+ while (status == GSL_CONTINUE && iter < 1000);
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ gsl_multiroot_fsolver_free (s);
+ gsl_vector_free (x);
+ return 0;
+@}
+@end example
+
+@noindent
+Note that it is important to check the return status of each solver
+step, in case the algorithm becomes stuck. If an error condition is
+detected, indicating that the algorithm cannot proceed, then the error
+can be reported to the user, a new starting point chosen or a different
+algorithm used.
+
+The intermediate state of the solution is displayed by the following
+function. The solver state contains the vector @code{s->x} which is the
+current position, and the vector @code{s->f} with corresponding function
+values.
+
+@example
+int
+print_state (size_t iter, gsl_multiroot_fsolver * s)
+@{
+ printf ("iter = %3u x = % .3f % .3f "
+ "f(x) = % .3e % .3e\n",
+ iter,
+ gsl_vector_get (s->x, 0),
+ gsl_vector_get (s->x, 1),
+ gsl_vector_get (s->f, 0),
+ gsl_vector_get (s->f, 1));
+@}
+@end example
+
+@noindent
+Here are the results of running the program. The algorithm is started at
+@math{(-10,-5)} far from the solution. Since the solution is hidden in
+a narrow valley the earliest steps follow the gradient of the function
+downhill, in an attempt to reduce the large value of the residual. Once
+the root has been approximately located, on iteration 8, the Newton
+behavior takes over and convergence is very rapid.
+
+@smallexample
+iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03
+iter = 1 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03
+iter = 2 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01
+iter = 3 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01
+iter = 4 x = -3.976 24.827 f(x) = 4.976e+00 9.020e+01
+iter = 5 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01
+iter = 6 x = -1.274 -5.680 f(x) = 2.274e+00 -7.302e+01
+iter = 7 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00
+iter = 8 x = 0.249 0.298 f(x) = 7.511e-01 2.359e+00
+iter = 9 x = 1.000 0.878 f(x) = 1.268e-10 -1.218e+00
+iter = 10 x = 1.000 0.989 f(x) = 1.124e-11 -1.080e-01
+iter = 11 x = 1.000 1.000 f(x) = 0.000e+00 0.000e+00
+status = success
+@end smallexample
+
+@noindent
+Note that the algorithm does not update the location on every
+iteration. Some iterations are used to adjust the trust-region
+parameter, after trying a step which was found to be divergent, or to
+recompute the Jacobian, when poor convergence behavior is detected.
+
+The next example program adds derivative information, in order to
+accelerate the solution. There are two derivative functions
+@code{rosenbrock_df} and @code{rosenbrock_fdf}. The latter computes both
+the function and its derivative simultaneously. This allows the
+optimization of any common terms. For simplicity we substitute calls to
+the separate @code{f} and @code{df} functions at this point in the code
+below.
+
+@example
+int
+rosenbrock_df (const gsl_vector * x, void *params,
+ gsl_matrix * J)
+@{
+ const double a = ((struct rparams *) params)->a;
+ const double b = ((struct rparams *) params)->b;
+
+ const double x0 = gsl_vector_get (x, 0);
+
+ const double df00 = -a;
+ const double df01 = 0;
+ const double df10 = -2 * b * x0;
+ const double df11 = b;
+
+ gsl_matrix_set (J, 0, 0, df00);
+ gsl_matrix_set (J, 0, 1, df01);
+ gsl_matrix_set (J, 1, 0, df10);
+ gsl_matrix_set (J, 1, 1, df11);
+
+ return GSL_SUCCESS;
+@}
+
+int
+rosenbrock_fdf (const gsl_vector * x, void *params,
+ gsl_vector * f, gsl_matrix * J)
+@{
+ rosenbrock_f (x, params, f);
+ rosenbrock_df (x, params, J);
+
+ return GSL_SUCCESS;
+@}
+@end example
+
+@noindent
+The main program now makes calls to the corresponding @code{fdfsolver}
+versions of the functions,
+
+@example
+int
+main (void)
+@{
+ const gsl_multiroot_fdfsolver_type *T;
+ gsl_multiroot_fdfsolver *s;
+
+ int status;
+ size_t i, iter = 0;
+
+ const size_t n = 2;
+ struct rparams p = @{1.0, 10.0@};
+ gsl_multiroot_function_fdf f = @{&rosenbrock_f,
+ &rosenbrock_df,
+ &rosenbrock_fdf,
+ n, &p@};
+
+ double x_init[2] = @{-10.0, -5.0@};
+ gsl_vector *x = gsl_vector_alloc (n);
+
+ gsl_vector_set (x, 0, x_init[0]);
+ gsl_vector_set (x, 1, x_init[1]);
+
+ T = gsl_multiroot_fdfsolver_gnewton;
+ s = gsl_multiroot_fdfsolver_alloc (T, n);
+ gsl_multiroot_fdfsolver_set (s, &f, x);
+
+ print_state (iter, s);
+
+ do
+ @{
+ iter++;
+
+ status = gsl_multiroot_fdfsolver_iterate (s);
+
+ print_state (iter, s);
+
+ if (status)
+ break;
+
+ status = gsl_multiroot_test_residual (s->f, 1e-7);
+ @}
+ while (status == GSL_CONTINUE && iter < 1000);
+
+ printf ("status = %s\n", gsl_strerror (status));
+
+ gsl_multiroot_fdfsolver_free (s);
+ gsl_vector_free (x);
+ return 0;
+@}
+@end example
+
+@noindent
+The addition of derivative information to the @code{hybrids} solver does
+not make any significant difference to its behavior, since it able to
+approximate the Jacobian numerically with sufficient accuracy. To
+illustrate the behavior of a different derivative solver we switch to
+@code{gnewton}. This is a traditional Newton solver with the constraint
+that it scales back its step if the full step would lead ``uphill''. Here
+is the output for the @code{gnewton} algorithm,
+
+@smallexample
+iter = 0 x = -10.000 -5.000 f(x) = 1.100e+01 -1.050e+03
+iter = 1 x = -4.231 -65.317 f(x) = 5.231e+00 -8.321e+02
+iter = 2 x = 1.000 -26.358 f(x) = -8.882e-16 -2.736e+02
+iter = 3 x = 1.000 1.000 f(x) = -2.220e-16 -4.441e-15
+status = success
+@end smallexample
+
+@noindent
+The convergence is much more rapid, but takes a wide excursion out to
+the point @math{(-4.23,-65.3)}. This could cause the algorithm to go
+astray in a realistic application. The hybrid algorithm follows the
+downhill path to the solution more reliably.
+
+@node References and Further Reading for Multidimensional Root Finding
+@section References and Further Reading
+
+The original version of the Hybrid method is described in the following
+articles by Powell,
+
+@itemize @asis
+@item
+M.J.D. Powell, ``A Hybrid Method for Nonlinear Equations'' (Chap 6, p
+87--114) and ``A Fortran Subroutine for Solving systems of Nonlinear
+Algebraic Equations'' (Chap 7, p 115--161), in @cite{Numerical Methods for
+Nonlinear Algebraic Equations}, P. Rabinowitz, editor. Gordon and
+Breach, 1970.
+@end itemize
+
+@noindent
+The following papers are also relevant to the algorithms described in
+this section,
+
+@itemize @asis
+@item
+J.J. Mor@'e, M.Y. Cosnard, ``Numerical Solution of Nonlinear Equations'',
+@cite{ACM Transactions on Mathematical Software}, Vol 5, No 1, (1979), p 64--85
+
+@item
+C.G. Broyden, ``A Class of Methods for Solving Nonlinear
+Simultaneous Equations'', @cite{Mathematics of Computation}, Vol 19 (1965),
+p 577--593
+
+@item
+J.J. Mor@'e, B.S. Garbow, K.E. Hillstrom, ``Testing Unconstrained
+Optimization Software'', ACM Transactions on Mathematical Software, Vol
+7, No 1 (1981), p 17--41
+@end itemize
+
diff --git a/gsl-1.9/doc/ntuple.eps b/gsl-1.9/doc/ntuple.eps
new file mode 100644
index 0000000..f066477
--- /dev/null
+++ b/gsl-1.9/doc/ntuple.eps
@@ -0,0 +1,555 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: tmp2.eps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Mon Jan 22 20:12:36 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%Orientation: Portrait
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+560 420 M
+63 0 V
+6409 0 R
+-63 0 V
+476 420 M
+(0) Rshow
+560 1310 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(50) Rshow
+560 2201 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(100) Rshow
+560 3091 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(150) Rshow
+560 3982 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(200) Rshow
+560 4872 M
+63 0 V
+6409 0 R
+-63 0 V
+-6493 0 R
+(250) Rshow
+560 420 M
+0 63 V
+0 4389 R
+0 -63 V
+560 280 M
+(0) Cshow
+1207 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(1) Cshow
+1854 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(2) Cshow
+2502 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(3) Cshow
+3149 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(4) Cshow
+3796 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(5) Cshow
+4443 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(6) Cshow
+5090 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(7) Cshow
+5738 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(8) Cshow
+6385 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(9) Cshow
+7032 420 M
+0 63 V
+0 4389 R
+0 -63 V
+0 -4529 R
+(10) Cshow
+1.000 UL
+LTb
+560 420 M
+6472 0 V
+0 4452 V
+-6472 0 V
+560 420 L
+0 2646 M
+currentpoint gsave translate 90 rotate 0 0 M
+(n) Cshow
+grestore
+3796 140 M
+(E2) Cshow
+1.000 UL
+LT0
+560 420 M
+65 0 V
+64 0 V
+65 0 V
+65 0 V
+65 0 V
+64 0 V
+65 0 V
+65 0 V
+64 0 V
+65 0 V
+65 0 V
+65 0 V
+64 0 V
+65 0 V
+65 0 V
+0 4149 V
+65 0 V
+0 36 V
+64 0 V
+0 -766 V
+65 0 V
+0 623 V
+65 0 V
+0 -552 V
+64 0 V
+0 54 V
+65 0 V
+0 -143 V
+65 0 V
+0 -302 V
+65 0 V
+0 35 V
+64 0 V
+0 160 V
+65 0 V
+0 -195 V
+65 0 V
+0 -89 V
+64 0 V
+0 -161 V
+65 0 V
+0 -142 V
+65 0 V
+0 160 V
+65 0 V
+0 -516 V
+64 0 V
+0 71 V
+65 0 V
+0 214 V
+65 0 V
+0 -250 V
+64 0 V
+0 107 V
+65 0 V
+0 -267 V
+65 0 V
+0 -196 V
+65 0 V
+0 196 V
+64 0 V
+0 -374 V
+65 0 V
+0 516 V
+65 0 V
+0 -356 V
+65 0 V
+0 -463 V
+64 0 V
+0 -53 V
+65 0 V
+0 320 V
+65 0 V
+0 -231 V
+64 0 V
+0 36 V
+65 0 V
+0 -72 V
+65 0 V
+0 339 V
+65 0 V
+0 -196 V
+64 0 V
+65 0 V
+0 -303 V
+65 0 V
+0 -267 V
+64 0 V
+0 214 V
+65 0 V
+0 -178 V
+65 0 V
+0 -36 V
+65 0 V
+0 -54 V
+64 0 V
+0 -142 V
+65 0 V
+0 249 V
+65 0 V
+0 -374 V
+64 0 V
+0 -35 V
+65 0 V
+0 35 V
+65 0 V
+0 -17 V
+65 0 V
+0 17 V
+64 0 V
+0 -178 V
+65 0 V
+0 -35 V
+65 0 V
+0 89 V
+65 0 V
+0 35 V
+64 0 V
+0 -213 V
+65 0 V
+0 106 V
+65 0 V
+0 143 V
+64 0 V
+0 -249 V
+65 0 V
+0 142 V
+65 0 V
+0 -107 V
+65 0 V
+0 -142 V
+64 0 V
+0 142 V
+65 0 V
+0 -142 V
+65 0 V
+0 89 V
+64 0 V
+0 -71 V
+65 0 V
+0 89 V
+65 0 V
+0 -72 V
+65 0 V
+0 54 V
+64 0 V
+0 -160 V
+65 0 V
+0 71 V
+65 0 V
+0 -71 V
+64 0 V
+0 -143 V
+65 0 V
+0 125 V
+65 0 V
+0 89 V
+65 0 V
+0 -214 V
+64 0 V
+0 125 V
+65 0 V
+0 18 V
+65 0 V
+0 -214 V
+65 0 V
+0 160 V
+64 0 V
+0 36 V
+65 0 V
+0 -178 V
+65 0 V
+0 71 V
+64 0 V
+0 -18 V
+65 0 V
+0 -18 V
+65 0 V
+0 72 V
+65 0 V
+0 -54 V
+64 0 V
+0 54 V
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/gsl-1.9/doc/ntuple.texi b/gsl-1.9/doc/ntuple.texi
new file mode 100644
index 0000000..ccbd156
--- /dev/null
+++ b/gsl-1.9/doc/ntuple.texi
@@ -0,0 +1,194 @@
+@cindex ntuples
+
+This chapter describes functions for creating and manipulating
+@dfn{ntuples}, sets of values associated with events. The ntuples
+are stored in files. Their values can be extracted in any combination
+and @dfn{booked} in a histogram using a selection function.
+
+The values to be stored are held in a user-defined data structure, and
+an ntuple is created associating this data structure with a file. The
+values are then written to the file (normally inside a loop) using
+the ntuple functions described below.
+
+A histogram can be created from ntuple data by providing a selection
+function and a value function. The selection function specifies whether
+an event should be included in the subset to be analyzed or not. The value
+function computes the entry to be added to the histogram for each
+event.
+
+All the ntuple functions are defined in the header file
+@file{gsl_ntuple.h}
+
+@menu
+* The ntuple struct::
+* Creating ntuples::
+* Opening an existing ntuple file::
+* Writing ntuples::
+* Reading ntuples ::
+* Closing an ntuple file::
+* Histogramming ntuple values::
+* Example ntuple programs::
+* Ntuple References and Further Reading::
+@end menu
+
+@node The ntuple struct
+@section The ntuple struct
+
+Ntuples are manipulated using the @code{gsl_ntuple} struct. This struct
+contains information on the file where the ntuple data is stored, a
+pointer to the current ntuple data row and the size of the user-defined
+ntuple data struct.
+
+@example
+typedef struct @{
+ FILE * file;
+ void * ntuple_data;
+ size_t size;
+@} gsl_ntuple;
+@end example
+
+@node Creating ntuples
+@section Creating ntuples
+
+@deftypefun {gsl_ntuple *} gsl_ntuple_create (char * @var{filename}, void * @var{ntuple_data}, size_t @var{size})
+This function creates a new write-only ntuple file @var{filename} for
+ntuples of size @var{size} and returns a pointer to the newly created
+ntuple struct. Any existing file with the same name is truncated to
+zero length and overwritten. A pointer to memory for the current ntuple
+row @var{ntuple_data} must be supplied---this is used to copy ntuples
+in and out of the file.
+@end deftypefun
+
+@node Opening an existing ntuple file
+@section Opening an existing ntuple file
+
+@deftypefun {gsl_ntuple *} gsl_ntuple_open (char * @var{filename}, void * @var{ntuple_data}, size_t @var{size})
+This function opens an existing ntuple file @var{filename} for reading
+and returns a pointer to a corresponding ntuple struct. The ntuples in
+the file must have size @var{size}. A pointer to memory for the current
+ntuple row @var{ntuple_data} must be supplied---this is used to copy
+ntuples in and out of the file.
+@end deftypefun
+
+@node Writing ntuples
+@section Writing ntuples
+
+@deftypefun int gsl_ntuple_write (gsl_ntuple * @var{ntuple})
+This function writes the current ntuple @var{ntuple->ntuple_data} of
+size @var{ntuple->size} to the corresponding file.
+@end deftypefun
+
+@deftypefun int gsl_ntuple_bookdata (gsl_ntuple * @var{ntuple})
+This function is a synonym for @code{gsl_ntuple_write}.
+@end deftypefun
+
+@node Reading ntuples
+@section Reading ntuples
+
+@deftypefun int gsl_ntuple_read (gsl_ntuple * @var{ntuple})
+This function reads the current row of the ntuple file for @var{ntuple}
+and stores the values in @var{ntuple->data}.
+@end deftypefun
+
+@node Closing an ntuple file
+@section Closing an ntuple file
+
+@deftypefun int gsl_ntuple_close (gsl_ntuple * @var{ntuple})
+This function closes the ntuple file @var{ntuple} and frees its
+associated allocated memory.
+@end deftypefun
+
+@node Histogramming ntuple values
+@section Histogramming ntuple values
+
+Once an ntuple has been created its contents can be histogrammed in
+various ways using the function @code{gsl_ntuple_project}. Two
+user-defined functions must be provided, a function to select events and
+a function to compute scalar values. The selection function and the
+value function both accept the ntuple row as a first argument and other
+parameters as a second argument.
+
+@cindex selection function, ntuples
+The @dfn{selection function} determines which ntuple rows are selected
+for histogramming. It is defined by the following struct,
+@smallexample
+typedef struct @{
+ int (* function) (void * ntuple_data, void * params);
+ void * params;
+@} gsl_ntuple_select_fn;
+@end smallexample
+
+@noindent
+The struct component @var{function} should return a non-zero value for
+each ntuple row that is to be included in the histogram.
+
+@cindex value function, ntuples
+The @dfn{value function} computes scalar values for those ntuple rows
+selected by the selection function,
+@smallexample
+typedef struct @{
+ double (* function) (void * ntuple_data, void * params);
+ void * params;
+@} gsl_ntuple_value_fn;
+@end smallexample
+
+@noindent
+In this case the struct component @var{function} should return the value
+to be added to the histogram for the ntuple row.
+
+@cindex histogram, from ntuple
+@cindex projection of ntuples
+@deftypefun int gsl_ntuple_project (gsl_histogram * @var{h}, gsl_ntuple * @var{ntuple}, gsl_ntuple_value_fn * @var{value_func}, gsl_ntuple_select_fn * @var{select_func})
+This function updates the histogram @var{h} from the ntuple @var{ntuple}
+using the functions @var{value_func} and @var{select_func}. For each
+ntuple row where the selection function @var{select_func} is non-zero the
+corresponding value of that row is computed using the function
+@var{value_func} and added to the histogram. Those ntuple rows where
+@var{select_func} returns zero are ignored. New entries are added to
+the histogram, so subsequent calls can be used to accumulate further
+data in the same histogram.
+@end deftypefun
+
+@node Example ntuple programs
+@section Examples
+
+The following example programs demonstrate the use of ntuples in
+managing a large dataset. The first program creates a set of 10,000
+simulated ``events'', each with 3 associated values @math{(x,y,z)}. These
+are generated from a gaussian distribution with unit variance, for
+demonstration purposes, and written to the ntuple file @file{test.dat}.
+
+@example
+@verbatiminclude examples/ntuplew.c
+@end example
+
+@noindent
+The next program analyses the ntuple data in the file @file{test.dat}.
+The analysis procedure is to compute the squared-magnitude of each
+event, @math{E^2=x^2+y^2+z^2}, and select only those which exceed a
+lower limit of 1.5. The selected events are then histogrammed using
+their @math{E^2} values.
+
+@example
+@verbatiminclude examples/ntupler.c
+@end example
+
+@need 3000
+The following plot shows the distribution of the selected events.
+Note the cut-off at the lower bound.
+
+@iftex
+@sp 1
+@center @image{ntuple,3.4in}
+@end iftex
+
+@node Ntuple References and Further Reading
+@section References and Further Reading
+@cindex PAW
+@cindex HBOOK
+
+Further information on the use of ntuples can be found in the
+documentation for the @sc{cern} packages @sc{paw} and @sc{hbook}
+(available online).
+
+
diff --git a/gsl-1.9/doc/ode-initval.texi b/gsl-1.9/doc/ode-initval.texi
new file mode 100644
index 0000000..ae8e68b
--- /dev/null
+++ b/gsl-1.9/doc/ode-initval.texi
@@ -0,0 +1,556 @@
+@cindex differential equations, initial value problems
+@cindex initial value problems, differential equations
+@cindex ordinary differential equations, initial value problem
+@cindex ODEs, initial value problems
+This chapter describes functions for solving ordinary differential
+equation (ODE) initial value problems. The library provides a variety
+of low-level methods, such as Runge-Kutta and Bulirsch-Stoer routines,
+and higher-level components for adaptive step-size control. The
+components can be combined by the user to achieve the desired solution,
+with full access to any intermediate steps.
+
+These functions are declared in the header file @file{gsl_odeiv.h}.
+
+@menu
+* Defining the ODE System::
+* Stepping Functions::
+* Adaptive Step-size Control::
+* Evolution::
+* ODE Example programs::
+* ODE References and Further Reading::
+@end menu
+
+@node Defining the ODE System
+@section Defining the ODE System
+
+The routines solve the general @math{n}-dimensional first-order system,
+@tex
+\beforedisplay
+$$
+{dy_i(t) \over dt} = f_i (t, y_1(t), \dots y_n(t))
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+dy_i(t)/dt = f_i(t, y_1(t), ..., y_n(t))
+@end example
+
+@end ifinfo
+@noindent
+for @math{i = 1, \dots, n}. The stepping functions rely on the vector
+of derivatives @math{f_i} and the Jacobian matrix,
+@c{$J_{ij} = \partial f_i(t, y(t)) / \partial y_j$}
+@math{J_@{ij@} = df_i(t,y(t)) / dy_j}.
+A system of equations is defined using the @code{gsl_odeiv_system}
+datatype.
+
+@deftp {Data Type} gsl_odeiv_system
+This data type defines a general ODE system with arbitrary parameters.
+
+@table @code
+@item int (* function) (double t, const double y[], double dydt[], void * params)
+This function should store the vector elements
+@c{$f_i(t,y,\hbox{\it params})$}
+@math{f_i(t,y,params)} in the array @var{dydt},
+for arguments (@var{t},@var{y}) and parameters @var{params}.
+The function should return @code{GSL_SUCCESS} if the calculation
+was completed successfully. Any other return value indicates
+an error.
+
+@item int (* jacobian) (double t, const double y[], double * dfdy, double dfdt[], void * params);
+This function should store the vector of derivative elements
+@c{$\partial f_i(t,y,params) / \partial t$}
+@math{df_i(t,y,params)/dt} in the array @var{dfdt} and the
+Jacobian matrix @c{$J_{ij}$}
+@math{J_@{ij@}} in the array
+@var{dfdy}, regarded as a row-ordered matrix @code{J(i,j) = dfdy[i * dimension + j]}
+where @code{dimension} is the dimension of the system.
+The function should return @code{GSL_SUCCESS} if the calculation
+was completed successfully. Any other return value indicates
+an error.
+
+Some of the simpler solver algorithms do not make use of the Jacobian
+matrix, so it is not always strictly necessary to provide it (the
+@code{jacobian} element of the struct can be replaced by a null pointer
+for those algorithms). However, it is useful to provide the Jacobian to allow
+the solver algorithms to be interchanged---the best algorithms make use
+of the Jacobian.
+
+@item size_t dimension;
+This is the dimension of the system of equations.
+
+@item void * params
+This is a pointer to the arbitrary parameters of the system.
+@end table
+@end deftp
+
+@node Stepping Functions
+@section Stepping Functions
+
+The lowest level components are the @dfn{stepping functions} which
+advance a solution from time @math{t} to @math{t+h} for a fixed
+step-size @math{h} and estimate the resulting local error.
+
+@deftypefun {gsl_odeiv_step *} gsl_odeiv_step_alloc (const gsl_odeiv_step_type * @var{T}, size_t @var{dim})
+This function returns a pointer to a newly allocated instance of a
+stepping function of type @var{T} for a system of @var{dim} dimensions.
+@end deftypefun
+
+@deftypefun int gsl_odeiv_step_reset (gsl_odeiv_step * @var{s})
+This function resets the stepping function @var{s}. It should be used
+whenever the next use of @var{s} will not be a continuation of a
+previous step.
+@end deftypefun
+
+@deftypefun void gsl_odeiv_step_free (gsl_odeiv_step * @var{s})
+This function frees all the memory associated with the stepping function
+@var{s}.
+@end deftypefun
+
+@deftypefun {const char *} gsl_odeiv_step_name (const gsl_odeiv_step * @var{s})
+This function returns a pointer to the name of the stepping function.
+For example,
+
+@example
+printf ("step method is '%s'\n",
+ gsl_odeiv_step_name (s));
+@end example
+
+@noindent
+would print something like @code{step method is 'rk4'}.
+@end deftypefun
+
+@deftypefun {unsigned int} gsl_odeiv_step_order (const gsl_odeiv_step * @var{s})
+This function returns the order of the stepping function on the previous
+step. This order can vary if the stepping function itself is adaptive.
+@end deftypefun
+
+@deftypefun int gsl_odeiv_step_apply (gsl_odeiv_step * @var{s}, double @var{t}, double @var{h}, double @var{y}[], double @var{yerr}[], const double @var{dydt_in}[], double @var{dydt_out}[], const gsl_odeiv_system * @var{dydt})
+This function applies the stepping function @var{s} to the system of
+equations defined by @var{dydt}, using the step size @var{h} to advance
+the system from time @var{t} and state @var{y} to time @var{t}+@var{h}.
+The new state of the system is stored in @var{y} on output, with an
+estimate of the absolute error in each component stored in @var{yerr}.
+If the argument @var{dydt_in} is not null it should point an array
+containing the derivatives for the system at time @var{t} on input. This
+is optional as the derivatives will be computed internally if they are
+not provided, but allows the reuse of existing derivative information.
+On output the new derivatives of the system at time @var{t}+@var{h} will
+be stored in @var{dydt_out} if it is not null.
+
+If the user-supplied functions defined in the system @var{dydt} return a
+status other than @code{GSL_SUCCESS} the step will be aborted. In this
+case, the elements of @var{y} will be restored to their pre-step values
+and the error code from the user-supplied function will be returned.
+The step-size @var{h} will be set to the step-size which caused the error.
+If the function is called again with a smaller step-size, e.g. @math{@var{h}/10},
+it should be possible to get closer to any singularity.
+To distinguish between error codes from the user-supplied functions and
+those from @code{gsl_odeiv_step_apply} itself, any user-defined return
+values should be distinct from the standard GSL error codes.
+@end deftypefun
+
+The following algorithms are available,
+
+@deffn {Step Type} gsl_odeiv_step_rk2
+@cindex RK2, Runge-Kutta method
+@cindex Runge-Kutta methods, ordinary differential equations
+Embedded Runge-Kutta (2, 3) method.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_rk4
+@cindex RK4, Runge-Kutta method
+4th order (classical) Runge-Kutta.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_rkf45
+@cindex Fehlberg method, differential equations
+@cindex RKF45, Runge-Kutta-Fehlberg method
+Embedded Runge-Kutta-Fehlberg (4, 5) method. This method is a good
+general-purpose integrator.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_rkck
+@cindex Runge-Kutta Cash-Karp method
+@cindex Cash-Karp, Runge-Kutta method
+Embedded Runge-Kutta Cash-Karp (4, 5) method.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_rk8pd
+@cindex Runge-Kutta Prince-Dormand method
+@cindex Prince-Dormand, Runge-Kutta method
+Embedded Runge-Kutta Prince-Dormand (8,9) method.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_rk2imp
+Implicit 2nd order Runge-Kutta at Gaussian points.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_rk4imp
+Implicit 4th order Runge-Kutta at Gaussian points.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_bsimp
+@cindex Bulirsch-Stoer method
+@cindex Bader and Deuflhard, Bulirsch-Stoer method.
+@cindex Deuflhard and Bader, Bulirsch-Stoer method.
+Implicit Bulirsch-Stoer method of Bader and Deuflhard. This algorithm
+requires the Jacobian.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_gear1
+@cindex Gear method, differential equations
+M=1 implicit Gear method.
+@end deffn
+
+@deffn {Step Type} gsl_odeiv_step_gear2
+M=2 implicit Gear method.
+@end deffn
+
+@node Adaptive Step-size Control
+@section Adaptive Step-size Control
+@cindex Adaptive step-size control, differential equations
+
+The control function examines the proposed change to the solution
+produced by a stepping function and attempts to determine the optimal
+step-size for a user-specified level of error.
+
+@deftypefun {gsl_odeiv_control *} gsl_odeiv_control_standard_new (double @var{eps_abs}, double @var{eps_rel}, double @var{a_y}, double @var{a_dydt})
+The standard control object is a four parameter heuristic based on
+absolute and relative errors @var{eps_abs} and @var{eps_rel}, and
+scaling factors @var{a_y} and @var{a_dydt} for the system state
+@math{y(t)} and derivatives @math{y'(t)} respectively.
+
+The step-size adjustment procedure for this method begins by computing
+the desired error level @math{D_i} for each component,
+@tex
+\beforedisplay
+$$
+D_i = \epsilon_{abs} + \epsilon_{rel} * (a_{y} |y_i| + a_{dydt} h |y'_i|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+D_i = eps_abs + eps_rel * (a_y |y_i| + a_dydt h |y'_i|)
+@end example
+
+@end ifinfo
+@noindent
+and comparing it with the observed error @math{E_i = |yerr_i|}. If the
+observed error @var{E} exceeds the desired error level @var{D} by more
+than 10% for any component then the method reduces the step-size by an
+appropriate factor,
+@tex
+\beforedisplay
+$$
+h_{new} = h_{old} * S * (E/D)^{-1/q}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+h_new = h_old * S * (E/D)^(-1/q)
+@end example
+
+@end ifinfo
+@noindent
+where @math{q} is the consistency order of the method (e.g. @math{q=4} for
+4(5) embedded RK), and @math{S} is a safety factor of 0.9. The ratio
+@math{E/D} is taken to be the maximum of the ratios
+@math{E_i/D_i}.
+
+If the observed error @math{E} is less than 50% of the desired error
+level @var{D} for the maximum ratio @math{E_i/D_i} then the algorithm
+takes the opportunity to increase the step-size to bring the error in
+line with the desired level,
+@tex
+\beforedisplay
+$$
+h_{new} = h_{old} * S * (E/D)^{-1/(q+1)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+h_new = h_old * S * (E/D)^(-1/(q+1))
+@end example
+
+@end ifinfo
+@noindent
+This encompasses all the standard error scaling methods. To avoid
+uncontrolled changes in the stepsize, the overall scaling factor is
+limited to the range @math{1/5} to 5.
+@end deftypefun
+
+@deftypefun {gsl_odeiv_control *} gsl_odeiv_control_y_new (double @var{eps_abs}, double @var{eps_rel})
+This function creates a new control object which will keep the local
+error on each step within an absolute error of @var{eps_abs} and
+relative error of @var{eps_rel} with respect to the solution @math{y_i(t)}.
+This is equivalent to the standard control object with @var{a_y}=1 and
+@var{a_dydt}=0.
+@end deftypefun
+
+@deftypefun {gsl_odeiv_control *} gsl_odeiv_control_yp_new (double @var{eps_abs}, double @var{eps_rel})
+This function creates a new control object which will keep the local
+error on each step within an absolute error of @var{eps_abs} and
+relative error of @var{eps_rel} with respect to the derivatives of the
+solution @math{y'_i(t)}. This is equivalent to the standard control
+object with @var{a_y}=0 and @var{a_dydt}=1.
+@end deftypefun
+
+
+@deftypefun {gsl_odeiv_control *} gsl_odeiv_control_scaled_new (double @var{eps_abs}, double @var{eps_rel}, double @var{a_y}, double @var{a_dydt}, const double @var{scale_abs}[], size_t @var{dim})
+This function creates a new control object which uses the same algorithm
+as @code{gsl_odeiv_control_standard_new} but with an absolute error
+which is scaled for each component by the array @var{scale_abs}.
+The formula for @math{D_i} for this control object is,
+@tex
+\beforedisplay
+$$
+D_i = \epsilon_{abs} s_i + \epsilon_{rel} * (a_{y} |y_i| + a_{dydt} h |y'_i|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+D_i = eps_abs * s_i + eps_rel * (a_y |y_i| + a_dydt h |y'_i|)
+@end example
+
+@end ifinfo
+@noindent
+where @math{s_i} is the @math{i}-th component of the array @var{scale_abs}.
+The same error control heuristic is used by the Matlab @sc{ode} suite.
+@end deftypefun
+
+@deftypefun {gsl_odeiv_control *} gsl_odeiv_control_alloc (const gsl_odeiv_control_type * @var{T})
+This function returns a pointer to a newly allocated instance of a
+control function of type @var{T}. This function is only needed for
+defining new types of control functions. For most purposes the standard
+control functions described above should be sufficient.
+@end deftypefun
+
+@deftypefun int gsl_odeiv_control_init (gsl_odeiv_control * @var{c}, double @var{eps_abs}, double @var{eps_rel}, double @var{a_y}, double @var{a_dydt})
+This function initializes the control function @var{c} with the
+parameters @var{eps_abs} (absolute error), @var{eps_rel} (relative
+error), @var{a_y} (scaling factor for y) and @var{a_dydt} (scaling
+factor for derivatives).
+@end deftypefun
+
+@deftypefun void gsl_odeiv_control_free (gsl_odeiv_control * @var{c})
+This function frees all the memory associated with the control function
+@var{c}.
+@end deftypefun
+
+@deftypefun int gsl_odeiv_control_hadjust (gsl_odeiv_control * @var{c}, gsl_odeiv_step * @var{s}, const double @var{y}[], const double @var{yerr}[], const double @var{dydt}[], double * @var{h})
+This function adjusts the step-size @var{h} using the control function
+@var{c}, and the current values of @var{y}, @var{yerr} and @var{dydt}.
+The stepping function @var{step} is also needed to determine the order
+of the method. If the error in the y-values @var{yerr} is found to be
+too large then the step-size @var{h} is reduced and the function returns
+@code{GSL_ODEIV_HADJ_DEC}. If the error is sufficiently small then
+@var{h} may be increased and @code{GSL_ODEIV_HADJ_INC} is returned. The
+function returns @code{GSL_ODEIV_HADJ_NIL} if the step-size is
+unchanged. The goal of the function is to estimate the largest
+step-size which satisfies the user-specified accuracy requirements for
+the current point.
+@end deftypefun
+
+@deftypefun {const char *} gsl_odeiv_control_name (const gsl_odeiv_control * @var{c})
+This function returns a pointer to the name of the control function.
+For example,
+
+@example
+printf ("control method is '%s'\n",
+ gsl_odeiv_control_name (c));
+@end example
+
+@noindent
+would print something like @code{control method is 'standard'}
+@end deftypefun
+
+
+@node Evolution
+@section Evolution
+
+The highest level of the system is the evolution function which combines
+the results of a stepping function and control function to reliably
+advance the solution forward over an interval @math{(t_0, t_1)}. If the
+control function signals that the step-size should be decreased the
+evolution function backs out of the current step and tries the proposed
+smaller step-size. This process is continued until an acceptable
+step-size is found.
+
+@deftypefun {gsl_odeiv_evolve *} gsl_odeiv_evolve_alloc (size_t @var{dim})
+This function returns a pointer to a newly allocated instance of an
+evolution function for a system of @var{dim} dimensions.
+@end deftypefun
+
+@deftypefun int gsl_odeiv_evolve_apply (gsl_odeiv_evolve * @var{e}, gsl_odeiv_control * @var{con}, gsl_odeiv_step * @var{step}, const gsl_odeiv_system * @var{dydt}, double * @var{t}, double @var{t1}, double * @var{h}, double @var{y}[])
+This function advances the system (@var{e}, @var{dydt}) from time
+@var{t} and position @var{y} using the stepping function @var{step}.
+The new time and position are stored in @var{t} and @var{y} on output.
+The initial step-size is taken as @var{h}, but this will be modified
+using the control function @var{c} to achieve the appropriate error
+bound if necessary. The routine may make several calls to @var{step} in
+order to determine the optimum step-size. An estimate of
+the local error for the step can be obtained from the components of the array @code{@var{e}->yerr[]}.
+If the step-size has been changed the value of @var{h} will be modified on output.
+The maximum time @var{t1} is guaranteed not to be exceeded by the time-step. On the
+final time-step the value of @var{t} will be set to @var{t1} exactly.
+
+If the user-supplied functions defined in the system @var{dydt} return a
+status other than @code{GSL_SUCCESS} the step will be aborted. In this
+case, @var{t} and @var{y} will be restored to their pre-step values
+and the error code from the user-supplied function will be returned. To
+distinguish between error codes from the user-supplied functions and
+those from @code{gsl_odeiv_evolve_apply} itself, any user-defined return
+values should be distinct from the standard GSL error codes.
+@end deftypefun
+
+@deftypefun int gsl_odeiv_evolve_reset (gsl_odeiv_evolve * @var{e})
+This function resets the evolution function @var{e}. It should be used
+whenever the next use of @var{e} will not be a continuation of a
+previous step.
+@end deftypefun
+
+@deftypefun void gsl_odeiv_evolve_free (gsl_odeiv_evolve * @var{e})
+This function frees all the memory associated with the evolution function
+@var{e}.
+@end deftypefun
+
+@node ODE Example programs
+@section Examples
+@cindex Van der Pol oscillator, example
+The following program solves the second-order nonlinear Van der Pol
+oscillator equation,
+@tex
+\beforedisplay
+$$
+x''(t) + \mu x'(t) (x(t)^2 - 1) + x(t) = 0
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x''(t) + \mu x'(t) (x(t)^2 - 1) + x(t) = 0
+@end example
+
+@end ifinfo
+@noindent
+This can be converted into a first order system suitable for use with
+the routines described in this chapter by introducing a separate
+variable for the velocity, @math{y = x'(t)},
+@tex
+\beforedisplay
+$$
+\eqalign{
+x' &= y\cr
+y' &= -x + \mu y (1-x^2)
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x' = y
+y' = -x + \mu y (1-x^2)
+@end example
+
+@end ifinfo
+@noindent
+The program begins by defining functions for these derivatives and
+their Jacobian,
+
+@example
+@verbatiminclude examples/ode-initval.c
+@end example
+
+@noindent
+For functions with multiple parameters, the appropriate information
+can be passed in through the @var{params} argument using a pointer to
+a struct.
+
+The main loop of the program evolves the solution from @math{(y, y') =
+(1, 0)} at @math{t=0} to @math{t=100}. The step-size @math{h} is
+automatically adjusted by the controller to maintain an absolute
+accuracy of @c{$10^{-6}$}
+@math{10^@{-6@}} in the function values @var{y}.
+
+@iftex
+@sp 1
+@center @image{vdp,3.4in}
+@center Numerical solution of the Van der Pol oscillator equation
+@center using Prince-Dormand 8th order Runge-Kutta.
+@end iftex
+
+@noindent
+To obtain the values at regular intervals, rather than the variable
+spacings chosen by the control function, the main loop can be modified
+to advance the solution from one point to the next. For example, the
+following main loop prints the solution at the fixed points @math{t = 0,
+1, 2, \dots, 100},
+
+@example
+ for (i = 1; i <= 100; i++)
+ @{
+ double ti = i * t1 / 100.0;
+
+ while (t < ti)
+ @{
+ gsl_odeiv_evolve_apply (e, c, s,
+ &sys,
+ &t, ti, &h,
+ y);
+ @}
+
+ printf ("%.5e %.5e %.5e\n", t, y[0], y[1]);
+ @}
+@end example
+
+@noindent
+It is also possible to work with a non-adaptive integrator, using only
+the stepping function itself. The following program uses the @code{rk4}
+fourth-order Runge-Kutta stepping function with a fixed stepsize of
+0.01,
+
+@example
+@verbatiminclude examples/odefixed.c
+@end example
+
+@noindent
+The derivatives must be initialized for the starting point @math{t=0}
+before the first step is taken. Subsequent steps use the output
+derivatives @var{dydt_out} as inputs to the next step by copying their
+values into @var{dydt_in}.
+
+@node ODE References and Further Reading
+@section References and Further Reading
+
+Many of the basic Runge-Kutta formulas can be found in the Handbook of
+Mathematical Functions,
+
+@itemize @asis
+@item
+Abramowitz & Stegun (eds.), @cite{Handbook of Mathematical Functions},
+Section 25.5.
+@end itemize
+
+@noindent
+The implicit Bulirsch-Stoer algorithm @code{bsimp} is described in the
+following paper,
+
+@itemize @asis
+@item
+G. Bader and P. Deuflhard, ``A Semi-Implicit Mid-Point Rule for Stiff
+Systems of Ordinary Differential Equations.'', Numer.@: Math.@: 41, 373--398,
+1983.
+@end itemize
diff --git a/gsl-1.9/doc/permutation.texi b/gsl-1.9/doc/permutation.texi
new file mode 100644
index 0000000..4ae54b9
--- /dev/null
+++ b/gsl-1.9/doc/permutation.texi
@@ -0,0 +1,377 @@
+@cindex permutations
+
+This chapter describes functions for creating and manipulating
+permutations. A permutation @math{p} is represented by an array of
+@math{n} integers in the range 0 to @math{n-1}, where each value
+@math{p_i} occurs once and only once. The application of a permutation
+@math{p} to a vector @math{v} yields a new vector @math{v'} where
+@c{$v'_i = v_{p_i}$}
+@math{v'_i = v_@{p_i@}}.
+For example, the array @math{(0,1,3,2)} represents a permutation
+which exchanges the last two elements of a four element vector.
+The corresponding identity permutation is @math{(0,1,2,3)}.
+
+Note that the permutations produced by the linear algebra routines
+correspond to the exchange of matrix columns, and so should be considered
+as applying to row-vectors in the form @math{v' = v P} rather than
+column-vectors, when permuting the elements of a vector.
+
+The functions described in this chapter are defined in the header file
+@file{gsl_permutation.h}.
+
+@menu
+* The Permutation struct::
+* Permutation allocation::
+* Accessing permutation elements::
+* Permutation properties::
+* Permutation functions::
+* Applying Permutations::
+* Reading and writing permutations::
+* Permutations in cyclic form::
+* Permutation Examples::
+* Permutation References and Further Reading::
+@end menu
+
+@node The Permutation struct
+@section The Permutation struct
+
+A permutation is defined by a structure containing two components, the size
+of the permutation and a pointer to the permutation array. The elements
+of the permutation array are all of type @code{size_t}. The
+@code{gsl_permutation} structure looks like this,
+
+@example
+typedef struct
+@{
+ size_t size;
+ size_t * data;
+@} gsl_permutation;
+@end example
+@comment
+
+@noindent
+
+@node Permutation allocation
+@section Permutation allocation
+
+@deftypefun {gsl_permutation *} gsl_permutation_alloc (size_t @var{n})
+This function allocates memory for a new permutation of size @var{n}.
+The permutation is not initialized and its elements are undefined. Use
+the function @code{gsl_permutation_calloc} if you want to create a
+permutation which is initialized to the identity. A null pointer is
+returned if insufficient memory is available to create the permutation.
+@end deftypefun
+
+@deftypefun {gsl_permutation *} gsl_permutation_calloc (size_t @var{n})
+This function allocates memory for a new permutation of size @var{n} and
+initializes it to the identity. A null pointer is returned if
+insufficient memory is available to create the permutation.
+@end deftypefun
+
+@deftypefun void gsl_permutation_init (gsl_permutation * @var{p})
+@cindex identity permutation
+This function initializes the permutation @var{p} to the identity, i.e.
+@math{(0,1,2,@dots{},n-1)}.
+@end deftypefun
+
+@deftypefun void gsl_permutation_free (gsl_permutation * @var{p})
+This function frees all the memory used by the permutation @var{p}.
+@end deftypefun
+
+@deftypefun int gsl_permutation_memcpy (gsl_permutation * @var{dest}, const gsl_permutation * @var{src})
+This function copies the elements of the permutation @var{src} into the
+permutation @var{dest}. The two permutations must have the same size.
+@end deftypefun
+
+@node Accessing permutation elements
+@section Accessing permutation elements
+
+The following functions can be used to access and manipulate
+permutations.
+
+@deftypefun size_t gsl_permutation_get (const gsl_permutation * @var{p}, const size_t @var{i})
+This function returns the value of the @var{i}-th element of the
+permutation @var{p}. If @var{i} lies outside the allowed range of 0 to
+@math{@var{n}-1} then the error handler is invoked and 0 is returned.
+@end deftypefun
+
+@deftypefun int gsl_permutation_swap (gsl_permutation * @var{p}, const size_t @var{i}, const size_t @var{j})
+@cindex exchanging permutation elements
+@cindex swapping permutation elements
+This function exchanges the @var{i}-th and @var{j}-th elements of the
+permutation @var{p}.
+@end deftypefun
+
+@node Permutation properties
+@section Permutation properties
+
+@deftypefun size_t gsl_permutation_size (const gsl_permutation * @var{p})
+This function returns the size of the permutation @var{p}.
+@end deftypefun
+
+@deftypefun {size_t *} gsl_permutation_data (const gsl_permutation * @var{p})
+This function returns a pointer to the array of elements in the
+permutation @var{p}.
+@end deftypefun
+
+@deftypefun int gsl_permutation_valid (gsl_permutation * @var{p})
+@cindex checking permutation for validity
+@cindex testing permutation for validity
+This function checks that the permutation @var{p} is valid. The @var{n}
+elements should contain each of the numbers 0 to @math{@var{n}-1} once and only
+once.
+@end deftypefun
+
+@node Permutation functions
+@section Permutation functions
+
+@deftypefun void gsl_permutation_reverse (gsl_permutation * @var{p})
+@cindex reversing a permutation
+This function reverses the elements of the permutation @var{p}.
+@end deftypefun
+
+@deftypefun int gsl_permutation_inverse (gsl_permutation * @var{inv}, const gsl_permutation * @var{p})
+@cindex inverting a permutation
+This function computes the inverse of the permutation @var{p}, storing
+the result in @var{inv}.
+@end deftypefun
+
+@deftypefun int gsl_permutation_next (gsl_permutation * @var{p})
+@cindex iterating through permutations
+This function advances the permutation @var{p} to the next permutation
+in lexicographic order and returns @code{GSL_SUCCESS}. If no further
+permutations are available it returns @code{GSL_FAILURE} and leaves
+@var{p} unmodified. Starting with the identity permutation and
+repeatedly applying this function will iterate through all possible
+permutations of a given order.
+@end deftypefun
+
+@deftypefun int gsl_permutation_prev (gsl_permutation * @var{p})
+This function steps backwards from the permutation @var{p} to the
+previous permutation in lexicographic order, returning
+@code{GSL_SUCCESS}. If no previous permutation is available it returns
+@code{GSL_FAILURE} and leaves @var{p} unmodified.
+@end deftypefun
+
+@node Applying Permutations
+@section Applying Permutations
+
+@deftypefun int gsl_permute (const size_t * @var{p}, double * @var{data}, size_t @var{stride}, size_t @var{n})
+This function applies the permutation @var{p} to the array @var{data} of
+size @var{n} with stride @var{stride}.
+@end deftypefun
+
+@deftypefun int gsl_permute_inverse (const size_t * @var{p}, double * @var{data}, size_t @var{stride}, size_t @var{n})
+This function applies the inverse of the permutation @var{p} to the
+array @var{data} of size @var{n} with stride @var{stride}.
+@end deftypefun
+
+@deftypefun int gsl_permute_vector (const gsl_permutation * @var{p}, gsl_vector * @var{v})
+This function applies the permutation @var{p} to the elements of the
+vector @var{v}, considered as a row-vector acted on by a permutation
+matrix from the right, @math{v' = v P}. The @math{j}-th column of the
+permutation matrix @math{P} is given by the @math{p_j}-th column of the
+identity matrix. The permutation @var{p} and the vector @var{v} must
+have the same length.
+@end deftypefun
+
+@deftypefun int gsl_permute_vector_inverse (const gsl_permutation * @var{p}, gsl_vector * @var{v})
+This function applies the inverse of the permutation @var{p} to the
+elements of the vector @var{v}, considered as a row-vector acted on by
+an inverse permutation matrix from the right, @math{v' = v P^T}. Note
+that for permutation matrices the inverse is the same as the transpose.
+The @math{j}-th column of the permutation matrix @math{P} is given by
+the @math{p_j}-th column of the identity matrix. The permutation @var{p}
+and the vector @var{v} must have the same length.
+@end deftypefun
+
+@deftypefun int gsl_permutation_mul (gsl_permutation * @var{p}, const gsl_permutation * @var{pa}, const gsl_permutation * @var{pb})
+This function combines the two permutations @var{pa} and @var{pb} into a
+single permutation @var{p}, where @math{p = pa . pb}. The permutation
+@var{p} is equivalent to applying @math{pb} first and then @var{pa}.
+@end deftypefun
+
+@node Reading and writing permutations
+@section Reading and writing permutations
+
+The library provides functions for reading and writing permutations to a
+file as binary data or formatted text.
+
+@deftypefun int gsl_permutation_fwrite (FILE * @var{stream}, const gsl_permutation * @var{p})
+This function writes the elements of the permutation @var{p} to the
+stream @var{stream} in binary format. The function returns
+@code{GSL_EFAILED} if there was a problem writing to the file. Since the
+data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_permutation_fread (FILE * @var{stream}, gsl_permutation * @var{p})
+This function reads into the permutation @var{p} from the open stream
+@var{stream} in binary format. The permutation @var{p} must be
+preallocated with the correct length since the function uses the size of
+@var{p} to determine how many bytes to read. The function returns
+@code{GSL_EFAILED} if there was a problem reading from the file. The
+data is assumed to have been written in the native binary format on the
+same architecture.
+@end deftypefun
+
+@deftypefun int gsl_permutation_fprintf (FILE * @var{stream}, const gsl_permutation * @var{p}, const char * @var{format})
+This function writes the elements of the permutation @var{p}
+line-by-line to the stream @var{stream} using the format specifier
+@var{format}, which should be suitable for a type of @var{size_t}. On a
+GNU system the type modifier @code{Z} represents @code{size_t}, so
+@code{"%Zu\n"} is a suitable format. The function returns
+@code{GSL_EFAILED} if there was a problem writing to the file.
+@end deftypefun
+
+@deftypefun int gsl_permutation_fscanf (FILE * @var{stream}, gsl_permutation * @var{p})
+This function reads formatted data from the stream @var{stream} into the
+permutation @var{p}. The permutation @var{p} must be preallocated with
+the correct length since the function uses the size of @var{p} to
+determine how many numbers to read. The function returns
+@code{GSL_EFAILED} if there was a problem reading from the file.
+@end deftypefun
+
+@node Permutations in cyclic form
+@section Permutations in cyclic form
+
+A permutation can be represented in both @dfn{linear} and @dfn{cyclic}
+notations. The functions described in this section convert between the
+two forms. The linear notation is an index mapping, and has already
+been described above. The cyclic notation expresses a permutation as a
+series of circular rearrangements of groups of elements, or
+@dfn{cycles}.
+
+For example, under the cycle (1 2 3), 1 is replaced by 2, 2 is replaced
+by 3 and 3 is replaced by 1 in a circular fashion. Cycles of different
+sets of elements can be combined independently, for example (1 2 3) (4
+5) combines the cycle (1 2 3) with the cycle (4 5), which is an exchange
+of elements 4 and 5. A cycle of length one represents an element which
+is unchanged by the permutation and is referred to as a @dfn{singleton}.
+
+It can be shown that every permutation can be decomposed into
+combinations of cycles. The decomposition is not unique, but can always
+be rearranged into a standard @dfn{canonical form} by a reordering of
+elements. The library uses the canonical form defined in Knuth's
+@cite{Art of Computer Programming} (Vol 1, 3rd Ed, 1997) Section 1.3.3,
+p.178.
+
+The procedure for obtaining the canonical form given by Knuth is,
+
+@enumerate
+@item Write all singleton cycles explicitly
+@item Within each cycle, put the smallest number first
+@item Order the cycles in decreasing order of the first number in the cycle.
+@end enumerate
+
+@noindent
+For example, the linear representation (2 4 3 0 1) is represented as (1
+4) (0 2 3) in canonical form. The permutation corresponds to an
+exchange of elements 1 and 4, and rotation of elements 0, 2 and 3.
+
+The important property of the canonical form is that it can be
+reconstructed from the contents of each cycle without the brackets. In
+addition, by removing the brackets it can be considered as a linear
+representation of a different permutation. In the example given above
+the permutation (2 4 3 0 1) would become (1 4 0 2 3). This mapping has
+many applications in the theory of permutations.
+
+@deftypefun int gsl_permutation_linear_to_canonical (gsl_permutation * @var{q}, const gsl_permutation * @var{p})
+This function computes the canonical form of the permutation @var{p} and
+stores it in the output argument @var{q}.
+@end deftypefun
+
+@deftypefun int gsl_permutation_canonical_to_linear (gsl_permutation * @var{p}, const gsl_permutation * @var{q})
+This function converts a permutation @var{q} in canonical form back into
+linear form storing it in the output argument @var{p}.
+@end deftypefun
+
+@deftypefun size_t gsl_permutation_inversions (const gsl_permutation * @var{p})
+This function counts the number of inversions in the permutation
+@var{p}. An inversion is any pair of elements that are not in order.
+For example, the permutation 2031 has three inversions, corresponding to
+the pairs (2,0) (2,1) and (3,1). The identity permutation has no
+inversions.
+@end deftypefun
+
+@deftypefun size_t gsl_permutation_linear_cycles (const gsl_permutation * @var{p})
+This function counts the number of cycles in the permutation @var{p}, given in linear form.
+@end deftypefun
+
+@deftypefun size_t gsl_permutation_canonical_cycles (const gsl_permutation * @var{q})
+This function counts the number of cycles in the permutation @var{q}, given in canonical form.
+@end deftypefun
+
+
+@node Permutation Examples
+@section Examples
+The example program below creates a random permutation (by shuffling the
+elements of the identity) and finds its inverse.
+
+@example
+@verbatiminclude examples/permshuffle.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+$ ./a.out
+initial permutation: 0 1 2 3 4 5 6 7 8 9
+ random permutation: 1 3 5 2 7 6 0 4 9 8
+inverse permutation: 6 0 3 1 7 2 5 4 9 8
+@end example
+
+@noindent
+The random permutation @code{p[i]} and its inverse @code{q[i]} are
+related through the identity @code{p[q[i]] = i}, which can be verified
+from the output.
+
+The next example program steps forwards through all possible third order
+permutations, starting from the identity,
+
+@example
+@verbatiminclude examples/permseq.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+$ ./a.out
+ 0 1 2
+ 0 2 1
+ 1 0 2
+ 1 2 0
+ 2 0 1
+ 2 1 0
+@end example
+
+@noindent
+The permutations are generated in lexicographic order. To reverse the
+sequence, begin with the final permutation (which is the reverse of the
+identity) and replace @code{gsl_permutation_next} with
+@code{gsl_permutation_prev}.
+
+@node Permutation References and Further Reading
+@section References and Further Reading
+
+The subject of permutations is covered extensively in Knuth's
+@cite{Sorting and Searching},
+
+@itemize @asis
+@item
+Donald E. Knuth, @cite{The Art of Computer Programming: Sorting and
+Searching} (Vol 3, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850.
+@end itemize
+
+@noindent
+For the definition of the @dfn{canonical form} see,
+
+@itemize @asis
+@item
+Donald E. Knuth, @cite{The Art of Computer Programming: Fundamental
+Algorithms} (Vol 1, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850.
+Section 1.3.3, @cite{An Unusual Correspondence}, p.178--179.
+@end itemize
+
diff --git a/gsl-1.9/doc/poly.texi b/gsl-1.9/doc/poly.texi
new file mode 100644
index 0000000..531f77a
--- /dev/null
+++ b/gsl-1.9/doc/poly.texi
@@ -0,0 +1,302 @@
+@cindex polynomials, roots of
+
+This chapter describes functions for evaluating and solving polynomials.
+There are routines for finding real and complex roots of quadratic and
+cubic equations using analytic methods. An iterative polynomial solver
+is also available for finding the roots of general polynomials with real
+coefficients (of any order). The functions are declared in the header
+file @code{gsl_poly.h}.
+
+@menu
+* Polynomial Evaluation::
+* Divided Difference Representation of Polynomials::
+* Quadratic Equations::
+* Cubic Equations::
+* General Polynomial Equations::
+* Roots of Polynomials Examples::
+* Roots of Polynomials References and Further Reading::
+@end menu
+
+@node Polynomial Evaluation
+@section Polynomial Evaluation
+@cindex polynomial evaluation
+@cindex evaluation of polynomials
+
+@deftypefun double gsl_poly_eval (const double @var{c}[], const int @var{len}, const double @var{x})
+This function evaluates the polynomial
+@c{$c[0] + c[1] x + c[2] x^2 + \dots + c[len-1] x^{len-1}$}
+@math{c[0] + c[1] x + c[2] x^2 + \dots + c[len-1] x^@{len-1@}} using
+Horner's method for stability. The function is inlined when possible.
+@end deftypefun
+
+@node Divided Difference Representation of Polynomials
+@section Divided Difference Representation of Polynomials
+@cindex divided differences, polynomials
+@cindex evaluation of polynomials, in divided difference form
+
+The functions described here manipulate polynomials stored in Newton's
+divided-difference representation. The use of divided-differences is
+described in Abramowitz & Stegun sections 25.1.4 and 25.2.26.
+
+@deftypefun int gsl_poly_dd_init (double @var{dd}[], const double @var{xa}[], const double @var{ya}[], size_t @var{size})
+This function computes a divided-difference representation of the
+interpolating polynomial for the points (@var{xa}, @var{ya}) stored in
+the arrays @var{xa} and @var{ya} of length @var{size}. On output the
+divided-differences of (@var{xa},@var{ya}) are stored in the array
+@var{dd}, also of length @var{size}.
+@end deftypefun
+
+@deftypefun double gsl_poly_dd_eval (const double @var{dd}[], const double @var{xa}[], const size_t @var{size}, const double @var{x})
+This function evaluates the polynomial stored in divided-difference form
+in the arrays @var{dd} and @var{xa} of length @var{size} at the point
+@var{x}.
+@end deftypefun
+
+@deftypefun int gsl_poly_dd_taylor (double @var{c}[], double @var{xp}, const double @var{dd}[], const double @var{xa}[], size_t @var{size}, double @var{w}[])
+This function converts the divided-difference representation of a
+polynomial to a Taylor expansion. The divided-difference representation
+is supplied in the arrays @var{dd} and @var{xa} of length @var{size}.
+On output the Taylor coefficients of the polynomial expanded about the
+point @var{xp} are stored in the array @var{c} also of length
+@var{size}. A workspace of length @var{size} must be provided in the
+array @var{w}.
+@end deftypefun
+
+@node Quadratic Equations
+@section Quadratic Equations
+@cindex quadratic equation, solving
+
+@deftypefun int gsl_poly_solve_quadratic (double @var{a}, double @var{b}, double @var{c}, double * @var{x0}, double * @var{x1})
+This function finds the real roots of the quadratic equation,
+@tex
+\beforedisplay
+$$
+a x^2 + b x + c = 0
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+a x^2 + b x + c = 0
+@end example
+
+@end ifinfo
+@noindent
+The number of real roots (either zero, one or two) is returned, and
+their locations are stored in @var{x0} and @var{x1}. If no real roots
+are found then @var{x0} and @var{x1} are not modified. If one real root
+is found (i.e. if @math{a=0}) then it is stored in @var{x0}. When two
+real roots are found they are stored in @var{x0} and @var{x1} in
+ascending order. The case of coincident roots is not considered
+special. For example @math{(x-1)^2=0} will have two roots, which happen
+to have exactly equal values.
+
+The number of roots found depends on the sign of the discriminant
+@math{b^2 - 4 a c}. This will be subject to rounding and cancellation
+errors when computed in double precision, and will also be subject to
+errors if the coefficients of the polynomial are inexact. These errors
+may cause a discrete change in the number of roots. However, for
+polynomials with small integer coefficients the discriminant can always
+be computed exactly.
+
+@end deftypefun
+
+@deftypefun int gsl_poly_complex_solve_quadratic (double @var{a}, double @var{b}, double @var{c}, gsl_complex * @var{z0}, gsl_complex * @var{z1})
+
+This function finds the complex roots of the quadratic equation,
+@tex
+\beforedisplay
+$$
+a z^2 + b z + c = 0
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+a z^2 + b z + c = 0
+@end example
+
+@end ifinfo
+@noindent
+The number of complex roots is returned (either one or two) and the
+locations of the roots are stored in @var{z0} and @var{z1}. The roots
+are returned in ascending order, sorted first by their real components
+and then by their imaginary components. If only one real root is found
+(i.e. if @math{a=0}) then it is stored in @var{z0}.
+
+@end deftypefun
+
+
+@node Cubic Equations
+@section Cubic Equations
+@cindex cubic equation, solving
+
+@deftypefun int gsl_poly_solve_cubic (double @var{a}, double @var{b}, double @var{c}, double * @var{x0}, double * @var{x1}, double * @var{x2})
+
+This function finds the real roots of the cubic equation,
+@tex
+\beforedisplay
+$$
+x^3 + a x^2 + b x + c = 0
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x^3 + a x^2 + b x + c = 0
+@end example
+
+@end ifinfo
+@noindent
+with a leading coefficient of unity. The number of real roots (either
+one or three) is returned, and their locations are stored in @var{x0},
+@var{x1} and @var{x2}. If one real root is found then only @var{x0} is
+modified. When three real roots are found they are stored in @var{x0},
+@var{x1} and @var{x2} in ascending order. The case of coincident roots
+is not considered special. For example, the equation @math{(x-1)^3=0}
+will have three roots with exactly equal values.
+
+@end deftypefun
+
+@deftypefun int gsl_poly_complex_solve_cubic (double @var{a}, double @var{b}, double @var{c}, gsl_complex * @var{z0}, gsl_complex * @var{z1}, gsl_complex * @var{z2})
+
+This function finds the complex roots of the cubic equation,
+@tex
+\beforedisplay
+$$
+z^3 + a z^2 + b z + c = 0
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+z^3 + a z^2 + b z + c = 0
+@end example
+
+@end ifinfo
+@noindent
+The number of complex roots is returned (always three) and the locations
+of the roots are stored in @var{z0}, @var{z1} and @var{z2}. The roots
+are returned in ascending order, sorted first by their real components
+and then by their imaginary components.
+
+@end deftypefun
+
+
+@node General Polynomial Equations
+@section General Polynomial Equations
+@cindex general polynomial equations, solving
+
+The roots of polynomial equations cannot be found analytically beyond
+the special cases of the quadratic, cubic and quartic equation. The
+algorithm described in this section uses an iterative method to find the
+approximate locations of roots of higher order polynomials.
+
+@deftypefun {gsl_poly_complex_workspace *} gsl_poly_complex_workspace_alloc (size_t @var{n})
+This function allocates space for a @code{gsl_poly_complex_workspace}
+struct and a workspace suitable for solving a polynomial with @var{n}
+coefficients using the routine @code{gsl_poly_complex_solve}.
+
+The function returns a pointer to the newly allocated
+@code{gsl_poly_complex_workspace} if no errors were detected, and a null
+pointer in the case of error.
+@end deftypefun
+
+@deftypefun void gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * @var{w})
+This function frees all the memory associated with the workspace
+@var{w}.
+@end deftypefun
+
+@deftypefun int gsl_poly_complex_solve (const double * @var{a}, size_t @var{n}, gsl_poly_complex_workspace * @var{w}, gsl_complex_packed_ptr @var{z})
+This function computes the roots of the general polynomial
+@c{$P(x) = a_0 + a_1 x + a_2 x^2 + ... + a_{n-1} x^{n-1}$}
+@math{P(x) = a_0 + a_1 x + a_2 x^2 + ... + a_@{n-1@} x^@{n-1@}} using
+balanced-QR reduction of the companion matrix. The parameter @var{n}
+specifies the length of the coefficient array. The coefficient of the
+highest order term must be non-zero. The function requires a workspace
+@var{w} of the appropriate size. The @math{n-1} roots are returned in
+the packed complex array @var{z} of length @math{2(n-1)}, alternating
+real and imaginary parts.
+
+The function returns @code{GSL_SUCCESS} if all the roots are found. If
+the QR reduction does not converge, the error handler is invoked with
+an error code of @code{GSL_EFAILED}. Note that due to finite precision,
+roots of higher multiplicity are returned as a cluster of simple roots
+with reduced accuracy. The solution of polynomials with higher-order
+roots requires specialized algorithms that take the multiplicity
+structure into account (see e.g. Z. Zeng, Algorithm 835, ACM
+Transactions on Mathematical Software, Volume 30, Issue 2 (2004), pp
+218--236).
+@end deftypefun
+
+@node Roots of Polynomials Examples
+@section Examples
+
+To demonstrate the use of the general polynomial solver we will take the
+polynomial @math{P(x) = x^5 - 1} which has the following roots,
+@tex
+\beforedisplay
+$$
+1, e^{2\pi i /5}, e^{4\pi i /5}, e^{6\pi i /5}, e^{8\pi i /5}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+1, e^@{2\pi i /5@}, e^@{4\pi i /5@}, e^@{6\pi i /5@}, e^@{8\pi i /5@}
+@end example
+
+@end ifinfo
+@noindent
+The following program will find these roots.
+
+@example
+@verbatiminclude examples/polyroots.c
+@end example
+
+@noindent
+The output of the program is,
+
+@example
+$ ./a.out
+@verbatiminclude examples/polyroots.out
+@end example
+
+@noindent
+which agrees with the analytic result, @math{z_n = \exp(2 \pi n i/5)}.
+
+@node Roots of Polynomials References and Further Reading
+@section References and Further Reading
+
+The balanced-QR method and its error analysis are described in the
+following papers,
+
+@itemize @asis
+@item
+R.S. Martin, G. Peters and J.H. Wilkinson, ``The QR Algorithm for Real
+Hessenberg Matrices'', @cite{Numerische Mathematik}, 14 (1970), 219--231.
+
+@item
+B.N. Parlett and C. Reinsch, ``Balancing a Matrix for Calculation of
+Eigenvalues and Eigenvectors'', @cite{Numerische Mathematik}, 13 (1969),
+293--304.
+
+@item
+A. Edelman and H. Murakami, ``Polynomial roots from companion matrix
+eigenvalues'', @cite{Mathematics of Computation}, Vol.@: 64, No.@: 210
+(1995), 763--776.
+@end itemize
+
+@noindent
+The formulas for divided differences are given in Abramowitz and Stegun,
+
+@itemize @asis
+@item
+Abramowitz and Stegun, @cite{Handbook of Mathematical Functions},
+Sections 25.1.4 and 25.2.26.
+@end itemize
diff --git a/gsl-1.9/doc/qrng.eps b/gsl-1.9/doc/qrng.eps
new file mode 100644
index 0000000..2fa00f1
--- /dev/null
+++ b/gsl-1.9/doc/qrng.eps
@@ -0,0 +1,1420 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: tmp.ps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Tue Apr 17 17:18:33 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 302 302
+%%Orientation: Portrait
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+420 280 M
+63 0 V
+4529 0 R
+-63 0 V
+336 280 M
+(0) Rshow
+420 739 M
+63 0 V
+4529 0 R
+-63 0 V
+336 739 M
+(0.1) Rshow
+420 1198 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.2) Rshow
+420 1658 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.3) Rshow
+420 2117 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.4) Rshow
+420 2576 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.5) Rshow
+420 3035 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.6) Rshow
+420 3494 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.7) Rshow
+420 3954 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.8) Rshow
+420 4413 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(0.9) Rshow
+420 4872 M
+63 0 V
+4529 0 R
+-63 0 V
+-4613 0 R
+(1) Rshow
+420 280 M
+0 63 V
+0 4529 R
+0 -63 V
+420 140 M
+(0) Cshow
+879 280 M
+0 63 V
+0 4529 R
+0 -63 V
+879 140 M
+(0.1) Cshow
+1338 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.2) Cshow
+1798 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.3) Cshow
+2257 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.4) Cshow
+2716 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.5) Cshow
+3175 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.6) Cshow
+3634 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.7) Cshow
+4094 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.8) Cshow
+4553 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(0.9) Cshow
+5012 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(1) Cshow
+1.000 UL
+LTb
+420 280 M
+4592 0 V
+0 4592 V
+-4592 0 V
+420 280 L
+1.000 UP
+1.000 UL
+LT0
+2716 2576 Pls
+3864 1428 Pls
+1568 3724 Pls
+2142 2002 Pls
+4438 4298 Pls
+3290 854 Pls
+994 3150 Pls
+1281 1715 Pls
+3577 4011 Pls
+4725 567 Pls
+2429 2863 Pls
+1855 1141 Pls
+4151 3437 Pls
+3003 2289 Pls
+707 4585 Pls
+851 2433 Pls
+3147 4729 Pls
+4295 1285 Pls
+1999 3581 Pls
+2573 711 Pls
+4869 3007 Pls
+3721 1859 Pls
+1425 4155 Pls
+1138 998 Pls
+3434 3294 Pls
+4582 2146 Pls
+2286 4442 Pls
+1712 1572 Pls
+4008 3868 Pls
+2860 424 Pls
+564 2720 Pls
+635 1500 Pls
+2931 3796 Pls
+4079 352 Pls
+1783 2648 Pls
+2357 926 Pls
+4653 3222 Pls
+3505 2074 Pls
+1209 4370 Pls
+1496 639 Pls
+3792 2935 Pls
+4940 1787 Pls
+2644 4083 Pls
+2070 2361 Pls
+4366 4657 Pls
+3218 1213 Pls
+922 3509 Pls
+779 1356 Pls
+3075 3652 Pls
+4223 2504 Pls
+1927 4800 Pls
+2501 1930 Pls
+4797 4226 Pls
+3649 782 Pls
+1353 3078 Pls
+1066 2217 Pls
+3362 4513 Pls
+4510 1069 Pls
+2214 3365 Pls
+1640 495 Pls
+3936 2791 Pls
+2788 1643 Pls
+492 3939 Pls
+528 2110 Pls
+2824 4406 Pls
+3972 962 Pls
+1676 3258 Pls
+2250 388 Pls
+4546 2684 Pls
+3398 1536 Pls
+1102 3832 Pls
+1389 1249 Pls
+3685 3545 Pls
+4833 2397 Pls
+2537 4693 Pls
+1963 1823 Pls
+4259 4119 Pls
+3111 675 Pls
+815 2971 Pls
+958 818 Pls
+3254 3114 Pls
+4402 1966 Pls
+2106 4262 Pls
+2680 2540 Pls
+4976 4836 Pls
+3828 1392 Pls
+1532 3688 Pls
+1245 1679 Pls
+3541 3975 Pls
+4689 531 Pls
+2393 2827 Pls
+1819 1105 Pls
+4115 3401 Pls
+2967 2253 Pls
+671 4549 Pls
+599 890 Pls
+2895 3186 Pls
+4043 2038 Pls
+1747 4334 Pls
+2321 1464 Pls
+4617 3760 Pls
+3469 316 Pls
+1173 2612 Pls
+1460 2325 Pls
+3756 4621 Pls
+4904 1177 Pls
+2608 3473 Pls
+2034 603 Pls
+4330 2899 Pls
+3182 1751 Pls
+886 4047 Pls
+743 1894 Pls
+3039 4190 Pls
+4187 746 Pls
+1891 3042 Pls
+2465 1320 Pls
+4761 3616 Pls
+3613 2468 Pls
+1317 4764 Pls
+1030 459 Pls
+3326 2755 Pls
+4474 1607 Pls
+2178 3903 Pls
+1604 2181 Pls
+3900 4477 Pls
+2752 1033 Pls
+456 3329 Pls
+474 1805 Pls
+2770 4101 Pls
+3918 657 Pls
+1622 2953 Pls
+2196 1231 Pls
+4492 3527 Pls
+3344 2379 Pls
+1048 4675 Pls
+1335 370 Pls
+3631 2666 Pls
+4779 1518 Pls
+2483 3814 Pls
+1909 2092 Pls
+4205 4388 Pls
+3057 944 Pls
+761 3240 Pls
+904 1087 Pls
+3200 3383 Pls
+4348 2235 Pls
+2052 4531 Pls
+2626 1661 Pls
+4922 3957 Pls
+3774 513 Pls
+1478 2809 Pls
+1191 2522 Pls
+3487 4818 Pls
+4635 1374 Pls
+2339 3670 Pls
+1765 800 Pls
+4061 3096 Pls
+2913 1948 Pls
+617 4244 Pls
+689 585 Pls
+2985 2881 Pls
+4133 1733 Pls
+1837 4029 Pls
+2411 2307 Pls
+4707 4603 Pls
+3559 1159 Pls
+1263 3455 Pls
+1550 1446 Pls
+3846 3742 Pls
+4994 298 Pls
+2698 2594 Pls
+2124 872 Pls
+4420 3168 Pls
+3272 2020 Pls
+976 4316 Pls
+833 2163 Pls
+3129 4459 Pls
+4277 1015 Pls
+1981 3311 Pls
+2555 441 Pls
+4851 2737 Pls
+3703 1589 Pls
+1407 3885 Pls
+1120 1302 Pls
+3416 3598 Pls
+4564 2450 Pls
+2268 4746 Pls
+1694 1876 Pls
+3990 4172 Pls
+2842 728 Pls
+546 3024 Pls
+510 1195 Pls
+2806 3491 Pls
+3954 2343 Pls
+1658 4639 Pls
+2232 1769 Pls
+4528 4065 Pls
+3380 621 Pls
+1084 2917 Pls
+1371 2056 Pls
+3667 4352 Pls
+4815 908 Pls
+2519 3204 Pls
+1945 334 Pls
+4241 2630 Pls
+3093 1482 Pls
+797 3778 Pls
+940 1625 Pls
+3236 3921 Pls
+4384 477 Pls
+2088 2773 Pls
+2662 1051 Pls
+4958 3347 Pls
+3810 2199 Pls
+1514 4495 Pls
+1227 764 Pls
+3523 3060 Pls
+4671 1912 Pls
+2375 4208 Pls
+1801 2486 Pls
+4097 4782 Pls
+2949 1338 Pls
+653 3634 Pls
+581 2415 Pls
+2877 4711 Pls
+4025 1267 Pls
+1729 3563 Pls
+2303 693 Pls
+4599 2989 Pls
+3451 1841 Pls
+1155 4137 Pls
+1442 980 Pls
+3738 3276 Pls
+4886 2128 Pls
+2590 4424 Pls
+2016 1554 Pls
+4312 3850 Pls
+3164 406 Pls
+868 2702 Pls
+725 549 Pls
+3021 2845 Pls
+4169 1697 Pls
+1873 3993 Pls
+2447 2271 Pls
+4743 4567 Pls
+3595 1123 Pls
+1299 3419 Pls
+1012 1984 Pls
+3308 4280 Pls
+4456 836 Pls
+2160 3132 Pls
+1586 1410 Pls
+3882 3706 Pls
+2734 2558 Pls
+438 4854 Pls
+447 2567 Pls
+2743 4863 Pls
+3891 1419 Pls
+1595 3715 Pls
+2169 845 Pls
+4465 3141 Pls
+3317 1993 Pls
+1021 4289 Pls
+1308 1132 Pls
+3604 3428 Pls
+4752 2280 Pls
+2456 4576 Pls
+1882 1706 Pls
+4178 4002 Pls
+3030 558 Pls
+734 2854 Pls
+877 415 Pls
+3173 2711 Pls
+4321 1563 Pls
+2025 3859 Pls
+2599 2137 Pls
+4895 4433 Pls
+3747 989 Pls
+1451 3285 Pls
+1164 1850 Pls
+3460 4146 Pls
+4608 702 Pls
+2312 2998 Pls
+1738 1276 Pls
+4034 3572 Pls
+2886 2424 Pls
+590 4720 Pls
+662 1347 Pls
+2958 3643 Pls
+4106 2495 Pls
+1810 4791 Pls
+2384 1921 Pls
+4680 4217 Pls
+3532 773 Pls
+1236 3069 Pls
+1523 2208 Pls
+3819 4504 Pls
+4967 1060 Pls
+2671 3356 Pls
+2097 486 Pls
+4393 2782 Pls
+3245 1634 Pls
+949 3930 Pls
+806 1491 Pls
+3102 3787 Pls
+4250 343 Pls
+1954 2639 Pls
+2528 917 Pls
+4824 3213 Pls
+3676 2065 Pls
+1380 4361 Pls
+1093 630 Pls
+3389 2926 Pls
+4537 1778 Pls
+2241 4074 Pls
+1667 2352 Pls
+3963 4648 Pls
+2815 1204 Pls
+519 3500 Pls
+555 737 Pls
+2851 3033 Pls
+3999 1885 Pls
+1703 4181 Pls
+2277 2459 Pls
+4573 4755 Pls
+3425 1311 Pls
+1129 3607 Pls
+1416 1598 Pls
+3712 3894 Pls
+4860 450 Pls
+2564 2746 Pls
+1990 1024 Pls
+4286 3320 Pls
+3138 2172 Pls
+842 4468 Pls
+985 2029 Pls
+3281 4325 Pls
+4429 881 Pls
+2133 3177 Pls
+2707 307 Pls
+5003 2603 Pls
+3855 1455 Pls
+1559 3751 Pls
+1272 1168 Pls
+3568 3464 Pls
+4716 2316 Pls
+2420 4612 Pls
+1846 1742 Pls
+4142 4038 Pls
+2994 594 Pls
+698 2890 Pls
+626 1957 Pls
+2922 4253 Pls
+4070 809 Pls
+1774 3105 Pls
+2348 1383 Pls
+4644 3679 Pls
+3496 2531 Pls
+1200 4827 Pls
+1487 522 Pls
+3783 2818 Pls
+4931 1670 Pls
+2635 3966 Pls
+2061 2244 Pls
+4357 4540 Pls
+3209 1096 Pls
+913 3392 Pls
+770 953 Pls
+3066 3249 Pls
+4214 2101 Pls
+1918 4397 Pls
+2492 1527 Pls
+4788 3823 Pls
+3640 379 Pls
+1344 2675 Pls
+1057 2388 Pls
+3353 4684 Pls
+4501 1240 Pls
+2205 3536 Pls
+1631 666 Pls
+3927 2962 Pls
+2779 1814 Pls
+483 4110 Pls
+465 1042 Pls
+2761 3338 Pls
+3909 2190 Pls
+1613 4486 Pls
+2187 1616 Pls
+4483 3912 Pls
+3335 468 Pls
+1039 2764 Pls
+1326 2477 Pls
+3622 4773 Pls
+4770 1329 Pls
+2474 3625 Pls
+1900 755 Pls
+4196 3051 Pls
+3048 1903 Pls
+752 4199 Pls
+895 1760 Pls
+3191 4056 Pls
+4339 612 Pls
+2043 2908 Pls
+2617 1186 Pls
+4913 3482 Pls
+3765 2334 Pls
+1469 4630 Pls
+1182 325 Pls
+3478 2621 Pls
+4626 1473 Pls
+2330 3769 Pls
+1756 2047 Pls
+4052 4343 Pls
+2904 899 Pls
+608 3195 Pls
+680 2262 Pls
+2976 4558 Pls
+4124 1114 Pls
+1828 3410 Pls
+2402 540 Pls
+4698 2836 Pls
+3550 1688 Pls
+1254 3984 Pls
+1541 1401 Pls
+3837 3697 Pls
+4985 2549 Pls
+2689 4845 Pls
+2115 1975 Pls
+4411 4271 Pls
+3263 827 Pls
+967 3123 Pls
+824 684 Pls
+3120 2980 Pls
+4268 1832 Pls
+1972 4128 Pls
+2546 2406 Pls
+4842 4702 Pls
+3694 1258 Pls
+1398 3554 Pls
+1111 1545 Pls
+3407 3841 Pls
+4555 397 Pls
+2259 2693 Pls
+1685 971 Pls
+3981 3267 Pls
+2833 2119 Pls
+537 4415 Pls
+501 1652 Pls
+2797 3948 Pls
+3945 504 Pls
+1649 2800 Pls
+2223 1078 Pls
+4519 3374 Pls
+3371 2226 Pls
+1075 4522 Pls
+1362 791 Pls
+3658 3087 Pls
+4806 1939 Pls
+2510 4235 Pls
+1936 2513 Pls
+4232 4809 Pls
+3084 1365 Pls
+788 3661 Pls
+931 1222 Pls
+3227 3518 Pls
+4375 2370 Pls
+2079 4666 Pls
+2653 1796 Pls
+4949 4092 Pls
+3801 648 Pls
+1505 2944 Pls
+1218 2083 Pls
+3514 4379 Pls
+4662 935 Pls
+2366 3231 Pls
+1792 361 Pls
+4088 2657 Pls
+2940 1509 Pls
+644 3805 Pls
+572 432 Pls
+2868 2728 Pls
+4016 1580 Pls
+1720 3876 Pls
+2294 2154 Pls
+4590 4450 Pls
+3442 1006 Pls
+1146 3302 Pls
+1433 1867 Pls
+3729 4163 Pls
+4877 719 Pls
+2581 3015 Pls
+2007 1293 Pls
+4303 3589 Pls
+3155 2441 Pls
+859 4737 Pls
+716 2298 Pls
+3012 4594 Pls
+4160 1150 Pls
+1864 3446 Pls
+2438 576 Pls
+4734 2872 Pls
+3586 1724 Pls
+1290 4020 Pls
+1003 863 Pls
+3299 3159 Pls
+4447 2011 Pls
+2151 4307 Pls
+1577 1437 Pls
+3873 3733 Pls
+2725 289 Pls
+429 2585 Pls
+433 1433 Pls
+2729 3729 Pls
+3877 285 Pls
+1581 2581 Pls
+2155 859 Pls
+4451 3155 Pls
+3303 2007 Pls
+1007 4303 Pls
+1294 572 Pls
+3590 2868 Pls
+4738 1720 Pls
+2442 4016 Pls
+1868 2294 Pls
+4164 4590 Pls
+3016 1146 Pls
+720 3442 Pls
+864 1289 Pls
+3160 3585 Pls
+4308 2437 Pls
+2012 4733 Pls
+2586 1863 Pls
+4882 4159 Pls
+3734 715 Pls
+1438 3011 Pls
+1151 2150 Pls
+3447 4446 Pls
+4595 1002 Pls
+2299 3298 Pls
+1725 428 Pls
+4021 2724 Pls
+2873 1576 Pls
+577 3872 Pls
+649 356 Pls
+2945 2652 Pls
+4093 1504 Pls
+1797 3800 Pls
+2371 2078 Pls
+4667 4374 Pls
+3519 930 Pls
+1223 3226 Pls
+1510 1791 Pls
+3806 4087 Pls
+4954 643 Pls
+2658 2939 Pls
+2084 1217 Pls
+4380 3513 Pls
+3232 2365 Pls
+936 4661 Pls
+792 2509 Pls
+3088 4805 Pls
+4236 1361 Pls
+1940 3657 Pls
+2514 787 Pls
+4810 3083 Pls
+3662 1935 Pls
+1366 4231 Pls
+1079 1074 Pls
+3375 3370 Pls
+4523 2222 Pls
+2227 4518 Pls
+1653 1648 Pls
+3949 3944 Pls
+2801 500 Pls
+505 2796 Pls
+541 966 Pls
+2837 3262 Pls
+3985 2114 Pls
+1689 4410 Pls
+2263 1540 Pls
+4559 3836 Pls
+3411 392 Pls
+1115 2688 Pls
+1402 2401 Pls
+3698 4697 Pls
+4846 1253 Pls
+2550 3549 Pls
+1976 679 Pls
+4272 2975 Pls
+3124 1827 Pls
+828 4123 Pls
+972 1971 Pls
+3268 4267 Pls
+4416 823 Pls
+2120 3119 Pls
+2694 1397 Pls
+4990 3693 Pls
+3842 2545 Pls
+1546 4841 Pls
+1259 536 Pls
+3555 2832 Pls
+4703 1684 Pls
+2407 3980 Pls
+1833 2258 Pls
+4129 4554 Pls
+2981 1110 Pls
+685 3406 Pls
+613 2042 Pls
+2909 4338 Pls
+4057 894 Pls
+1761 3190 Pls
+2335 320 Pls
+4631 2616 Pls
+3483 1468 Pls
+1187 3764 Pls
+1474 1181 Pls
+3770 3477 Pls
+4918 2329 Pls
+2622 4625 Pls
+2048 1755 Pls
+4344 4051 Pls
+3196 607 Pls
+900 2903 Pls
+756 751 Pls
+3052 3047 Pls
+4200 1899 Pls
+1904 4195 Pls
+2478 2473 Pls
+4774 4769 Pls
+3626 1325 Pls
+1330 3621 Pls
+1043 1612 Pls
+3339 3908 Pls
+4487 464 Pls
+2191 2760 Pls
+1617 1038 Pls
+3913 3334 Pls
+2765 2186 Pls
+469 4482 Pls
+487 661 Pls
+2783 2957 Pls
+3931 1809 Pls
+1635 4105 Pls
+2209 2383 Pls
+4505 4679 Pls
+3357 1235 Pls
+1061 3531 Pls
+1348 1522 Pls
+3644 3818 Pls
+4792 374 Pls
+2496 2670 Pls
+1922 948 Pls
+4218 3244 Pls
+3070 2096 Pls
+774 4392 Pls
+918 2240 Pls
+3214 4536 Pls
+4362 1092 Pls
+2066 3388 Pls
+2640 518 Pls
+4936 2814 Pls
+3788 1666 Pls
+1492 3962 Pls
+1205 1379 Pls
+3501 3675 Pls
+4649 2527 Pls
+2353 4823 Pls
+1779 1953 Pls
+4075 4249 Pls
+2927 805 Pls
+631 3101 Pls
+702 1737 Pls
+2998 4033 Pls
+4146 589 Pls
+1850 2885 Pls
+2424 1163 Pls
+4720 3459 Pls
+3572 2311 Pls
+1276 4607 Pls
+1563 302 Pls
+3859 2598 Pls
+5007 1450 Pls
+2711 3746 Pls
+2137 2024 Pls
+4433 4320 Pls
+3285 876 Pls
+989 3172 Pls
+846 1020 Pls
+3142 3316 Pls
+4290 2168 Pls
+1994 4464 Pls
+2568 1594 Pls
+4864 3890 Pls
+3716 446 Pls
+1420 2742 Pls
+1133 2455 Pls
+3429 4751 Pls
+4577 1307 Pls
+2281 3603 Pls
+1707 733 Pls
+4003 3029 Pls
+2855 1881 Pls
+559 4177 Pls
+523 2347 Pls
+2819 4643 Pls
+3967 1199 Pls
+1671 3495 Pls
+2245 625 Pls
+4541 2921 Pls
+3393 1773 Pls
+1097 4069 Pls
+1384 912 Pls
+3680 3208 Pls
+4828 2060 Pls
+2532 4356 Pls
+1958 1486 Pls
+4254 3782 Pls
+3106 338 Pls
+810 2634 Pls
+954 482 Pls
+3250 2778 Pls
+4398 1630 Pls
+2102 3926 Pls
+2676 2204 Pls
+4972 4500 Pls
+3824 1056 Pls
+1528 3352 Pls
+1241 1917 Pls
+3537 4213 Pls
+4685 769 Pls
+2389 3065 Pls
+1815 1343 Pls
+4111 3639 Pls
+2963 2491 Pls
+667 4787 Pls
+595 1271 Pls
+2891 3567 Pls
+4039 2419 Pls
+1743 4715 Pls
+2317 1845 Pls
+4613 4141 Pls
+3465 697 Pls
+1169 2993 Pls
+1456 2132 Pls
+3752 4428 Pls
+4900 984 Pls
+2604 3280 Pls
+2030 410 Pls
+4326 2706 Pls
+3178 1558 Pls
+882 3854 Pls
+738 1702 Pls
+3034 3998 Pls
+4182 554 Pls
+1886 2850 Pls
+2460 1128 Pls
+4756 3424 Pls
+3608 2276 Pls
+1312 4572 Pls
+1025 841 Pls
+3321 3137 Pls
+4469 1989 Pls
+2173 4285 Pls
+1599 2563 Pls
+3895 4859 Pls
+2747 1415 Pls
+451 3711 Pls
+442 1423 Pls
+2738 3719 Pls
+3886 2571 Pls
+1590 4867 Pls
+2164 1997 Pls
+4460 4293 Pls
+3312 849 Pls
+1016 3145 Pls
+1303 2284 Pls
+3599 4580 Pls
+4747 1136 Pls
+2451 3432 Pls
+1877 562 Pls
+4173 2858 Pls
+3025 1710 Pls
+729 4006 Pls
+873 1567 Pls
+3169 3863 Pls
+4317 419 Pls
+2021 2715 Pls
+2595 993 Pls
+4891 3289 Pls
+3743 2141 Pls
+1447 4437 Pls
+1160 706 Pls
+3456 3002 Pls
+4604 1854 Pls
+2308 4150 Pls
+1734 2428 Pls
+4030 4724 Pls
+2882 1280 Pls
+586 3576 Pls
+658 2500 Pls
+2954 4796 Pls
+4102 1352 Pls
+1806 3648 Pls
+2380 778 Pls
+4676 3074 Pls
+3528 1926 Pls
+1232 4222 Pls
+1519 1065 Pls
+3815 3361 Pls
+4963 2213 Pls
+2667 4509 Pls
+2093 1639 Pls
+4389 3935 Pls
+3241 491 Pls
+945 2787 Pls
+801 347 Pls
+3097 2643 Pls
+4245 1495 Pls
+1949 3791 Pls
+2523 2069 Pls
+4819 4365 Pls
+3671 921 Pls
+1375 3217 Pls
+1088 1782 Pls
+3384 4078 Pls
+4532 634 Pls
+2236 2930 Pls
+1662 1208 Pls
+3958 3504 Pls
+2810 2356 Pls
+514 4652 Pls
+550 1890 Pls
+2846 4186 Pls
+3994 742 Pls
+1698 3038 Pls
+2272 1316 Pls
+4568 3612 Pls
+3420 2464 Pls
+1124 4760 Pls
+1411 455 Pls
+3707 2751 Pls
+4855 1603 Pls
+2559 3899 Pls
+1985 2177 Pls
+4281 4473 Pls
+3133 1029 Pls
+837 3325 Pls
+981 885 Pls
+3277 3181 Pls
+4425 2033 Pls
+2129 4329 Pls
+2703 1459 Pls
+4999 3755 Pls
+3851 311 Pls
+1555 2607 Pls
+1268 2320 Pls
+3564 4616 Pls
+4712 1172 Pls
+2416 3468 Pls
+1842 598 Pls
+4138 2894 Pls
+2990 1746 Pls
+694 4042 Pls
+622 814 Pls
+2918 3110 Pls
+4066 1962 Pls
+1770 4258 Pls
+2344 2536 Pls
+4640 4832 Pls
+3492 1388 Pls
+1196 3684 Pls
+1483 1675 Pls
+3779 3971 Pls
+4927 527 Pls
+2631 2823 Pls
+2057 1101 Pls
+4353 3397 Pls
+3205 2249 Pls
+909 4545 Pls
+765 2105 Pls
+3061 4401 Pls
+4209 957 Pls
+1913 3253 Pls
+2487 383 Pls
+4783 2679 Pls
+3635 1531 Pls
+1339 3827 Pls
+1052 1244 Pls
+3348 3540 Pls
+4496 2392 Pls
+2200 4688 Pls
+1626 1818 Pls
+3922 4114 Pls
+2774 670 Pls
+478 2966 Pls
+460 2195 Pls
+2756 4491 Pls
+3904 1047 Pls
+1608 3343 Pls
+2182 473 Pls
+4478 2769 Pls
+3330 1621 Pls
+1034 3917 Pls
+1321 1334 Pls
+3617 3630 Pls
+4765 2482 Pls
+2469 4778 Pls
+1895 1908 Pls
+4191 4204 Pls
+3043 760 Pls
+747 3056 Pls
+891 616 Pls
+3187 2912 Pls
+4335 1764 Pls
+2039 4060 Pls
+2613 2338 Pls
+4909 4634 Pls
+3761 1190 Pls
+1465 3486 Pls
+1178 1477 Pls
+3474 3773 Pls
+4622 329 Pls
+2326 2625 Pls
+1752 903 Pls
+4048 3199 Pls
+2900 2051 Pls
+604 4347 Pls
+676 1119 Pls
+2972 3415 Pls
+4120 2267 Pls
+1824 4563 Pls
+2398 1693 Pls
+4694 3989 Pls
+3546 545 Pls
+1250 2841 Pls
+1537 2554 Pls
+3833 4850 Pls
+4981 1406 Pls
+2685 3702 Pls
+2111 832 Pls
+4407 3128 Pls
+3259 1980 Pls
+963 4276 Pls
+819 1836 Pls
+3115 4132 Pls
+4263 688 Pls
+1967 2984 Pls
+2541 1262 Pls
+4837 3558 Pls
+3689 2410 Pls
+1393 4706 Pls
+1106 401 Pls
+3402 2697 Pls
+4550 1549 Pls
+2254 3845 Pls
+1680 2123 Pls
+3976 4419 Pls
+2828 975 Pls
+532 3271 Pls
+496 509 Pls
+2792 2805 Pls
+3940 1657 Pls
+1644 3953 Pls
+2218 2231 Pls
+4514 4527 Pls
+3366 1083 Pls
+1070 3379 Pls
+1357 1944 Pls
+3653 4240 Pls
+4801 796 Pls
+2505 3092 Pls
+1931 1370 Pls
+4227 3666 Pls
+3079 2518 Pls
+783 4814 Pls
+927 2374 Pls
+3223 4670 Pls
+4371 1226 Pls
+2075 3522 Pls
+2649 652 Pls
+4945 2948 Pls
+3797 1800 Pls
+1501 4096 Pls
+1214 939 Pls
+3510 3235 Pls
+4658 2087 Pls
+2362 4383 Pls
+1788 1513 Pls
+4084 3809 Pls
+2936 365 Pls
+640 2661 Pls
+568 1585 Pls
+2864 3881 Pls
+4012 437 Pls
+1716 2733 Pls
+2290 1011 Pls
+4586 3307 Pls
+3438 2159 Pls
+1142 4455 Pls
+1429 724 Pls
+3725 3020 Pls
+4873 1872 Pls
+2577 4168 Pls
+2003 2446 Pls
+4299 4742 Pls
+3151 1298 Pls
+855 3594 Pls
+712 1154 Pls
+3008 3450 Pls
+4156 2302 Pls
+1860 4598 Pls
+2434 1728 Pls
+4730 4024 Pls
+3582 580 Pls
+1286 2876 Pls
+999 2015 Pls
+3295 4311 Pls
+4443 867 Pls
+2147 3163 Pls
+1573 293 Pls
+3869 2589 Pls
+2721 1441 Pls
+425 3737 Pls
+427 2009 Pls
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/gsl-1.9/doc/qrng.texi b/gsl-1.9/doc/qrng.texi
new file mode 100644
index 0000000..c9dc739
--- /dev/null
+++ b/gsl-1.9/doc/qrng.texi
@@ -0,0 +1,163 @@
+@cindex quasi-random sequences
+@cindex low discrepancy sequences
+@cindex Sobol sequence
+@cindex Niederreiter sequence
+This chapter describes functions for generating quasi-random sequences
+in arbitrary dimensions. A quasi-random sequence progressively covers a
+@math{d}-dimensional space with a set of points that are uniformly
+distributed. Quasi-random sequences are also known as low-discrepancy
+sequences. The quasi-random sequence generators use an interface that
+is similar to the interface for random number generators, except that
+seeding is not required---each generator produces a single sequence.
+
+The functions described in this section are declared in the header file
+@file{gsl_qrng.h}.
+
+@menu
+* Quasi-random number generator initialization::
+* Sampling from a quasi-random number generator::
+* Auxiliary quasi-random number generator functions::
+* Saving and resorting quasi-random number generator state::
+* Quasi-random number generator algorithms::
+* Quasi-random number generator examples::
+* Quasi-random number references::
+@end menu
+
+@node Quasi-random number generator initialization
+@section Quasi-random number generator initialization
+
+@deftypefun {gsl_qrng *} gsl_qrng_alloc (const gsl_qrng_type * @var{T}, unsigned int @var{d})
+This function returns a pointer to a newly-created instance of a
+quasi-random sequence generator of type @var{T} and dimension @var{d}.
+If there is insufficient memory to create the generator then the
+function returns a null pointer and the error handler is invoked with an
+error code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun void gsl_qrng_free (gsl_qrng * @var{q})
+This function frees all the memory associated with the generator
+@var{q}.
+@end deftypefun
+
+@deftypefun void gsl_qrng_init (gsl_qrng * @var{q})
+This function reinitializes the generator @var{q} to its starting point.
+Note that quasi-random sequences do not use a seed and always produce
+the same set of values.
+@end deftypefun
+
+@node Sampling from a quasi-random number generator
+@section Sampling from a quasi-random number generator
+
+@deftypefun int gsl_qrng_get (const gsl_qrng * @var{q}, double @var{x}[])
+This function stores the next point from the sequence generator @var{q}
+in the array @var{x}. The space available for @var{x} must match the
+dimension of the generator. The point @var{x} will lie in the range
+@math{0 < x_i < 1} for each @math{x_i}.
+@end deftypefun
+
+@node Auxiliary quasi-random number generator functions
+@section Auxiliary quasi-random number generator functions
+
+@deftypefun {const char *} gsl_qrng_name (const gsl_qrng * @var{q})
+This function returns a pointer to the name of the generator.
+@end deftypefun
+
+@deftypefun size_t gsl_qrng_size (const gsl_qrng * @var{q})
+@deftypefunx {void *} gsl_qrng_state (const gsl_qrng * @var{q})
+These functions return a pointer to the state of generator @var{r} and
+its size. You can use this information to access the state directly. For
+example, the following code will write the state of a generator to a
+stream,
+
+@example
+void * state = gsl_qrng_state (q);
+size_t n = gsl_qrng_size (q);
+fwrite (state, n, 1, stream);
+@end example
+@end deftypefun
+
+
+@node Saving and resorting quasi-random number generator state
+@section Saving and resorting quasi-random number generator state
+
+@deftypefun int gsl_qrng_memcpy (gsl_qrng * @var{dest}, const gsl_qrng * @var{src})
+This function copies the quasi-random sequence generator @var{src} into the
+pre-existing generator @var{dest}, making @var{dest} into an exact copy
+of @var{src}. The two generators must be of the same type.
+@end deftypefun
+
+@deftypefun {gsl_qrng *} gsl_qrng_clone (const gsl_qrng * @var{q})
+This function returns a pointer to a newly created generator which is an
+exact copy of the generator @var{q}.
+@end deftypefun
+
+@node Quasi-random number generator algorithms
+@section Quasi-random number generator algorithms
+
+The following quasi-random sequence algorithms are available,
+
+@deffn {Generator} gsl_qrng_niederreiter_2
+This generator uses the algorithm described in Bratley, Fox,
+Niederreiter, @cite{ACM Trans. Model. Comp. Sim.} 2, 195 (1992). It is
+valid up to 12 dimensions.
+@end deffn
+
+@deffn {Generator} gsl_qrng_sobol
+This generator uses the Sobol sequence described in Antonov, Saleev,
+@cite{USSR Comput. Maths. Math. Phys.} 19, 252 (1980). It is valid up to
+40 dimensions.
+@end deffn
+
+@node Quasi-random number generator examples
+@section Examples
+
+The following program prints the first 1024 points of the 2-dimensional
+Sobol sequence.
+
+@example
+@verbatiminclude examples/qrng.c
+@end example
+
+@noindent
+Here is the output from the program,
+
+@example
+$ ./a.out
+0.50000 0.50000
+0.75000 0.25000
+0.25000 0.75000
+0.37500 0.37500
+0.87500 0.87500
+0.62500 0.12500
+0.12500 0.62500
+....
+@end example
+
+@noindent
+It can be seen that successive points progressively fill-in the spaces
+between previous points.
+
+@iftex
+@need 4000
+The following plot shows the distribution in the x-y plane of the first
+1024 points from the Sobol sequence,
+@sp 1
+@center @image{qrng,3.4in}
+@sp 1
+@center Distribution of the first 1024 points
+@center from the quasi-random Sobol sequence
+@end iftex
+
+@node Quasi-random number references
+@section References
+
+The implementations of the quasi-random sequence routines are based on
+the algorithms described in the following paper,
+
+@itemize @asis
+P. Bratley and B.L. Fox and H. Niederreiter, ``Algorithm 738: Programs
+to Generate Niederreiter's Low-discrepancy Sequences'', @cite{ACM
+Transactions on Mathematical Software}, Vol.@: 20, No.@: 4, December, 1994,
+p.@: 494--495.
+@end itemize
+
diff --git a/gsl-1.9/doc/rand-bernoulli.tex b/gsl-1.9/doc/rand-bernoulli.tex
new file mode 100644
index 0000000..6e086e7
--- /dev/null
+++ b/gsl-1.9/doc/rand-bernoulli.tex
@@ -0,0 +1,695 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-bernoulli.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+742 63 R
+0 -31 V
+0.500 UL
+LTb
+1966 331 M
+0 -63 V
+742 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 855 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1494 855 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 697 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2517 1552 M
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$p=0.7$}}%
+\put(1965,2226){\cjust{Bernoulli Trial}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(2708,200){\cjust{ 1}}%
+\put(1223,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-beta.tex b/gsl-1.9/doc/rand-beta.tex
new file mode 100644
index 0000000..3104ef1
--- /dev/null
+++ b/gsl-1.9/doc/rand-beta.tex
@@ -0,0 +1,1335 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-beta.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+381 331 M
+-31 0 V
+0.500 UL
+LTb
+381 767 M
+-31 0 V
+0.500 UL
+LTb
+381 1204 M
+-31 0 V
+0.500 UL
+LTb
+381 1640 M
+-31 0 V
+0.500 UL
+LTb
+381 2076 M
+-31 0 V
+0.500 UL
+LTb
+381 331 M
+0 -31 V
+0.500 UL
+LTb
+1148 331 M
+0 -31 V
+0.500 UL
+LTb
+1916 331 M
+0 -31 V
+0.500 UL
+LTb
+2683 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+381 331 M
+3069 0 V
+0 1745 V
+-3069 0 V
+381 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+381 331 M
+10 9 V
+11 8 V
+10 9 V
+10 9 V
+10 8 V
+11 8 V
+10 9 V
+10 8 V
+10 8 V
+11 9 V
+10 8 V
+10 8 V
+10 8 V
+11 8 V
+10 8 V
+10 8 V
+10 7 V
+11 8 V
+10 8 V
+10 7 V
+11 8 V
+10 7 V
+10 8 V
+10 7 V
+11 8 V
+10 7 V
+10 7 V
+10 7 V
+11 7 V
+10 7 V
+10 7 V
+10 7 V
+11 7 V
+10 7 V
+10 7 V
+11 6 V
+10 7 V
+10 6 V
+10 7 V
+11 6 V
+10 7 V
+10 6 V
+10 6 V
+11 7 V
+10 6 V
+10 6 V
+10 6 V
+11 6 V
+10 6 V
+10 6 V
+10 5 V
+11 6 V
+10 6 V
+10 5 V
+11 6 V
+10 5 V
+10 6 V
+10 5 V
+11 6 V
+10 5 V
+10 5 V
+10 5 V
+11 5 V
+10 5 V
+10 5 V
+10 5 V
+11 5 V
+10 5 V
+10 5 V
+10 4 V
+11 5 V
+10 5 V
+10 4 V
+11 4 V
+10 5 V
+10 4 V
+10 4 V
+11 5 V
+10 4 V
+10 4 V
+10 4 V
+11 4 V
+10 4 V
+10 4 V
+10 4 V
+11 3 V
+10 4 V
+10 4 V
+11 3 V
+10 4 V
+10 3 V
+10 4 V
+11 3 V
+10 3 V
+10 3 V
+10 4 V
+11 3 V
+10 3 V
+10 3 V
+10 3 V
+11 3 V
+10 2 V
+stroke
+1428 919 M
+10 3 V
+10 3 V
+11 2 V
+10 3 V
+10 2 V
+11 3 V
+10 2 V
+10 3 V
+10 2 V
+11 2 V
+10 2 V
+10 2 V
+10 3 V
+11 2 V
+10 1 V
+10 2 V
+10 2 V
+11 2 V
+10 2 V
+10 1 V
+10 2 V
+11 1 V
+10 2 V
+10 1 V
+11 2 V
+10 1 V
+10 1 V
+10 1 V
+11 1 V
+10 1 V
+10 1 V
+10 1 V
+11 1 V
+10 1 V
+10 1 V
+10 1 V
+11 0 V
+10 1 V
+10 0 V
+11 1 V
+10 0 V
+10 0 V
+10 1 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 -1 V
+10 0 V
+10 0 V
+11 -1 V
+10 0 V
+10 -1 V
+11 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+11 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+11 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+11 -2 V
+10 -1 V
+10 -2 V
+11 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+11 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+11 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+11 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+11 -3 V
+10 -2 V
+10 -3 V
+11 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+11 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+11 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+stroke
+2495 892 M
+11 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+11 -3 V
+10 -4 V
+10 -4 V
+11 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+11 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+11 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+11 -4 V
+10 -4 V
+10 -5 V
+11 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+11 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+11 -6 V
+10 -5 V
+10 -6 V
+11 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+11 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+11 -7 V
+10 -6 V
+10 -6 V
+10 -7 V
+11 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+11 -6 V
+10 -7 V
+10 -7 V
+11 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+11 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+11 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+11 -8 V
+10 -7 V
+10 -8 V
+11 -8 V
+10 -7 V
+10 -8 V
+10 -8 V
+11 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+11 -9 V
+10 -8 V
+10 -8 V
+10 -9 V
+11 -8 V
+10 -8 V
+10 -9 V
+10 -9 V
+11 -8 V
+10 -9 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+381 331 M
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 1 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 1 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 1 V
+10 0 V
+11 0 V
+10 0 V
+10 1 V
+10 0 V
+11 0 V
+10 0 V
+10 1 V
+10 0 V
+11 1 V
+10 0 V
+10 0 V
+10 1 V
+11 0 V
+10 1 V
+10 0 V
+10 1 V
+11 0 V
+10 1 V
+10 0 V
+11 1 V
+10 0 V
+10 1 V
+10 1 V
+11 0 V
+10 1 V
+10 1 V
+10 1 V
+11 0 V
+10 1 V
+10 1 V
+10 1 V
+11 1 V
+10 1 V
+10 0 V
+10 1 V
+11 1 V
+10 1 V
+10 1 V
+11 1 V
+10 2 V
+10 1 V
+10 1 V
+11 1 V
+10 1 V
+10 1 V
+10 2 V
+11 1 V
+10 1 V
+10 2 V
+10 1 V
+11 2 V
+10 1 V
+10 1 V
+11 2 V
+10 2 V
+10 1 V
+10 2 V
+11 2 V
+10 1 V
+10 2 V
+10 2 V
+11 2 V
+10 1 V
+10 2 V
+10 2 V
+11 2 V
+10 2 V
+stroke
+1428 400 M
+10 2 V
+10 2 V
+11 3 V
+10 2 V
+10 2 V
+11 2 V
+10 3 V
+10 2 V
+10 2 V
+11 3 V
+10 2 V
+10 3 V
+10 2 V
+11 3 V
+10 3 V
+10 2 V
+10 3 V
+11 3 V
+10 3 V
+10 3 V
+10 2 V
+11 3 V
+10 4 V
+10 3 V
+11 3 V
+10 3 V
+10 3 V
+10 3 V
+11 4 V
+10 3 V
+10 4 V
+10 3 V
+11 4 V
+10 3 V
+10 4 V
+10 4 V
+11 3 V
+10 4 V
+10 4 V
+11 4 V
+10 4 V
+10 4 V
+10 4 V
+11 4 V
+10 4 V
+10 5 V
+10 4 V
+11 4 V
+10 5 V
+10 4 V
+10 5 V
+11 4 V
+10 5 V
+10 5 V
+10 5 V
+11 4 V
+10 5 V
+10 5 V
+11 5 V
+10 6 V
+10 5 V
+10 5 V
+11 5 V
+10 6 V
+10 5 V
+10 6 V
+11 5 V
+10 6 V
+10 5 V
+10 6 V
+11 6 V
+10 6 V
+10 6 V
+11 6 V
+10 6 V
+10 6 V
+10 6 V
+11 7 V
+10 6 V
+10 7 V
+10 6 V
+11 7 V
+10 6 V
+10 7 V
+10 7 V
+11 7 V
+10 7 V
+10 7 V
+10 7 V
+11 7 V
+10 7 V
+10 8 V
+11 7 V
+10 8 V
+10 7 V
+10 8 V
+11 7 V
+10 8 V
+10 8 V
+10 8 V
+11 8 V
+10 8 V
+10 8 V
+10 9 V
+stroke
+2495 902 M
+11 8 V
+10 8 V
+10 9 V
+10 9 V
+11 8 V
+10 9 V
+10 9 V
+11 9 V
+10 9 V
+10 9 V
+10 9 V
+11 9 V
+10 10 V
+10 9 V
+10 10 V
+11 9 V
+10 10 V
+10 10 V
+10 10 V
+11 10 V
+10 10 V
+10 10 V
+11 10 V
+10 10 V
+10 11 V
+10 10 V
+11 11 V
+10 10 V
+10 11 V
+10 11 V
+11 11 V
+10 11 V
+10 11 V
+10 11 V
+11 12 V
+10 11 V
+10 12 V
+10 11 V
+11 12 V
+10 12 V
+10 12 V
+11 12 V
+10 12 V
+10 12 V
+10 12 V
+11 13 V
+10 12 V
+10 13 V
+10 12 V
+11 13 V
+10 13 V
+10 13 V
+10 13 V
+11 13 V
+10 14 V
+10 13 V
+10 14 V
+11 13 V
+10 14 V
+10 14 V
+11 14 V
+10 14 V
+10 14 V
+10 14 V
+11 14 V
+10 15 V
+10 14 V
+10 15 V
+11 15 V
+10 14 V
+10 15 V
+10 16 V
+11 15 V
+10 15 V
+10 15 V
+11 16 V
+10 16 V
+10 15 V
+10 16 V
+11 16 V
+10 16 V
+10 16 V
+10 17 V
+11 16 V
+10 17 V
+10 16 V
+10 17 V
+11 17 V
+10 17 V
+10 17 V
+10 17 V
+11 18 V
+10 17 V
+1.000 UL
+LT2
+LTb
+LT2
+3087 1763 M
+263 0 V
+381 2076 M
+10 -17 V
+11 -18 V
+10 -17 V
+10 -17 V
+10 -17 V
+11 -17 V
+10 -17 V
+10 -16 V
+10 -17 V
+11 -16 V
+10 -17 V
+10 -16 V
+10 -16 V
+11 -16 V
+10 -16 V
+10 -15 V
+10 -16 V
+11 -16 V
+10 -15 V
+10 -15 V
+11 -15 V
+10 -16 V
+10 -15 V
+10 -14 V
+11 -15 V
+10 -15 V
+10 -14 V
+10 -15 V
+11 -14 V
+10 -14 V
+10 -14 V
+10 -14 V
+11 -14 V
+10 -14 V
+10 -14 V
+11 -13 V
+10 -14 V
+10 -13 V
+10 -14 V
+11 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+11 -13 V
+10 -12 V
+10 -13 V
+10 -12 V
+11 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+11 -12 V
+10 -12 V
+10 -12 V
+11 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+11 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+11 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+11 -11 V
+10 -10 V
+10 -11 V
+10 -10 V
+11 -10 V
+10 -10 V
+10 -10 V
+11 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+11 -9 V
+10 -10 V
+10 -9 V
+10 -10 V
+11 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+11 -9 V
+10 -9 V
+10 -9 V
+11 -8 V
+10 -9 V
+10 -9 V
+10 -8 V
+11 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+11 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+11 -7 V
+10 -8 V
+stroke
+1428 830 M
+10 -7 V
+10 -8 V
+11 -7 V
+10 -8 V
+10 -7 V
+11 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+11 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+11 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+11 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+11 -6 V
+10 -6 V
+10 -6 V
+11 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -5 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+11 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+11 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+11 -4 V
+10 -4 V
+10 -4 V
+11 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+11 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+11 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+11 -3 V
+10 -3 V
+10 -4 V
+11 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+11 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+11 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+11 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+11 -2 V
+10 -2 V
+10 -2 V
+11 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+11 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+11 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+stroke
+2495 384 M
+11 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+11 -2 V
+10 -1 V
+10 -1 V
+11 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+11 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+11 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+11 -1 V
+10 -1 V
+10 -1 V
+11 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+11 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+11 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+11 0 V
+10 -1 V
+10 -1 V
+10 0 V
+11 -1 V
+10 0 V
+10 -1 V
+11 0 V
+10 -1 V
+10 0 V
+10 -1 V
+11 0 V
+10 -1 V
+10 0 V
+10 0 V
+11 -1 V
+10 0 V
+10 -1 V
+10 0 V
+11 0 V
+10 0 V
+10 -1 V
+10 0 V
+11 0 V
+10 0 V
+10 -1 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 -1 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 -1 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+0.500 UL
+LTb
+381 331 M
+3069 0 V
+0 1745 V
+-3069 0 V
+381 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1763){\rjust{$a=1,b=4$}}%
+\put(3037,1863){\rjust{$a=4,b=1$}}%
+\put(3037,1963){\rjust{$a=2,b=2$}}%
+\put(1915,2226){\cjust{Beta Distribution}}%
+\put(1915,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 1}}%
+\put(2683,200){\cjust{ 0.75}}%
+\put(1916,200){\cjust{ 0.5}}%
+\put(1148,200){\cjust{ 0.25}}%
+\put(381,200){\cjust{ 0}}%
+\put(300,2076){\rjust{ 4}}%
+\put(300,1640){\rjust{ 3}}%
+\put(300,1204){\rjust{ 2}}%
+\put(300,767){\rjust{ 1}}%
+\put(300,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-binomial.tex b/gsl-1.9/doc/rand-binomial.tex
new file mode 100644
index 0000000..09fde3e
--- /dev/null
+++ b/gsl-1.9/doc/rand-binomial.tex
@@ -0,0 +1,774 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-binomial.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 913 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+751 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1021 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1291 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1561 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1831 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2100 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2370 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2640 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2910 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3180 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 337 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 51 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 199 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+0 426 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1464 1013 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+0 511 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 239 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -239 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -511 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2457 1013 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -426 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -199 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -51 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -6 V
+stroke
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$p=0.5,n=9$}}%
+\put(1965,2226){\cjust{Binomial Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3315,200){\cjust{ 10}}%
+\put(3045,200){\cjust{ 9}}%
+\put(2775,200){\cjust{ 8}}%
+\put(2505,200){\cjust{ 7}}%
+\put(2235,200){\cjust{ 6}}%
+\put(1966,200){\cjust{ 5}}%
+\put(1696,200){\cjust{ 4}}%
+\put(1426,200){\cjust{ 3}}%
+\put(1156,200){\cjust{ 2}}%
+\put(886,200){\cjust{ 1}}%
+\put(616,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.3}}%
+\put(400,1494){\rjust{ 0.2}}%
+\put(400,913){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-bivariate-gaussian.tex b/gsl-1.9/doc/rand-bivariate-gaussian.tex
new file mode 100644
index 0000000..45d2377
--- /dev/null
+++ b/gsl-1.9/doc/rand-bivariate-gaussian.tex
@@ -0,0 +1,1264 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(2880,2468)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-bivariate-gaussian.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 288 246
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+0.500 UL
+LTb
+879 673 M
+0 1122 V
+0.500 UL
+LTb
+2001 1795 M
+-1122 0 V
+0.500 UL
+LTb
+879 673 M
+0 -32 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+0.500 UL
+LTb
+1160 673 M
+0 -32 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+0.500 UL
+LTb
+1440 673 M
+0 -32 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+0.500 UL
+LTb
+1720 673 M
+0 -32 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+0.500 UL
+LTb
+2001 673 M
+0 -32 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+0.500 UL
+LTb
+2001 673 M
+32 0 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+2001 954 M
+32 0 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+2001 1234 M
+32 0 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+2001 1514 M
+32 0 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+2001 1795 M
+32 0 V
+0.500 UL
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+1.000 UL
+LT0
+2404 2004 M
+263 0 V
+1445 1253 M
+4 1 V
+4 1 V
+3 1 V
+4 0 V
+4 0 V
+4 -2 V
+1 -1 V
+-1 -1 V
+-4 -1 V
+-4 -2 V
+-4 -1 V
+-3 0 V
+-4 0 V
+-4 5 V
+-33 -39 R
+-1 1 V
+1 1 V
+4 1 V
+4 2 V
+4 1 V
+3 0 V
+4 0 V
+4 -5 V
+-4 -1 V
+-4 -1 V
+-3 -1 V
+-4 0 V
+-4 0 V
+-4 2 V
+1206 981 M
+-4 0 V
+-4 1 V
+349 249 R
+-4 -5 V
+-4 -4 V
+-4 -4 V
+-2 -3 V
+-1 -1 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-3 -4 V
+-4 -3 V
+-4 -4 V
+-4 -4 V
+-3 -4 V
+-3 -3 V
+-1 -1 V
+-4 -4 V
+-4 -3 V
+-3 -4 V
+-4 -4 V
+-4 -3 V
+-4 -4 V
+-3 -3 V
+-4 -4 V
+-4 -3 V
+-4 -4 V
+-1 -1 V
+-2 -3 V
+-4 -3 V
+-4 -3 V
+-4 -4 V
+-2 -3 V
+-4 -3 V
+-4 -4 V
+-4 -3 V
+-3 -3 V
+-4 -4 V
+-4 -3 V
+-3 -3 V
+-1 0 V
+-3 -4 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-2 -2 V
+-1 -1 V
+-4 -3 V
+-4 -2 V
+-4 -3 V
+-4 -3 V
+-3 -2 V
+-4 -3 V
+-4 -2 V
+-4 -3 V
+-3 -3 V
+-4 -2 V
+-4 -3 V
+-4 -2 V
+-3 -3 V
+-4 -3 V
+-1 0 V
+stroke
+1310 1022 M
+-3 -2 V
+-4 -2 V
+-3 -3 V
+-4 -2 V
+-4 -2 V
+-4 -2 V
+-3 -2 V
+-4 -2 V
+-4 -2 V
+-4 -2 V
+-3 -1 V
+-4 -2 V
+-4 -2 V
+-4 -2 V
+-3 -2 V
+-4 -1 V
+-4 -2 V
+-4 -2 V
+-3 -1 V
+-4 -2 V
+-4 -1 V
+-4 -1 V
+-3 -1 V
+-4 0 V
+-4 -1 V
+-4 0 V
+-3 0 V
+-4 1 V
+299 419 R
+4 3 V
+4 3 V
+2 2 V
+1 1 V
+4 3 V
+4 2 V
+4 3 V
+4 3 V
+3 2 V
+4 3 V
+4 2 V
+4 3 V
+3 3 V
+4 2 V
+4 3 V
+4 2 V
+3 3 V
+4 3 V
+1 0 V
+3 2 V
+4 2 V
+3 3 V
+4 2 V
+4 2 V
+4 2 V
+3 2 V
+4 2 V
+4 2 V
+4 2 V
+3 1 V
+4 2 V
+4 2 V
+4 2 V
+3 2 V
+4 1 V
+4 2 V
+4 2 V
+3 1 V
+4 2 V
+4 1 V
+4 1 V
+3 1 V
+4 0 V
+4 1 V
+4 0 V
+3 0 V
+4 -1 V
+4 0 V
+4 -1 V
+2 -1 V
+2 -3 V
+3 -11 V
+3 -25 V
+-3 -6 V
+-3 -8 V
+-4 -10 V
+-4 -12 V
+-1 -2 V
+-3 -5 V
+-4 -6 V
+-3 -6 V
+-4 -7 V
+-4 -7 V
+-3 -8 V
+-1 0 V
+-3 -5 V
+-4 -5 V
+-4 -6 V
+-4 -5 V
+-3 -6 V
+-4 -6 V
+-4 -6 V
+-4 -5 V
+-3 -4 V
+-4 -5 V
+stroke
+1618 1316 M
+-4 -5 V
+-4 -5 V
+-3 -5 V
+-4 -5 V
+-3 -4 V
+-1 -1 V
+-4 -5 V
+-3 -4 V
+-4 -5 V
+-4 -4 V
+-4 -4 V
+-3 -5 V
+-4 -5 V
+-4 -4 V
+-1 -2 V
+-3 -3 V
+-3 -4 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-3 -3 V
+1198 982 M
+-2 1 V
+-2 3 V
+-3 11 V
+-3 25 V
+3 6 V
+3 8 V
+4 10 V
+4 12 V
+1 2 V
+3 5 V
+4 6 V
+3 6 V
+4 7 V
+4 7 V
+3 8 V
+1 0 V
+3 5 V
+4 5 V
+4 6 V
+4 5 V
+3 6 V
+4 6 V
+4 6 V
+4 5 V
+3 4 V
+4 5 V
+4 5 V
+4 5 V
+3 5 V
+4 5 V
+3 4 V
+1 1 V
+4 5 V
+3 4 V
+4 5 V
+4 4 V
+4 4 V
+3 5 V
+4 5 V
+4 4 V
+1 2 V
+3 3 V
+3 4 V
+4 4 V
+4 4 V
+4 4 V
+3 3 V
+4 5 V
+4 4 V
+4 4 V
+2 3 V
+1 1 V
+4 4 V
+4 4 V
+4 4 V
+4 4 V
+3 4 V
+4 3 V
+4 4 V
+4 4 V
+3 4 V
+3 3 V
+1 1 V
+4 4 V
+4 3 V
+3 4 V
+4 4 V
+4 3 V
+4 4 V
+3 3 V
+4 4 V
+4 3 V
+4 4 V
+1 1 V
+2 3 V
+4 3 V
+4 3 V
+4 4 V
+2 3 V
+4 3 V
+4 4 V
+4 3 V
+stroke
+1453 1356 M
+3 3 V
+4 4 V
+4 3 V
+3 3 V
+1 0 V
+3 4 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 3 V
+1379 998 M
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -3 V
+-1 0 V
+-3 -3 V
+-4 -3 V
+-4 -4 V
+-3 -3 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -2 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -2 V
+-1 -1 V
+-3 -2 V
+-4 -3 V
+-3 -3 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -2 V
+-4 -3 V
+-4 -2 V
+-3 -3 V
+-4 -2 V
+-4 -3 V
+-4 -2 V
+-2 -2 V
+-1 -1 V
+-4 -3 V
+-4 -2 V
+-4 -3 V
+-3 -3 V
+-4 -2 V
+-4 -3 V
+-4 -2 V
+-3 -2 V
+-4 -3 V
+-4 -2 V
+-4 -2 V
+-3 -2 V
+-4 -2 V
+-4 -3 V
+-4 -2 V
+-3 -1 V
+-1 -1 V
+-3 -2 V
+-4 -3 V
+-4 -2 V
+-4 -2 V
+-3 -2 V
+-4 -2 V
+-4 -2 V
+-4 -2 V
+-3 -2 V
+-4 -2 V
+-4 -1 V
+-4 -2 V
+-3 -2 V
+-4 -1 V
+-4 -2 V
+-4 -2 V
+-3 -1 V
+-4 -2 V
+-4 -1 V
+-4 -2 V
+-3 -1 V
+-4 -2 V
+-4 -1 V
+-4 -1 V
+-3 -1 V
+-4 -1 V
+-4 -1 V
+-4 -1 V
+-3 0 V
+-4 -1 V
+-4 0 V
+-4 -1 V
+-3 0 V
+-4 0 V
+-4 0 V
+stroke
+1063 818 M
+-4 0 V
+-3 1 V
+-4 0 V
+-4 1 V
+-4 2 V
+-3 1 V
+-4 3 V
+675 514 R
+-4 -4 V
+-4 -5 V
+0 -1 V
+-3 -4 V
+-4 -5 V
+-4 -4 V
+-4 -5 V
+-3 -5 V
+-4 -4 V
+-4 -4 V
+-4 -5 V
+-2 -2 V
+-2 -2 V
+-3 -5 V
+-4 -5 V
+-4 -4 V
+-4 -5 V
+-3 -4 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-1 -2 V
+-2 -3 V
+-4 -4 V
+-4 -5 V
+-4 -4 V
+-3 -3 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-3 -4 V
+-3 -3 V
+-1 -1 V
+-4 -5 V
+-4 -4 V
+-3 -4 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-3 -4 V
+-4 -3 V
+-4 -4 V
+-2 -2 V
+-2 -2 V
+-3 -4 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-3 -4 V
+-4 -4 V
+-4 -3 V
+-4 -4 V
+-3 -3 V
+-3 -2 V
+-1 -2 V
+-4 -4 V
+-4 -4 V
+-4 -4 V
+-3 -4 V
+-4 -4 V
+-4 -3 V
+-4 -4 V
+-3 -3 V
+-4 -3 V
+-4 -4 V
+-4 -3 V
+-3 -4 V
+-4 -4 V
+-4 -4 V
+-4 -3 V
+-3 -4 V
+-4 -3 V
+-4 -4 V
+-4 -3 V
+-3 -3 V
+-4 -3 V
+-1 -1 V
+-3 -3 V
+-4 -4 V
+-2 -3 V
+-4 -4 V
+-4 -3 V
+-4 -3 V
+-3 -4 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+-3 -3 V
+-4 -2 V
+0 -1 V
+-4 -4 V
+-4 -3 V
+-3 -4 V
+-4 -3 V
+-4 -3 V
+-4 -3 V
+stroke
+1382 1001 M
+-3 -3 V
+291 595 R
+4 2 V
+4 3 V
+4 2 V
+3 1 V
+1 1 V
+3 2 V
+4 3 V
+4 2 V
+4 2 V
+3 2 V
+4 2 V
+4 2 V
+4 2 V
+3 2 V
+4 2 V
+4 1 V
+4 2 V
+3 2 V
+4 1 V
+4 2 V
+4 2 V
+3 1 V
+4 2 V
+4 1 V
+4 2 V
+3 1 V
+4 2 V
+4 1 V
+4 1 V
+3 1 V
+4 1 V
+4 1 V
+4 1 V
+3 0 V
+4 1 V
+4 0 V
+4 1 V
+3 0 V
+4 0 V
+4 0 V
+4 0 V
+3 -1 V
+4 0 V
+4 -1 V
+4 -2 V
+3 -1 V
+4 -3 V
+4 -2 V
+4 -10 V
+4 -15 V
+2 -14 V
+-2 -7 V
+-4 -15 V
+-3 -16 V
+-1 -2 V
+-4 -8 V
+-4 -9 V
+-3 -9 V
+-4 -10 V
+0 -1 V
+-4 -6 V
+-4 -7 V
+-3 -7 V
+-4 -7 V
+-4 -8 V
+-2 -4 V
+-2 -3 V
+-3 -6 V
+-4 -6 V
+-4 -6 V
+-4 -6 V
+-3 -6 V
+-3 -6 V
+-1 -1 V
+-4 -5 V
+-4 -6 V
+-3 -6 V
+-4 -5 V
+-4 -6 V
+-4 -5 V
+-2 -4 V
+-1 -2 V
+-4 -5 V
+-4 -5 V
+-4 -6 V
+-3 -5 V
+-4 -5 V
+-4 -5 V
+-4 -5 V
+0 -1 V
+-3 -4 V
+-4 -5 V
+-4 -5 V
+-4 -5 V
+-3 -5 V
+-4 -5 V
+-382 -30 R
+3 4 V
+4 4 V
+4 3 V
+4 4 V
+3 3 V
+stroke
+1348 1328 M
+3 2 V
+1 2 V
+4 4 V
+4 4 V
+4 4 V
+3 4 V
+4 4 V
+4 3 V
+4 4 V
+3 3 V
+4 3 V
+4 4 V
+4 3 V
+3 4 V
+4 4 V
+4 4 V
+4 3 V
+3 4 V
+4 3 V
+4 4 V
+4 3 V
+3 3 V
+4 3 V
+1 1 V
+3 3 V
+4 4 V
+2 3 V
+4 4 V
+4 3 V
+4 3 V
+3 4 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 2 V
+0 1 V
+4 4 V
+4 3 V
+3 4 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 3 V
+1 0 V
+3 3 V
+4 3 V
+4 4 V
+3 3 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 2 V
+4 3 V
+4 3 V
+3 3 V
+4 2 V
+1 1 V
+3 2 V
+4 3 V
+3 3 V
+4 3 V
+4 3 V
+4 3 V
+3 3 V
+4 2 V
+4 3 V
+4 2 V
+3 3 V
+4 2 V
+4 3 V
+4 2 V
+2 2 V
+1 1 V
+4 3 V
+4 2 V
+4 3 V
+3 3 V
+4 2 V
+4 3 V
+4 2 V
+3 2 V
+4 3 V
+4 2 V
+4 2 V
+3 2 V
+1037 826 M
+-4 2 V
+-4 10 V
+-4 15 V
+-2 14 V
+2 7 V
+4 15 V
+3 16 V
+1 2 V
+4 8 V
+4 9 V
+3 9 V
+stroke
+1044 933 M
+4 10 V
+0 1 V
+4 6 V
+4 7 V
+3 7 V
+4 7 V
+4 8 V
+2 4 V
+2 3 V
+3 6 V
+4 6 V
+4 6 V
+4 6 V
+3 6 V
+3 6 V
+1 1 V
+4 5 V
+4 6 V
+3 6 V
+4 5 V
+4 6 V
+4 5 V
+2 4 V
+1 2 V
+4 5 V
+4 5 V
+4 6 V
+3 5 V
+4 5 V
+4 5 V
+4 5 V
+0 1 V
+3 4 V
+4 5 V
+4 5 V
+4 5 V
+3 5 V
+4 5 V
+4 4 V
+4 5 V
+0 1 V
+3 4 V
+4 5 V
+4 4 V
+4 5 V
+3 5 V
+4 4 V
+4 4 V
+4 5 V
+2 2 V
+2 2 V
+3 5 V
+4 5 V
+4 4 V
+4 5 V
+3 4 V
+4 4 V
+4 4 V
+4 4 V
+1 2 V
+2 3 V
+4 4 V
+4 5 V
+4 4 V
+3 3 V
+4 4 V
+4 4 V
+4 4 V
+3 4 V
+3 3 V
+1 1 V
+4 5 V
+4 4 V
+3 4 V
+4 4 V
+4 4 V
+4 4 V
+3 4 V
+4 3 V
+4 4 V
+2 2 V
+2 2 V
+3 4 V
+4 4 V
+4 4 V
+4 4 V
+0.500 UL
+LTb
+2001 1795 M
+0 -1122 V
+0.500 UL
+LTb
+879 673 M
+1122 0 V
+LTb
+LTb
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(2313,1234){\cjust{$y$}}%
+\put(1440,361){\cjust{$x$}}%
+\put(2354,2004){\rjust{$\sigma_x=1, \sigma_y=1, \rho=0.9$}}%
+\put(1440,2267){\cjust{Bivariate Gaussian Distribution}}%
+\put(2083,1795){\ljust{ 2}}%
+\put(2083,1514){\ljust{ 1}}%
+\put(2083,1234){\ljust{ 0}}%
+\put(2083,954){\ljust{-1}}%
+\put(2083,673){\ljust{-2}}%
+\put(2001,541){\cjust{ 2}}%
+\put(1720,541){\cjust{ 1}}%
+\put(1440,541){\cjust{ 0}}%
+\put(1160,541){\cjust{-1}}%
+\put(879,541){\cjust{-2}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-cauchy.tex b/gsl-1.9/doc/rand-cauchy.tex
new file mode 100644
index 0000000..74b973b
--- /dev/null
+++ b/gsl-1.9/doc/rand-cauchy.tex
@@ -0,0 +1,1054 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-cauchy.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 767 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 1640 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+778 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1372 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2559 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3153 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 384 M
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+9 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+9 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+9 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+9 5 V
+10 5 V
+10 5 V
+10 6 V
+10 6 V
+10 5 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 8 V
+10 7 V
+10 8 V
+10 8 V
+9 8 V
+10 8 V
+10 9 V
+10 10 V
+10 9 V
+10 10 V
+10 10 V
+10 11 V
+10 11 V
+10 12 V
+stroke
+1494 725 M
+10 12 V
+10 13 V
+10 13 V
+10 14 V
+9 14 V
+10 15 V
+10 15 V
+10 16 V
+10 16 V
+10 18 V
+10 18 V
+10 18 V
+10 20 V
+10 20 V
+10 21 V
+10 21 V
+10 23 V
+10 23 V
+10 24 V
+9 24 V
+10 26 V
+10 26 V
+10 27 V
+10 27 V
+10 29 V
+10 28 V
+10 30 V
+10 29 V
+10 30 V
+10 30 V
+10 30 V
+10 30 V
+10 30 V
+9 29 V
+10 29 V
+10 28 V
+10 26 V
+10 25 V
+10 24 V
+10 21 V
+10 20 V
+10 17 V
+10 15 V
+10 12 V
+10 9 V
+10 6 V
+10 3 V
+9 0 V
+10 -3 V
+10 -6 V
+10 -9 V
+10 -12 V
+10 -15 V
+10 -17 V
+10 -20 V
+10 -21 V
+10 -24 V
+10 -25 V
+10 -26 V
+10 -28 V
+10 -29 V
+9 -29 V
+10 -30 V
+10 -30 V
+10 -30 V
+10 -30 V
+10 -30 V
+10 -29 V
+10 -30 V
+10 -28 V
+10 -29 V
+10 -27 V
+10 -27 V
+10 -26 V
+10 -26 V
+9 -24 V
+10 -24 V
+10 -23 V
+10 -23 V
+10 -21 V
+10 -21 V
+10 -20 V
+10 -20 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+9 -14 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -8 V
+stroke
+2527 635 M
+9 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 427 M
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+9 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+9 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+9 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+9 5 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+9 6 V
+10 6 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+stroke
+1494 757 M
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+9 7 V
+10 8 V
+10 7 V
+10 7 V
+10 8 V
+10 7 V
+10 8 V
+10 7 V
+10 8 V
+10 7 V
+10 8 V
+10 8 V
+10 7 V
+10 7 V
+10 8 V
+9 7 V
+10 7 V
+10 7 V
+10 8 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+9 5 V
+10 4 V
+10 5 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 1 V
+10 0 V
+9 0 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -5 V
+10 -4 V
+9 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -8 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -8 V
+9 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+stroke
+2527 698 M
+9 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+9 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=2$}}%
+\put(3037,1963){\rjust{$a=1$}}%
+\put(1965,2226){\cjust{Cauchy Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3153,200){\cjust{ 4}}%
+\put(2856,200){\cjust{ 3}}%
+\put(2559,200){\cjust{ 2}}%
+\put(2262,200){\cjust{ 1}}%
+\put(1965,200){\cjust{ 0}}%
+\put(1669,200){\cjust{-1}}%
+\put(1372,200){\cjust{-2}}%
+\put(1075,200){\cjust{-3}}%
+\put(778,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,2076){\rjust{ 0.4}}%
+\put(400,1640){\rjust{ 0.3}}%
+\put(400,1204){\rjust{ 0.2}}%
+\put(400,767){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-chisq.tex b/gsl-1.9/doc/rand-chisq.tex
new file mode 100644
index 0000000..4bc65c4
--- /dev/null
+++ b/gsl-1.9/doc/rand-chisq.tex
@@ -0,0 +1,1307 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-chisq.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1471 331 M
+0 -31 V
+0.500 UL
+LTb
+2460 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+618 2076 M
+2 -14 V
+10 -67 V
+10 -61 V
+10 -55 V
+10 -51 V
+10 -48 V
+10 -43 V
+10 -41 V
+9 -38 V
+10 -36 V
+10 -33 V
+10 -32 V
+10 -30 V
+10 -28 V
+10 -27 V
+10 -25 V
+10 -24 V
+10 -24 V
+10 -22 V
+10 -21 V
+10 -20 V
+10 -19 V
+9 -19 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -12 V
+9 -11 V
+10 -12 V
+10 -11 V
+10 -10 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+9 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+stroke
+1623 695 M
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+stroke
+2656 488 M
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 1204 M
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+stroke
+1494 854 M
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+stroke
+2527 641 M
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+1.000 UL
+LT2
+LTb
+LT2
+3087 1763 M
+263 0 V
+481 331 M
+10 69 V
+10 29 V
+10 21 V
+10 18 V
+10 15 V
+10 14 V
+10 12 V
+9 11 V
+10 11 V
+10 10 V
+10 9 V
+10 8 V
+10 9 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+9 5 V
+10 5 V
+10 5 V
+10 5 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+9 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+9 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+9 1 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1494 753 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+stroke
+2527 687 M
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1763){\rjust{$\nu=3$}}%
+\put(3037,1863){\rjust{$\nu=2$}}%
+\put(3037,1963){\rjust{$\nu=1$}}%
+\put(1965,2226){\cjust{Chi-squared Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 3}}%
+\put(2460,200){\cjust{ 2}}%
+\put(1471,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-erlang.tex b/gsl-1.9/doc/rand-erlang.tex
new file mode 100644
index 0000000..e7ecaef
--- /dev/null
+++ b/gsl-1.9/doc/rand-erlang.tex
@@ -0,0 +1,1330 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-erlang.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 2076 M
+10 -29 V
+10 -28 V
+10 -28 V
+10 -28 V
+10 -27 V
+10 -27 V
+10 -26 V
+9 -26 V
+10 -25 V
+10 -25 V
+10 -24 V
+10 -24 V
+10 -24 V
+10 -23 V
+10 -23 V
+10 -23 V
+10 -22 V
+10 -22 V
+10 -21 V
+10 -21 V
+10 -21 V
+9 -20 V
+10 -20 V
+10 -20 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -17 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -16 V
+9 -16 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -15 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -13 V
+9 -13 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -11 V
+9 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -9 V
+10 -7 V
+9 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+stroke
+1494 648 M
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+stroke
+2527 387 M
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 29 V
+10 27 V
+10 27 V
+10 26 V
+10 25 V
+10 24 V
+10 24 V
+9 22 V
+10 22 V
+10 21 V
+10 20 V
+10 20 V
+10 18 V
+10 18 V
+10 18 V
+10 16 V
+10 16 V
+10 16 V
+10 15 V
+10 14 V
+10 13 V
+9 13 V
+10 13 V
+10 12 V
+10 11 V
+10 11 V
+10 11 V
+10 10 V
+10 9 V
+10 9 V
+10 9 V
+10 8 V
+10 8 V
+10 7 V
+10 7 V
+9 6 V
+10 7 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+stroke
+1494 872 M
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+stroke
+2527 523 M
+9 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+1.000 UL
+LT2
+LTb
+LT2
+3087 1763 M
+263 0 V
+481 331 M
+10 0 V
+10 1 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+9 3 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+9 6 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+9 7 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 6 V
+9 6 V
+10 6 V
+10 7 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+9 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+9 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+9 3 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+stroke
+1494 792 M
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+stroke
+2527 661 M
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1763){\rjust{$n=3$}}%
+\put(3037,1863){\rjust{$n=2$}}%
+\put(3037,1963){\rjust{$n=1$}}%
+\put(1965,2226){\cjust{Erlang Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-exponential.tex b/gsl-1.9/doc/rand-exponential.tex
new file mode 100644
index 0000000..18ebc42
--- /dev/null
+++ b/gsl-1.9/doc/rand-exponential.tex
@@ -0,0 +1,1009 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-exponential.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1471 331 M
+0 -31 V
+0.500 UL
+LTb
+2460 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 2076 M
+10 -17 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -16 V
+10 -17 V
+10 -16 V
+9 -17 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -15 V
+10 -14 V
+10 -15 V
+9 -14 V
+10 -14 V
+10 -13 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -13 V
+9 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+9 -10 V
+10 -11 V
+10 -10 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+9 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+9 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+stroke
+1494 958 M
+10 -6 V
+10 -6 V
+10 -6 V
+10 -7 V
+9 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+stroke
+2527 552 M
+9 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 1204 M
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+stroke
+1494 854 M
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+stroke
+2527 641 M
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$\mu=2$}}%
+\put(3037,1963){\rjust{$\mu=1$}}%
+\put(1965,2226){\cjust{Exponential Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 3}}%
+\put(2460,200){\cjust{ 2}}%
+\put(1471,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-exppow.tex b/gsl-1.9/doc/rand-exppow.tex
new file mode 100644
index 0000000..2f0bc76
--- /dev/null
+++ b/gsl-1.9/doc/rand-exppow.tex
@@ -0,0 +1,1054 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-exppow.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 767 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 1640 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+778 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1372 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2559 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3153 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 2 V
+10 2 V
+10 3 V
+10 3 V
+10 4 V
+10 4 V
+10 5 V
+10 6 V
+10 7 V
+10 8 V
+stroke
+1494 382 M
+10 9 V
+10 11 V
+10 11 V
+10 14 V
+9 15 V
+10 16 V
+10 18 V
+10 20 V
+10 22 V
+10 24 V
+10 26 V
+10 28 V
+10 29 V
+10 32 V
+10 33 V
+10 34 V
+10 37 V
+10 37 V
+10 39 V
+9 40 V
+10 41 V
+10 41 V
+10 41 V
+10 42 V
+10 41 V
+10 41 V
+10 40 V
+10 39 V
+10 38 V
+10 36 V
+10 34 V
+10 33 V
+10 31 V
+9 28 V
+10 26 V
+10 23 V
+10 22 V
+10 18 V
+10 16 V
+10 14 V
+10 11 V
+10 9 V
+10 7 V
+10 5 V
+10 4 V
+10 2 V
+10 0 V
+9 0 V
+10 0 V
+10 -2 V
+10 -4 V
+10 -5 V
+10 -7 V
+10 -9 V
+10 -11 V
+10 -14 V
+10 -16 V
+10 -18 V
+10 -22 V
+10 -23 V
+10 -26 V
+9 -28 V
+10 -31 V
+10 -33 V
+10 -34 V
+10 -36 V
+10 -38 V
+10 -39 V
+10 -40 V
+10 -41 V
+10 -41 V
+10 -42 V
+10 -41 V
+10 -41 V
+10 -41 V
+9 -40 V
+10 -39 V
+10 -37 V
+10 -37 V
+10 -34 V
+10 -33 V
+10 -32 V
+10 -29 V
+10 -28 V
+10 -26 V
+10 -24 V
+10 -22 V
+10 -20 V
+10 -18 V
+10 -16 V
+9 -15 V
+10 -14 V
+10 -11 V
+10 -11 V
+10 -9 V
+10 -8 V
+10 -7 V
+10 -6 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -2 V
+stroke
+2527 340 M
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 389 M
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+9 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+9 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+9 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+9 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+9 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+9 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+stroke
+1494 486 M
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+9 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+9 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 7 V
+9 6 V
+10 8 V
+10 7 V
+10 8 V
+10 9 V
+10 10 V
+10 10 V
+10 12 V
+10 13 V
+10 15 V
+10 17 V
+10 21 V
+10 28 V
+10 43 V
+9 0 V
+10 -43 V
+10 -28 V
+10 -21 V
+10 -17 V
+10 -15 V
+10 -13 V
+10 -12 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -8 V
+10 -7 V
+10 -8 V
+9 -6 V
+10 -7 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+stroke
+2527 469 M
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=1, b=0.5$}}%
+\put(3037,1963){\rjust{$a=1, b=2.5$}}%
+\put(1965,2226){\cjust{Exponential Power Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3153,200){\cjust{ 4}}%
+\put(2856,200){\cjust{ 3}}%
+\put(2559,200){\cjust{ 2}}%
+\put(2262,200){\cjust{ 1}}%
+\put(1965,200){\cjust{ 0}}%
+\put(1669,200){\cjust{-1}}%
+\put(1372,200){\cjust{-2}}%
+\put(1075,200){\cjust{-3}}%
+\put(778,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,2076){\rjust{ 0.8}}%
+\put(400,1640){\rjust{ 0.6}}%
+\put(400,1204){\rjust{ 0.4}}%
+\put(400,767){\rjust{ 0.2}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-fdist.tex b/gsl-1.9/doc/rand-fdist.tex
new file mode 100644
index 0000000..4b6762a
--- /dev/null
+++ b/gsl-1.9/doc/rand-fdist.tex
@@ -0,0 +1,992 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-fdist.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1966 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+609 2076 M
+1 -12 V
+10 -73 V
+10 -66 V
+10 -60 V
+10 -55 V
+10 -50 V
+10 -47 V
+10 -43 V
+10 -40 V
+9 -37 V
+10 -35 V
+10 -32 V
+10 -31 V
+10 -29 V
+10 -28 V
+10 -26 V
+10 -25 V
+10 -23 V
+10 -23 V
+10 -21 V
+10 -21 V
+10 -19 V
+10 -19 V
+9 -18 V
+10 -17 V
+10 -17 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+9 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+9 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+9 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+stroke
+1613 692 M
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+stroke
+2646 518 M
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 454 V
+10 163 V
+10 110 V
+10 82 V
+10 63 V
+10 49 V
+10 39 V
+9 31 V
+10 25 V
+10 20 V
+10 15 V
+10 11 V
+10 9 V
+10 6 V
+10 3 V
+10 2 V
+10 0 V
+10 -1 V
+10 -2 V
+10 -4 V
+10 -4 V
+9 -5 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -9 V
+9 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+9 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -5 V
+10 -6 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+stroke
+1494 845 M
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+stroke
+2527 588 M
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$\nu_1=3, \nu_2=2$}}%
+\put(3037,1963){\rjust{$\nu_1=1, \nu_2=1$}}%
+\put(1965,2226){\cjust{F-Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 2}}%
+\put(1966,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-flat.tex b/gsl-1.9/doc/rand-flat.tex
new file mode 100644
index 0000000..6979fc1
--- /dev/null
+++ b/gsl-1.9/doc/rand-flat.tex
@@ -0,0 +1,1023 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-flat.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 873 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1484 1204 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -873 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2507 331 M
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 485 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1484 816 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2517 816 M
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -485 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=1.2,b=4.8$}}%
+\put(3037,1963){\rjust{$a=0.5,b=2.5$}}%
+\put(1965,2226){\cjust{Flat Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-gamma.tex b/gsl-1.9/doc/rand-gamma.tex
new file mode 100644
index 0000000..8de0fad
--- /dev/null
+++ b/gsl-1.9/doc/rand-gamma.tex
@@ -0,0 +1,1330 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-gamma.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 2076 M
+10 -29 V
+10 -28 V
+10 -28 V
+10 -28 V
+10 -27 V
+10 -27 V
+10 -26 V
+9 -26 V
+10 -25 V
+10 -25 V
+10 -24 V
+10 -24 V
+10 -24 V
+10 -23 V
+10 -23 V
+10 -23 V
+10 -22 V
+10 -22 V
+10 -21 V
+10 -21 V
+10 -21 V
+9 -20 V
+10 -20 V
+10 -20 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -17 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -16 V
+9 -16 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -15 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -13 V
+9 -13 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -11 V
+9 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -9 V
+10 -7 V
+9 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+stroke
+1494 648 M
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+stroke
+2527 387 M
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 29 V
+10 27 V
+10 27 V
+10 26 V
+10 25 V
+10 24 V
+10 24 V
+9 22 V
+10 22 V
+10 21 V
+10 20 V
+10 20 V
+10 18 V
+10 18 V
+10 18 V
+10 16 V
+10 16 V
+10 16 V
+10 15 V
+10 14 V
+10 13 V
+9 13 V
+10 13 V
+10 12 V
+10 11 V
+10 11 V
+10 11 V
+10 10 V
+10 9 V
+10 9 V
+10 9 V
+10 8 V
+10 8 V
+10 7 V
+10 7 V
+9 6 V
+10 7 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+stroke
+1494 872 M
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+stroke
+2527 523 M
+9 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+1.000 UL
+LT2
+LTb
+LT2
+3087 1763 M
+263 0 V
+481 331 M
+10 0 V
+10 1 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+9 3 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+9 6 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+9 7 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 6 V
+9 6 V
+10 6 V
+10 7 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+9 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+9 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+9 3 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+stroke
+1494 792 M
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+stroke
+2527 661 M
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1763){\rjust{$a=3$}}%
+\put(3037,1863){\rjust{$a=2$}}%
+\put(3037,1963){\rjust{$a=1$}}%
+\put(1965,2226){\cjust{Gamma Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1}}%
+\put(400,1204){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-gaussian-tail.tex b/gsl-1.9/doc/rand-gaussian-tail.tex
new file mode 100644
index 0000000..932f6be
--- /dev/null
+++ b/gsl-1.9/doc/rand-gaussian-tail.tex
@@ -0,0 +1,718 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-gaussian-tail.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:28 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 767 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 1640 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 1679 V
+10 -42 V
+10 -42 V
+9 -40 V
+10 -40 V
+10 -40 V
+10 -39 V
+10 -38 V
+10 -38 V
+10 -37 V
+10 -36 V
+10 -36 V
+10 -35 V
+stroke
+1494 1547 M
+10 -34 V
+10 -34 V
+10 -33 V
+10 -32 V
+9 -32 V
+10 -31 V
+10 -31 V
+10 -29 V
+10 -30 V
+10 -28 V
+10 -28 V
+10 -27 V
+10 -27 V
+10 -26 V
+10 -26 V
+10 -24 V
+10 -25 V
+10 -23 V
+10 -23 V
+9 -23 V
+10 -22 V
+10 -21 V
+10 -21 V
+10 -20 V
+10 -20 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -16 V
+10 -15 V
+9 -16 V
+10 -14 V
+10 -15 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+9 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+stroke
+2527 345 M
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$\sigma=1,a=1.5$}}%
+\put(1965,2226){\cjust{Gaussian Tail Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 2}}%
+\put(400,1640){\rjust{ 1.5}}%
+\put(400,1204){\rjust{ 1}}%
+\put(400,767){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-gaussian.tex b/gsl-1.9/doc/rand-gaussian.tex
new file mode 100644
index 0000000..589c122
--- /dev/null
+++ b/gsl-1.9/doc/rand-gaussian.tex
@@ -0,0 +1,1059 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-gaussian.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:28 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 680 M
+-31 0 V
+0.500 UL
+LTb
+481 1029 M
+-31 0 V
+0.500 UL
+LTb
+481 1378 M
+-31 0 V
+0.500 UL
+LTb
+481 1727 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+778 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1372 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2559 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3153 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+9 0 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+9 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+9 6 V
+10 7 V
+10 8 V
+10 8 V
+10 8 V
+10 9 V
+10 10 V
+10 10 V
+10 11 V
+10 11 V
+10 12 V
+10 12 V
+10 13 V
+10 14 V
+9 15 V
+10 15 V
+10 15 V
+10 17 V
+10 17 V
+10 18 V
+10 18 V
+10 20 V
+10 20 V
+10 20 V
+stroke
+1494 725 M
+10 21 V
+10 22 V
+10 23 V
+10 23 V
+9 24 V
+10 24 V
+10 25 V
+10 26 V
+10 26 V
+10 26 V
+10 27 V
+10 27 V
+10 28 V
+10 27 V
+10 28 V
+10 28 V
+10 29 V
+10 28 V
+10 28 V
+9 28 V
+10 28 V
+10 28 V
+10 27 V
+10 27 V
+10 27 V
+10 26 V
+10 26 V
+10 25 V
+10 24 V
+10 23 V
+10 23 V
+10 21 V
+10 21 V
+9 19 V
+10 19 V
+10 17 V
+10 16 V
+10 15 V
+10 13 V
+10 12 V
+10 11 V
+10 9 V
+10 8 V
+10 6 V
+10 4 V
+10 4 V
+10 1 V
+9 0 V
+10 -1 V
+10 -4 V
+10 -4 V
+10 -6 V
+10 -8 V
+10 -9 V
+10 -11 V
+10 -12 V
+10 -13 V
+10 -15 V
+10 -16 V
+10 -17 V
+10 -19 V
+9 -19 V
+10 -21 V
+10 -21 V
+10 -23 V
+10 -23 V
+10 -24 V
+10 -25 V
+10 -26 V
+10 -26 V
+10 -27 V
+10 -27 V
+10 -27 V
+10 -28 V
+10 -28 V
+9 -28 V
+10 -28 V
+10 -28 V
+10 -29 V
+10 -28 V
+10 -28 V
+10 -27 V
+10 -28 V
+10 -27 V
+10 -27 V
+10 -26 V
+10 -26 V
+10 -26 V
+10 -25 V
+10 -24 V
+9 -24 V
+10 -23 V
+10 -23 V
+10 -22 V
+10 -21 V
+10 -20 V
+10 -20 V
+10 -20 V
+10 -18 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -15 V
+10 -15 V
+stroke
+2527 565 M
+9 -15 V
+10 -14 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 362 M
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+9 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+9 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+9 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+9 4 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+9 7 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+9 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+9 8 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+stroke
+1494 839 M
+10 7 V
+10 6 V
+10 7 V
+10 6 V
+9 7 V
+10 6 V
+10 6 V
+10 7 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+9 5 V
+10 5 V
+10 5 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+9 3 V
+10 2 V
+10 2 V
+10 3 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+stroke
+2527 777 M
+9 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -7 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$\sigma=2$}}%
+\put(3037,1963){\rjust{$\sigma=1$}}%
+\put(1965,2226){\cjust{Gaussian Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3153,200){\cjust{ 4}}%
+\put(2856,200){\cjust{ 3}}%
+\put(2559,200){\cjust{ 2}}%
+\put(2262,200){\cjust{ 1}}%
+\put(1965,200){\cjust{ 0}}%
+\put(1669,200){\cjust{-1}}%
+\put(1372,200){\cjust{-2}}%
+\put(1075,200){\cjust{-3}}%
+\put(778,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,2076){\rjust{ 0.5}}%
+\put(400,1727){\rjust{ 0.4}}%
+\put(400,1378){\rjust{ 0.3}}%
+\put(400,1029){\rjust{ 0.2}}%
+\put(400,680){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-geometric.tex b/gsl-1.9/doc/rand-geometric.tex
new file mode 100644
index 0000000..4010a86
--- /dev/null
+++ b/gsl-1.9/doc/rand-geometric.tex
@@ -0,0 +1,753 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-geometric.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 580 M
+-31 0 V
+0.500 UL
+LTb
+481 830 M
+-31 0 V
+0.500 UL
+LTb
+481 1079 M
+-31 0 V
+0.500 UL
+LTb
+481 1328 M
+-31 0 V
+0.500 UL
+LTb
+481 1577 M
+-31 0 V
+0.500 UL
+LTb
+481 1827 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+247 63 R
+0 -31 V
+0.500 UL
+LTb
+976 331 M
+0 -63 V
+247 63 R
+0 -31 V
+0.500 UL
+LTb
+1471 331 M
+0 -63 V
+247 63 R
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -63 V
+248 63 R
+0 -31 V
+0.500 UL
+LTb
+2460 331 M
+0 -63 V
+248 63 R
+0 -31 V
+0.500 UL
+LTb
+2955 331 M
+0 -63 V
+248 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 1246 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -623 V
+stroke
+1474 954 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -311 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -156 V
+10 0 V
+10 0 V
+stroke
+2487 487 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -78 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -39 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$p=0.5$}}%
+\put(1965,2226){\cjust{Geometric Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3203,200){\cjust{ 5}}%
+\put(2708,200){\cjust{ 4}}%
+\put(2213,200){\cjust{ 3}}%
+\put(1718,200){\cjust{ 2}}%
+\put(1223,200){\cjust{ 1}}%
+\put(728,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.7}}%
+\put(400,1827){\rjust{ 0.6}}%
+\put(400,1577){\rjust{ 0.5}}%
+\put(400,1328){\rjust{ 0.4}}%
+\put(400,1079){\rjust{ 0.3}}%
+\put(400,830){\rjust{ 0.2}}%
+\put(400,580){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-gumbel.tex b/gsl-1.9/doc/rand-gumbel.tex
new file mode 100644
index 0000000..0cf6108
--- /dev/null
+++ b/gsl-1.9/doc/rand-gumbel.tex
@@ -0,0 +1,966 @@
+% GNUPLOT: plain TeX with Postscript
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \begingroup
+ % Inner version of \newdimen from btxmac.tex
+ \edef\innernewdimen{\expandafter\noexpand\csname newdimen\endcsname}%
+ \innernewdimen\GNUPLOTunit
+ \endgroup
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\special{!
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-gumbel.tex
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 340
+%%CreationDate: Wed Sep 16 16:35:38 1998
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 0 1 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 0 1 DL } def
+/LT2 { PL [2 dl 3 dl] 1 0 0 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+}
+\GNUPLOTpicture(3600,2376)
+\special{"
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+LTb
+450 400 M
+63 0 V
+3037 0 R
+-63 0 V
+450 647 M
+63 0 V
+3037 0 R
+-63 0 V
+450 893 M
+63 0 V
+3037 0 R
+-63 0 V
+450 1140 M
+63 0 V
+3037 0 R
+-63 0 V
+450 1386 M
+63 0 V
+3037 0 R
+-63 0 V
+450 1633 M
+63 0 V
+3037 0 R
+-63 0 V
+450 1879 M
+63 0 V
+3037 0 R
+-63 0 V
+450 2126 M
+63 0 V
+3037 0 R
+-63 0 V
+450 400 M
+0 63 V
+0 1663 R
+0 -63 V
+838 400 M
+0 63 V
+0 1663 R
+0 -63 V
+1225 400 M
+0 63 V
+0 1663 R
+0 -63 V
+1613 400 M
+0 63 V
+0 1663 R
+0 -63 V
+2000 400 M
+0 63 V
+0 1663 R
+0 -63 V
+2388 400 M
+0 63 V
+0 1663 R
+0 -63 V
+2775 400 M
+0 63 V
+0 1663 R
+0 -63 V
+3163 400 M
+0 63 V
+0 1663 R
+0 -63 V
+3550 400 M
+0 63 V
+0 1663 R
+0 -63 V
+LTb
+450 400 M
+3100 0 V
+0 1726 V
+-3100 0 V
+450 400 L
+1.000 UL
+LT0
+3187 2013 M
+263 0 V
+450 411 M
+10 1 V
+11 1 V
+10 1 V
+10 2 V
+11 1 V
+10 1 V
+11 2 V
+10 1 V
+10 2 V
+11 2 V
+10 2 V
+10 2 V
+11 2 V
+10 2 V
+11 2 V
+10 3 V
+10 2 V
+11 3 V
+10 3 V
+10 3 V
+11 3 V
+10 3 V
+10 4 V
+11 3 V
+10 4 V
+11 4 V
+10 4 V
+10 4 V
+11 4 V
+10 5 V
+10 4 V
+11 5 V
+10 5 V
+11 5 V
+10 6 V
+10 5 V
+11 6 V
+10 6 V
+10 6 V
+11 6 V
+10 6 V
+10 7 V
+11 6 V
+10 7 V
+11 7 V
+10 8 V
+10 7 V
+11 7 V
+10 8 V
+10 8 V
+11 8 V
+10 8 V
+10 8 V
+11 9 V
+10 8 V
+11 9 V
+10 9 V
+10 9 V
+11 9 V
+10 9 V
+10 9 V
+11 9 V
+10 10 V
+11 9 V
+10 10 V
+10 10 V
+11 10 V
+10 9 V
+10 10 V
+11 10 V
+10 10 V
+10 10 V
+11 11 V
+10 10 V
+11 10 V
+10 10 V
+10 10 V
+11 10 V
+10 11 V
+10 10 V
+11 10 V
+10 10 V
+11 10 V
+10 10 V
+10 10 V
+11 10 V
+10 10 V
+10 10 V
+11 10 V
+10 10 V
+10 9 V
+11 10 V
+10 9 V
+11 10 V
+10 9 V
+10 9 V
+11 9 V
+10 9 V
+10 9 V
+11 9 V
+10 8 V
+11 9 V
+10 8 V
+10 8 V
+11 8 V
+10 8 V
+10 8 V
+11 7 V
+10 8 V
+10 7 V
+11 7 V
+10 7 V
+11 7 V
+10 6 V
+10 7 V
+11 6 V
+10 6 V
+10 6 V
+11 5 V
+10 6 V
+11 5 V
+10 5 V
+10 5 V
+11 5 V
+10 4 V
+10 5 V
+11 4 V
+10 4 V
+10 3 V
+11 4 V
+10 3 V
+11 4 V
+10 3 V
+10 2 V
+11 3 V
+10 2 V
+10 3 V
+11 2 V
+10 2 V
+11 1 V
+10 2 V
+10 1 V
+11 2 V
+10 1 V
+10 0 V
+11 1 V
+10 1 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 -1 V
+11 -1 V
+10 0 V
+10 -1 V
+11 -1 V
+10 -2 V
+10 -1 V
+11 -1 V
+10 -2 V
+11 -2 V
+10 -2 V
+10 -2 V
+11 -2 V
+10 -2 V
+10 -3 V
+11 -2 V
+10 -3 V
+11 -3 V
+10 -2 V
+10 -3 V
+11 -4 V
+10 -3 V
+10 -3 V
+11 -3 V
+10 -4 V
+10 -3 V
+11 -4 V
+10 -4 V
+11 -4 V
+10 -3 V
+10 -4 V
+11 -5 V
+10 -4 V
+10 -4 V
+11 -4 V
+10 -4 V
+11 -5 V
+10 -4 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+11 -5 V
+10 -6 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -6 V
+10 -5 V
+10 -5 V
+11 -6 V
+10 -5 V
+11 -5 V
+10 -6 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -5 V
+11 -6 V
+10 -5 V
+10 -5 V
+11 -6 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -6 V
+10 -5 V
+11 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -5 V
+11 -4 V
+10 -5 V
+10 -4 V
+11 -5 V
+10 -4 V
+11 -4 V
+10 -5 V
+10 -4 V
+11 -4 V
+10 -5 V
+10 -4 V
+11 -4 V
+10 -4 V
+11 -4 V
+10 -5 V
+10 -4 V
+11 -4 V
+10 -4 V
+10 -4 V
+11 -4 V
+10 -3 V
+10 -4 V
+11 -4 V
+10 -4 V
+11 -4 V
+10 -4 V
+10 -3 V
+11 -4 V
+10 -4 V
+10 -3 V
+11 -4 V
+10 -3 V
+11 -4 V
+10 -3 V
+10 -4 V
+11 -3 V
+10 -4 V
+1.000 UL
+LT1
+3187 1913 M
+263 0 V
+450 400 M
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 0 V
+11 0 V
+10 0 V
+10 0 V
+11 0 V
+10 1 V
+10 2 V
+11 8 V
+10 18 V
+10 29 V
+11 43 V
+10 56 V
+11 66 V
+10 75 V
+10 80 V
+11 83 V
+10 84 V
+10 83 V
+11 80 V
+10 76 V
+11 71 V
+10 66 V
+10 61 V
+11 55 V
+10 49 V
+10 44 V
+11 39 V
+10 33 V
+10 29 V
+11 25 V
+10 21 V
+11 17 V
+10 14 V
+10 10 V
+11 8 V
+10 5 V
+10 3 V
+11 1 V
+10 -1 V
+11 -3 V
+10 -5 V
+10 -5 V
+11 -7 V
+10 -8 V
+10 -9 V
+11 -10 V
+10 -10 V
+10 -11 V
+11 -12 V
+10 -12 V
+11 -12 V
+10 -13 V
+10 -13 V
+11 -14 V
+10 -13 V
+10 -14 V
+11 -14 V
+10 -13 V
+11 -14 V
+10 -14 V
+10 -14 V
+11 -14 V
+10 -13 V
+10 -14 V
+11 -14 V
+10 -13 V
+10 -14 V
+11 -13 V
+10 -13 V
+11 -13 V
+10 -13 V
+10 -13 V
+11 -12 V
+10 -13 V
+10 -12 V
+11 -12 V
+10 -12 V
+11 -12 V
+10 -11 V
+10 -12 V
+11 -11 V
+10 -11 V
+10 -11 V
+11 -11 V
+10 -10 V
+10 -11 V
+11 -10 V
+10 -10 V
+11 -10 V
+10 -10 V
+10 -10 V
+11 -9 V
+10 -9 V
+10 -10 V
+11 -9 V
+10 -8 V
+11 -9 V
+10 -9 V
+10 -8 V
+11 -8 V
+10 -9 V
+10 -8 V
+11 -8 V
+10 -7 V
+10 -8 V
+11 -8 V
+10 -7 V
+11 -7 V
+10 -7 V
+10 -7 V
+11 -7 V
+10 -7 V
+10 -7 V
+11 -6 V
+10 -7 V
+10 -6 V
+11 -7 V
+10 -6 V
+11 -6 V
+10 -6 V
+10 -6 V
+11 -6 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -6 V
+11 -5 V
+10 -5 V
+10 -6 V
+11 -5 V
+10 -5 V
+10 -5 V
+11 -5 V
+10 -4 V
+10 -5 V
+11 -5 V
+10 -4 V
+11 -5 V
+10 -4 V
+10 -5 V
+11 -4 V
+10 -4 V
+10 -4 V
+11 -5 V
+10 -4 V
+11 -4 V
+10 -4 V
+10 -4 V
+11 -3 V
+10 -4 V
+stroke
+grestore
+end
+showpage
+}
+\put(3137,1913){\rjust{Type 2, $a=1,b=1$}}
+\put(3137,2013){\rjust{Type 1, $a=1,b=1$}}
+\put(2000,2276){\cjust{Gumbel Distributions}}
+\put(2000,150){\cjust{$x$}}
+\put(100,1263){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}
+\put(3550,300){\cjust{2}}
+\put(3163,300){\cjust{1.5}}
+\put(2775,300){\cjust{1}}
+\put(2388,300){\cjust{0.5}}
+\put(2000,300){\cjust{0}}
+\put(1613,300){\cjust{-0.5}}
+\put(1225,300){\cjust{-1}}
+\put(838,300){\cjust{-1.5}}
+\put(450,300){\cjust{-2}}
+\put(400,2126){\rjust{0.7}}
+\put(400,1879){\rjust{0.6}}
+\put(400,1633){\rjust{0.5}}
+\put(400,1386){\rjust{0.4}}
+\put(400,1140){\rjust{0.3}}
+\put(400,893){\rjust{0.2}}
+\put(400,647){\rjust{0.1}}
+\put(400,400){\rjust{0}}
+\endGNUPLOTpicture
diff --git a/gsl-1.9/doc/rand-gumbel1.tex b/gsl-1.9/doc/rand-gumbel1.tex
new file mode 100644
index 0000000..8152e77
--- /dev/null
+++ b/gsl-1.9/doc/rand-gumbel1.tex
@@ -0,0 +1,733 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-gumbel1.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 680 M
+-31 0 V
+0.500 UL
+LTb
+481 1029 M
+-31 0 V
+0.500 UL
+LTb
+481 1378 M
+-31 0 V
+0.500 UL
+LTb
+481 1727 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+905 331 M
+0 -31 V
+0.500 UL
+LTb
+1329 331 M
+0 -31 V
+0.500 UL
+LTb
+1753 331 M
+0 -31 V
+0.500 UL
+LTb
+2178 331 M
+0 -31 V
+0.500 UL
+LTb
+2602 331 M
+0 -31 V
+0.500 UL
+LTb
+3026 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 347 M
+10 2 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 5 V
+9 6 V
+10 6 V
+10 6 V
+10 7 V
+10 8 V
+10 8 V
+10 9 V
+10 9 V
+10 10 V
+10 11 V
+10 12 V
+10 12 V
+10 13 V
+10 14 V
+9 14 V
+10 16 V
+10 16 V
+10 16 V
+10 18 V
+10 18 V
+10 19 V
+10 19 V
+10 21 V
+10 20 V
+10 22 V
+10 22 V
+10 22 V
+10 23 V
+9 23 V
+10 24 V
+10 24 V
+10 24 V
+10 25 V
+10 25 V
+10 25 V
+10 25 V
+10 25 V
+10 26 V
+10 25 V
+10 25 V
+10 25 V
+10 25 V
+9 24 V
+10 25 V
+10 24 V
+10 23 V
+10 24 V
+10 22 V
+10 23 V
+10 21 V
+10 22 V
+10 20 V
+10 20 V
+10 19 V
+10 19 V
+10 18 V
+10 17 V
+9 17 V
+10 15 V
+10 15 V
+10 15 V
+10 13 V
+10 12 V
+10 12 V
+10 11 V
+10 10 V
+10 10 V
+10 8 V
+10 8 V
+10 6 V
+10 6 V
+9 6 V
+10 4 V
+10 4 V
+10 3 V
+10 2 V
+10 1 V
+10 1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -5 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -9 V
+10 -9 V
+stroke
+1494 1532 M
+10 -9 V
+10 -9 V
+10 -10 V
+10 -11 V
+9 -10 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+9 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+9 -12 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+9 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -11 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -10 V
+9 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+9 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+stroke
+2527 526 M
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{Type 1, $a=1,b=1$}}%
+\put(1965,2226){\cjust{Type 1 Gumbel Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3026,200){\cjust{ 4}}%
+\put(2602,200){\cjust{ 3}}%
+\put(2178,200){\cjust{ 2}}%
+\put(1753,200){\cjust{ 1}}%
+\put(1329,200){\cjust{ 0}}%
+\put(905,200){\cjust{-1}}%
+\put(481,200){\cjust{-2}}%
+\put(400,2076){\rjust{ 0.5}}%
+\put(400,1727){\rjust{ 0.4}}%
+\put(400,1378){\rjust{ 0.3}}%
+\put(400,1029){\rjust{ 0.2}}%
+\put(400,680){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-gumbel2.tex b/gsl-1.9/doc/rand-gumbel2.tex
new file mode 100644
index 0000000..03ae743
--- /dev/null
+++ b/gsl-1.9/doc/rand-gumbel2.tex
@@ -0,0 +1,728 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-gumbel2.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 580 M
+-31 0 V
+0.500 UL
+LTb
+481 830 M
+-31 0 V
+0.500 UL
+LTb
+481 1079 M
+-31 0 V
+0.500 UL
+LTb
+481 1328 M
+-31 0 V
+0.500 UL
+LTb
+481 1577 M
+-31 0 V
+0.500 UL
+LTb
+481 1827 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1223 331 M
+0 -31 V
+0.500 UL
+LTb
+1966 331 M
+0 -31 V
+0.500 UL
+LTb
+2708 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 4 V
+10 5 V
+10 7 V
+10 10 V
+10 13 V
+10 17 V
+10 20 V
+10 23 V
+9 27 V
+10 29 V
+10 33 V
+10 34 V
+10 37 V
+10 39 V
+10 40 V
+10 41 V
+10 42 V
+10 42 V
+10 43 V
+10 42 V
+10 42 V
+10 42 V
+9 41 V
+10 40 V
+10 39 V
+10 38 V
+10 36 V
+10 36 V
+10 34 V
+10 32 V
+10 32 V
+10 30 V
+10 28 V
+10 27 V
+10 26 V
+10 24 V
+9 23 V
+10 21 V
+10 20 V
+10 19 V
+10 18 V
+10 17 V
+10 15 V
+10 14 V
+10 13 V
+10 12 V
+10 11 V
+10 10 V
+10 9 V
+10 8 V
+10 8 V
+9 6 V
+10 6 V
+10 5 V
+10 4 V
+10 4 V
+10 3 V
+10 2 V
+10 2 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+stroke
+1494 1568 M
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+9 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+9 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+stroke
+2527 966 M
+9 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{Type 2, $a=1,b=1$}}%
+\put(1965,2226){\cjust{Type 2 Gumbel Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 2}}%
+\put(2708,200){\cjust{ 1.5}}%
+\put(1966,200){\cjust{ 1}}%
+\put(1223,200){\cjust{ 0.5}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.7}}%
+\put(400,1827){\rjust{ 0.6}}%
+\put(400,1577){\rjust{ 0.5}}%
+\put(400,1328){\rjust{ 0.4}}%
+\put(400,1079){\rjust{ 0.3}}%
+\put(400,830){\rjust{ 0.2}}%
+\put(400,580){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-hypergeometric.tex b/gsl-1.9/doc/rand-hypergeometric.tex
new file mode 100644
index 0000000..63ba8b2
--- /dev/null
+++ b/gsl-1.9/doc/rand-hypergeometric.tex
@@ -0,0 +1,592 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-hypergeometric.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 580 M
+-31 0 V
+0.500 UL
+LTb
+481 830 M
+-31 0 V
+0.500 UL
+LTb
+481 1079 M
+-31 0 V
+0.500 UL
+LTb
+481 1328 M
+-31 0 V
+0.500 UL
+LTb
+481 1577 M
+-31 0 V
+0.500 UL
+LTb
+481 1827 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+751 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1021 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1291 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1561 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1831 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2100 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2370 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2640 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2910 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3180 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 1567 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -206 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -813 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -206 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1464 342 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$n1=5, n2=20, t=3$}}%
+\put(1965,2226){\cjust{Hypergeometric Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3315,200){\cjust{ 10}}%
+\put(3045,200){\cjust{ 9}}%
+\put(2775,200){\cjust{ 8}}%
+\put(2505,200){\cjust{ 7}}%
+\put(2235,200){\cjust{ 6}}%
+\put(1966,200){\cjust{ 5}}%
+\put(1696,200){\cjust{ 4}}%
+\put(1426,200){\cjust{ 3}}%
+\put(1156,200){\cjust{ 2}}%
+\put(886,200){\cjust{ 1}}%
+\put(616,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.7}}%
+\put(400,1827){\rjust{ 0.6}}%
+\put(400,1577){\rjust{ 0.5}}%
+\put(400,1328){\rjust{ 0.4}}%
+\put(400,1079){\rjust{ 0.3}}%
+\put(400,830){\rjust{ 0.2}}%
+\put(400,580){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-landau.tex b/gsl-1.9/doc/rand-landau.tex
new file mode 100644
index 0000000..cb3a410
--- /dev/null
+++ b/gsl-1.9/doc/rand-landau.tex
@@ -0,0 +1,602 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-landau.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+679 331 M
+0 -31 V
+0.500 UL
+LTb
+877 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1273 331 M
+0 -31 V
+0.500 UL
+LTb
+1471 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1867 331 M
+0 -31 V
+0.500 UL
+LTb
+2064 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2460 331 M
+0 -31 V
+0.500 UL
+LTb
+2658 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3054 331 M
+0 -31 V
+0.500 UL
+LTb
+3252 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+481 331 M
+20 0 V
+20 0 V
+19 0 V
+20 0 V
+20 0 V
+20 0 V
+20 0 V
+19 0 V
+20 0 V
+20 0 V
+20 0 V
+20 0 V
+19 0 V
+20 0 V
+20 0 V
+20 0 V
+19 1 V
+20 0 V
+20 2 V
+20 3 V
+20 5 V
+19 9 V
+20 14 V
+20 21 V
+20 29 V
+20 39 V
+19 49 V
+20 60 V
+20 71 V
+20 81 V
+20 89 V
+19 97 V
+20 101 V
+20 103 V
+20 103 V
+20 101 V
+19 96 V
+20 90 V
+20 83 V
+20 74 V
+20 64 V
+19 55 V
+20 45 V
+20 36 V
+20 26 V
+19 18 V
+20 9 V
+20 2 V
+20 -5 V
+20 -10 V
+19 -16 V
+20 -21 V
+20 -24 V
+20 -28 V
+20 -30 V
+19 -33 V
+20 -34 V
+20 -35 V
+20 -36 V
+20 -37 V
+19 -37 V
+20 -37 V
+20 -37 V
+20 -36 V
+20 -36 V
+19 -35 V
+20 -35 V
+20 -34 V
+20 -33 V
+20 -32 V
+19 -31 V
+20 -30 V
+20 -29 V
+20 -28 V
+20 -27 V
+19 -26 V
+20 -26 V
+20 -24 V
+20 -24 V
+19 -22 V
+20 -22 V
+20 -21 V
+20 -20 V
+20 -19 V
+19 -19 V
+20 -18 V
+20 -17 V
+20 -16 V
+20 -16 V
+19 -15 V
+20 -15 V
+20 -14 V
+20 -13 V
+20 -13 V
+19 -13 V
+20 -12 V
+20 -11 V
+20 -11 V
+20 -11 V
+19 -10 V
+20 -10 V
+20 -10 V
+20 -9 V
+20 -9 V
+stroke
+2540 635 M
+19 -8 V
+20 -8 V
+20 -8 V
+20 -8 V
+19 -7 V
+20 -7 V
+20 -7 V
+20 -6 V
+20 -7 V
+19 -6 V
+20 -6 V
+20 -6 V
+20 -5 V
+20 -5 V
+19 -5 V
+20 -5 V
+20 -5 V
+20 -5 V
+20 -4 V
+19 -5 V
+20 -4 V
+20 -4 V
+20 -4 V
+20 -4 V
+19 -4 V
+20 -3 V
+20 -4 V
+20 -3 V
+20 -3 V
+19 -3 V
+20 -4 V
+20 -3 V
+20 -2 V
+19 -3 V
+20 -3 V
+20 -3 V
+20 -2 V
+20 -3 V
+19 -2 V
+20 -3 V
+20 -2 V
+20 -2 V
+20 -2 V
+19 -2 V
+20 -2 V
+20 -3 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(1965,2226){\cjust{Landau Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 10}}%
+\put(3252,200){\cjust{ 9}}%
+\put(3054,200){\cjust{ 8}}%
+\put(2856,200){\cjust{ 7}}%
+\put(2658,200){\cjust{ 6}}%
+\put(2460,200){\cjust{ 5}}%
+\put(2262,200){\cjust{ 4}}%
+\put(2064,200){\cjust{ 3}}%
+\put(1867,200){\cjust{ 2}}%
+\put(1669,200){\cjust{ 1}}%
+\put(1471,200){\cjust{ 0}}%
+\put(1273,200){\cjust{-1}}%
+\put(1075,200){\cjust{-2}}%
+\put(877,200){\cjust{-3}}%
+\put(679,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,2076){\rjust{ 0.2}}%
+\put(400,1204){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-laplace.tex b/gsl-1.9/doc/rand-laplace.tex
new file mode 100644
index 0000000..ec0bf04
--- /dev/null
+++ b/gsl-1.9/doc/rand-laplace.tex
@@ -0,0 +1,1059 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-laplace.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 648 M
+-31 0 V
+0.500 UL
+LTb
+481 966 M
+-31 0 V
+0.500 UL
+LTb
+481 1283 M
+-31 0 V
+0.500 UL
+LTb
+481 1600 M
+-31 0 V
+0.500 UL
+LTb
+481 1917 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+778 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1372 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2559 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3153 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 342 M
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+9 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+9 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 2 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+9 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+9 5 V
+10 5 V
+10 5 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 8 V
+9 8 V
+10 8 V
+10 8 V
+10 9 V
+10 9 V
+10 9 V
+10 10 V
+10 10 V
+10 10 V
+10 11 V
+stroke
+1494 655 M
+10 11 V
+10 11 V
+10 12 V
+10 12 V
+9 13 V
+10 13 V
+10 13 V
+10 14 V
+10 15 V
+10 15 V
+10 15 V
+10 16 V
+10 16 V
+10 17 V
+10 18 V
+10 18 V
+10 19 V
+10 19 V
+10 21 V
+9 20 V
+10 22 V
+10 22 V
+10 23 V
+10 24 V
+10 24 V
+10 26 V
+10 26 V
+10 27 V
+10 28 V
+10 30 V
+10 30 V
+10 31 V
+10 32 V
+9 33 V
+10 34 V
+10 36 V
+10 37 V
+10 38 V
+10 39 V
+10 40 V
+10 42 V
+10 44 V
+10 45 V
+10 46 V
+10 48 V
+10 50 V
+10 51 V
+9 0 V
+10 -51 V
+10 -50 V
+10 -48 V
+10 -46 V
+10 -45 V
+10 -44 V
+10 -42 V
+10 -40 V
+10 -39 V
+10 -38 V
+10 -37 V
+10 -36 V
+10 -34 V
+9 -33 V
+10 -32 V
+10 -31 V
+10 -30 V
+10 -30 V
+10 -28 V
+10 -27 V
+10 -26 V
+10 -26 V
+10 -24 V
+10 -24 V
+10 -23 V
+10 -22 V
+10 -22 V
+9 -20 V
+10 -21 V
+10 -19 V
+10 -19 V
+10 -18 V
+10 -18 V
+10 -17 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -13 V
+10 -13 V
+9 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+stroke
+2527 571 M
+9 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 396 M
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+9 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 2 V
+9 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+9 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+9 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+9 5 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+stroke
+1494 689 M
+10 6 V
+10 7 V
+10 6 V
+10 6 V
+9 7 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 8 V
+10 8 V
+10 7 V
+10 8 V
+10 8 V
+10 8 V
+9 9 V
+10 8 V
+10 9 V
+10 9 V
+10 8 V
+10 9 V
+10 10 V
+10 9 V
+10 9 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+9 11 V
+10 11 V
+10 10 V
+10 11 V
+10 12 V
+10 11 V
+10 12 V
+10 11 V
+10 12 V
+10 13 V
+10 12 V
+10 13 V
+10 13 V
+10 13 V
+9 0 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -10 V
+10 -11 V
+9 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -9 V
+10 -8 V
+9 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+stroke
+2527 639 M
+9 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=2$}}%
+\put(3037,1963){\rjust{$a=1$}}%
+\put(1965,2226){\cjust{Laplace Distribution (Two-sided Exponential)}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3153,200){\cjust{ 4}}%
+\put(2856,200){\cjust{ 3}}%
+\put(2559,200){\cjust{ 2}}%
+\put(2262,200){\cjust{ 1}}%
+\put(1965,200){\cjust{ 0}}%
+\put(1669,200){\cjust{-1}}%
+\put(1372,200){\cjust{-2}}%
+\put(1075,200){\cjust{-3}}%
+\put(778,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,1917){\rjust{ 0.5}}%
+\put(400,1600){\rjust{ 0.4}}%
+\put(400,1283){\rjust{ 0.3}}%
+\put(400,966){\rjust{ 0.2}}%
+\put(400,648){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-levy.tex b/gsl-1.9/doc/rand-levy.tex
new file mode 100644
index 0000000..7b1907f
--- /dev/null
+++ b/gsl-1.9/doc/rand-levy.tex
@@ -0,0 +1,1054 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-levy.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 719 M
+-31 0 V
+0.500 UL
+LTb
+481 1107 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 1882 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+778 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1372 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2559 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3153 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 378 M
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+9 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+9 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+9 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+9 2 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+9 4 V
+10 5 V
+10 5 V
+10 4 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+9 7 V
+10 8 V
+10 8 V
+10 8 V
+10 8 V
+10 9 V
+10 9 V
+10 10 V
+10 10 V
+10 10 V
+stroke
+1494 681 M
+10 11 V
+10 11 V
+10 12 V
+10 12 V
+9 13 V
+10 13 V
+10 13 V
+10 15 V
+10 14 V
+10 16 V
+10 16 V
+10 16 V
+10 17 V
+10 18 V
+10 19 V
+10 19 V
+10 20 V
+10 20 V
+10 22 V
+9 22 V
+10 22 V
+10 24 V
+10 23 V
+10 25 V
+10 25 V
+10 26 V
+10 26 V
+10 26 V
+10 27 V
+10 26 V
+10 27 V
+10 27 V
+10 26 V
+9 26 V
+10 26 V
+10 24 V
+10 24 V
+10 22 V
+10 21 V
+10 19 V
+10 18 V
+10 15 V
+10 13 V
+10 11 V
+10 8 V
+10 5 V
+10 3 V
+9 0 V
+10 -3 V
+10 -5 V
+10 -8 V
+10 -11 V
+10 -13 V
+10 -15 V
+10 -18 V
+10 -19 V
+10 -21 V
+10 -22 V
+10 -24 V
+10 -24 V
+10 -26 V
+9 -26 V
+10 -26 V
+10 -27 V
+10 -27 V
+10 -26 V
+10 -27 V
+10 -26 V
+10 -26 V
+10 -26 V
+10 -25 V
+10 -25 V
+10 -23 V
+10 -24 V
+10 -22 V
+9 -22 V
+10 -22 V
+10 -20 V
+10 -20 V
+10 -19 V
+10 -19 V
+10 -18 V
+10 -17 V
+10 -16 V
+10 -16 V
+10 -16 V
+10 -14 V
+10 -15 V
+10 -13 V
+10 -13 V
+9 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+stroke
+2527 601 M
+9 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -4 V
+10 -5 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 333 M
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+9 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+9 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 7 V
+10 6 V
+10 7 V
+9 7 V
+10 7 V
+10 7 V
+10 8 V
+10 8 V
+10 8 V
+10 8 V
+10 9 V
+10 9 V
+10 9 V
+10 10 V
+10 9 V
+10 11 V
+10 10 V
+9 10 V
+10 11 V
+10 12 V
+10 11 V
+10 12 V
+10 12 V
+10 12 V
+10 12 V
+10 13 V
+10 13 V
+10 13 V
+10 13 V
+10 14 V
+10 14 V
+9 14 V
+10 14 V
+10 15 V
+10 14 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 16 V
+10 15 V
+stroke
+1494 913 M
+10 16 V
+10 15 V
+10 16 V
+10 15 V
+9 16 V
+10 16 V
+10 15 V
+10 16 V
+10 16 V
+10 15 V
+10 16 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 14 V
+10 15 V
+10 14 V
+9 13 V
+10 14 V
+10 13 V
+10 13 V
+10 12 V
+10 13 V
+10 11 V
+10 12 V
+10 11 V
+10 10 V
+10 10 V
+10 10 V
+10 9 V
+10 8 V
+9 9 V
+10 7 V
+10 7 V
+10 7 V
+10 6 V
+10 5 V
+10 5 V
+10 4 V
+10 4 V
+10 3 V
+10 2 V
+10 2 V
+10 1 V
+10 1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -9 V
+10 -8 V
+10 -9 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -13 V
+10 -14 V
+9 -13 V
+10 -14 V
+10 -15 V
+10 -14 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -16 V
+9 -16 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -15 V
+10 -14 V
+stroke
+2527 779 M
+9 -14 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+9 -10 V
+10 -10 V
+10 -11 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$c=1, \alpha=2.0$}}%
+\put(3037,1963){\rjust{$c=1, \alpha=1.0$}}%
+\put(1965,2226){\cjust{Levy Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3153,200){\cjust{ 4}}%
+\put(2856,200){\cjust{ 3}}%
+\put(2559,200){\cjust{ 2}}%
+\put(2262,200){\cjust{ 1}}%
+\put(1965,200){\cjust{ 0}}%
+\put(1669,200){\cjust{-1}}%
+\put(1372,200){\cjust{-2}}%
+\put(1075,200){\cjust{-3}}%
+\put(778,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,1882){\rjust{ 0.4}}%
+\put(400,1494){\rjust{ 0.3}}%
+\put(400,1107){\rjust{ 0.2}}%
+\put(400,719){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-levyskew.tex b/gsl-1.9/doc/rand-levyskew.tex
new file mode 100644
index 0000000..07dafff
--- /dev/null
+++ b/gsl-1.9/doc/rand-levyskew.tex
@@ -0,0 +1,728 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-levyskew.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+531 331 M
+-31 0 V
+0.500 UL
+LTb
+531 1300 M
+-31 0 V
+0.500 UL
+LTb
+531 331 M
+0 -31 V
+0.500 UL
+LTb
+823 331 M
+0 -31 V
+0.500 UL
+LTb
+1115 331 M
+0 -31 V
+0.500 UL
+LTb
+1407 331 M
+0 -31 V
+0.500 UL
+LTb
+1699 331 M
+0 -31 V
+0.500 UL
+LTb
+1990 331 M
+0 -31 V
+0.500 UL
+LTb
+2282 331 M
+0 -31 V
+0.500 UL
+LTb
+2574 331 M
+0 -31 V
+0.500 UL
+LTb
+2866 331 M
+0 -31 V
+0.500 UL
+LTb
+3158 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+531 331 M
+2919 0 V
+0 1745 V
+-2919 0 V
+531 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+531 331 M
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+9 1 V
+10 0 V
+10 0 V
+10 0 V
+9 1 V
+10 0 V
+10 1 V
+10 1 V
+10 2 V
+9 1 V
+10 2 V
+10 2 V
+10 3 V
+9 4 V
+10 4 V
+10 5 V
+10 5 V
+9 7 V
+10 8 V
+10 9 V
+10 10 V
+9 11 V
+10 13 V
+10 14 V
+10 16 V
+9 18 V
+10 19 V
+10 22 V
+10 22 V
+stroke
+1527 532 M
+10 25 V
+9 26 V
+10 28 V
+10 30 V
+10 31 V
+9 33 V
+10 34 V
+10 35 V
+10 36 V
+9 37 V
+10 37 V
+10 38 V
+10 39 V
+9 38 V
+10 39 V
+10 38 V
+10 37 V
+10 37 V
+9 36 V
+10 35 V
+10 34 V
+10 32 V
+9 31 V
+10 29 V
+10 27 V
+10 26 V
+9 23 V
+10 22 V
+10 19 V
+10 18 V
+9 15 V
+10 13 V
+10 11 V
+10 9 V
+9 7 V
+10 5 V
+10 3 V
+10 1 V
+10 0 V
+9 -3 V
+10 -3 V
+10 -6 V
+10 -7 V
+9 -8 V
+10 -10 V
+10 -11 V
+10 -11 V
+9 -13 V
+10 -14 V
+10 -14 V
+10 -16 V
+9 -16 V
+10 -16 V
+10 -17 V
+10 -17 V
+9 -18 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -18 V
+9 -19 V
+10 -18 V
+10 -19 V
+10 -18 V
+9 -18 V
+10 -18 V
+10 -18 V
+10 -18 V
+9 -17 V
+10 -18 V
+10 -17 V
+10 -16 V
+9 -17 V
+10 -16 V
+10 -16 V
+10 -15 V
+9 -15 V
+10 -15 V
+10 -14 V
+10 -14 V
+10 -14 V
+9 -14 V
+10 -13 V
+10 -12 V
+10 -13 V
+9 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+9 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+9 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+9 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+9 -7 V
+10 -7 V
+stroke
+2542 693 M
+10 -7 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+531 331 M
+2919 0 V
+0 1745 V
+-2919 0 V
+531 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$c=1, \alpha=1.0, \beta=1.0$}}%
+\put(1990,2226){\cjust{Levy Skew Distribution}}%
+\put(1990,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3158,200){\cjust{ 4}}%
+\put(2866,200){\cjust{ 3}}%
+\put(2574,200){\cjust{ 2}}%
+\put(2282,200){\cjust{ 1}}%
+\put(1990,200){\cjust{ 0}}%
+\put(1699,200){\cjust{-1}}%
+\put(1407,200){\cjust{-2}}%
+\put(1115,200){\cjust{-3}}%
+\put(823,200){\cjust{-4}}%
+\put(531,200){\cjust{-5}}%
+\put(450,1300){\rjust{ 0.05}}%
+\put(450,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-logarithmic.tex b/gsl-1.9/doc/rand-logarithmic.tex
new file mode 100644
index 0000000..33b0d89
--- /dev/null
+++ b/gsl-1.9/doc/rand-logarithmic.tex
@@ -0,0 +1,794 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-logarithmic.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 580 M
+-31 0 V
+0.500 UL
+LTb
+481 830 M
+-31 0 V
+0.500 UL
+LTb
+481 1079 M
+-31 0 V
+0.500 UL
+LTb
+481 1328 M
+-31 0 V
+0.500 UL
+LTb
+481 1577 M
+-31 0 V
+0.500 UL
+LTb
+481 1827 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+751 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1021 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1291 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1561 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1831 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2100 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2370 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2640 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2910 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3180 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 1449 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -942 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -270 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1464 568 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+0 -113 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -54 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -29 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -17 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2457 355 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -9 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -6 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -3 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -2 V
+stroke
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$p=0.7$}}%
+\put(1965,2226){\cjust{Logarithmic Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3315,200){\cjust{ 10}}%
+\put(3045,200){\cjust{ 9}}%
+\put(2775,200){\cjust{ 8}}%
+\put(2505,200){\cjust{ 7}}%
+\put(2235,200){\cjust{ 6}}%
+\put(1966,200){\cjust{ 5}}%
+\put(1696,200){\cjust{ 4}}%
+\put(1426,200){\cjust{ 3}}%
+\put(1156,200){\cjust{ 2}}%
+\put(886,200){\cjust{ 1}}%
+\put(616,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.7}}%
+\put(400,1827){\rjust{ 0.6}}%
+\put(400,1577){\rjust{ 0.5}}%
+\put(400,1328){\rjust{ 0.4}}%
+\put(400,1079){\rjust{ 0.3}}%
+\put(400,830){\rjust{ 0.2}}%
+\put(400,580){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-logistic.tex b/gsl-1.9/doc/rand-logistic.tex
new file mode 100644
index 0000000..a56b79b
--- /dev/null
+++ b/gsl-1.9/doc/rand-logistic.tex
@@ -0,0 +1,1049 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-logistic.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 913 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+778 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1372 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+1965 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2559 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3153 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 370 M
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+9 1 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+9 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+9 6 V
+10 7 V
+10 6 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 8 V
+10 7 V
+10 8 V
+10 8 V
+10 9 V
+10 8 V
+10 9 V
+9 9 V
+10 9 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 11 V
+10 11 V
+10 11 V
+10 12 V
+10 11 V
+10 12 V
+10 13 V
+9 12 V
+10 13 V
+10 13 V
+10 14 V
+10 13 V
+10 14 V
+10 14 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 16 V
+10 16 V
+9 16 V
+10 17 V
+10 17 V
+10 16 V
+10 18 V
+10 17 V
+10 17 V
+10 18 V
+10 18 V
+10 18 V
+stroke
+1494 1150 M
+10 18 V
+10 19 V
+10 18 V
+10 18 V
+9 19 V
+10 19 V
+10 18 V
+10 19 V
+10 19 V
+10 19 V
+10 18 V
+10 19 V
+10 18 V
+10 19 V
+10 18 V
+10 18 V
+10 18 V
+10 18 V
+10 17 V
+9 17 V
+10 17 V
+10 17 V
+10 16 V
+10 16 V
+10 15 V
+10 15 V
+10 15 V
+10 14 V
+10 13 V
+10 13 V
+10 13 V
+10 12 V
+10 11 V
+9 11 V
+10 9 V
+10 10 V
+10 8 V
+10 8 V
+10 7 V
+10 7 V
+10 5 V
+10 5 V
+10 4 V
+10 3 V
+10 3 V
+10 1 V
+10 1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -10 V
+10 -9 V
+9 -11 V
+10 -11 V
+10 -12 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -14 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -16 V
+10 -16 V
+10 -17 V
+10 -17 V
+9 -17 V
+10 -17 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -18 V
+10 -19 V
+9 -19 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -18 V
+10 -16 V
+10 -17 V
+10 -17 V
+stroke
+2527 994 M
+9 -16 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -13 V
+9 -12 V
+10 -13 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+9 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -7 V
+9 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 535 M
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+9 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+9 4 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+9 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+9 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+9 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+9 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 3 V
+stroke
+1494 954 M
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+9 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+9 3 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+9 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+9 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+stroke
+2527 917 M
+9 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+9 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=2$}}%
+\put(3037,1963){\rjust{$a=1$}}%
+\put(1965,2226){\cjust{Logistic Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(3153,200){\cjust{ 4}}%
+\put(2856,200){\cjust{ 3}}%
+\put(2559,200){\cjust{ 2}}%
+\put(2262,200){\cjust{ 1}}%
+\put(1965,200){\cjust{ 0}}%
+\put(1669,200){\cjust{-1}}%
+\put(1372,200){\cjust{-2}}%
+\put(1075,200){\cjust{-3}}%
+\put(778,200){\cjust{-4}}%
+\put(481,200){\cjust{-5}}%
+\put(400,2076){\rjust{ 0.3}}%
+\put(400,1494){\rjust{ 0.2}}%
+\put(400,913){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-lognormal.tex b/gsl-1.9/doc/rand-lognormal.tex
new file mode 100644
index 0000000..1798e4b
--- /dev/null
+++ b/gsl-1.9/doc/rand-lognormal.tex
@@ -0,0 +1,1002 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-lognormal.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1577 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1471 331 M
+0 -31 V
+0.500 UL
+LTb
+2460 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+491 333 M
+10 22 V
+10 47 V
+10 70 V
+10 84 V
+10 94 V
+10 97 V
+9 99 V
+10 96 V
+10 94 V
+10 89 V
+10 85 V
+10 79 V
+10 74 V
+10 68 V
+10 63 V
+10 57 V
+10 53 V
+10 48 V
+10 44 V
+10 39 V
+9 35 V
+10 32 V
+10 28 V
+10 25 V
+10 22 V
+10 19 V
+10 16 V
+10 14 V
+10 12 V
+10 10 V
+10 8 V
+10 6 V
+10 4 V
+10 3 V
+9 1 V
+10 1 V
+10 -1 V
+10 -2 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -9 V
+10 -9 V
+9 -9 V
+10 -10 V
+10 -10 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+9 -12 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+9 -12 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+9 -11 V
+10 -10 V
+10 -11 V
+10 -10 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+stroke
+1504 1293 M
+10 -10 V
+10 -9 V
+10 -10 V
+9 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+9 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+9 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+stroke
+2536 698 M
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+491 331 M
+10 0 V
+10 1 V
+10 2 V
+10 4 V
+10 5 V
+10 6 V
+9 7 V
+10 8 V
+10 10 V
+10 10 V
+10 11 V
+10 12 V
+10 12 V
+10 12 V
+10 13 V
+10 13 V
+10 13 V
+10 14 V
+10 13 V
+10 13 V
+9 14 V
+10 13 V
+10 13 V
+10 13 V
+10 13 V
+10 12 V
+10 12 V
+10 13 V
+10 11 V
+10 12 V
+10 11 V
+10 11 V
+10 11 V
+10 11 V
+9 10 V
+10 10 V
+10 10 V
+10 9 V
+10 10 V
+10 9 V
+10 8 V
+10 9 V
+10 8 V
+10 8 V
+10 7 V
+10 8 V
+10 7 V
+10 7 V
+9 6 V
+10 7 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+9 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+9 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1504 934 M
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+stroke
+2536 793 M
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$\zeta=1, \sigma=1$}}%
+\put(3037,1963){\rjust{$\zeta=0, \sigma=1$}}%
+\put(1965,2226){\cjust{Lognormal Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 3}}%
+\put(2460,200){\cjust{ 2}}%
+\put(1471,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,1577){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-nbinomial.tex b/gsl-1.9/doc/rand-nbinomial.tex
new file mode 100644
index 0000000..be87b1c
--- /dev/null
+++ b/gsl-1.9/doc/rand-nbinomial.tex
@@ -0,0 +1,774 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-nbinomial.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 913 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+751 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1021 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1291 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1561 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1831 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2100 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2370 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2640 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2910 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3180 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 845 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 386 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 112 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -84 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1464 1259 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+0 -174 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -189 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -164 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -129 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2457 603 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -94 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -64 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -43 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -27 V
+stroke
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$p=0.5,n=3.5$}}%
+\put(1965,2226){\cjust{Negative Binomial Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3315,200){\cjust{ 10}}%
+\put(3045,200){\cjust{ 9}}%
+\put(2775,200){\cjust{ 8}}%
+\put(2505,200){\cjust{ 7}}%
+\put(2235,200){\cjust{ 6}}%
+\put(1966,200){\cjust{ 5}}%
+\put(1696,200){\cjust{ 4}}%
+\put(1426,200){\cjust{ 3}}%
+\put(1156,200){\cjust{ 2}}%
+\put(886,200){\cjust{ 1}}%
+\put(616,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.3}}%
+\put(400,1494){\rjust{ 0.2}}%
+\put(400,913){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-pareto.tex b/gsl-1.9/doc/rand-pareto.tex
new file mode 100644
index 0000000..a33c04f
--- /dev/null
+++ b/gsl-1.9/doc/rand-pareto.tex
@@ -0,0 +1,1029 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-pareto.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 767 M
+-31 0 V
+0.500 UL
+LTb
+481 1204 M
+-31 0 V
+0.500 UL
+LTb
+481 1640 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 867 V
+10 -28 V
+10 -27 V
+10 -26 V
+10 -24 V
+9 -24 V
+10 -22 V
+10 -21 V
+10 -20 V
+10 -20 V
+10 -18 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -13 V
+9 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+9 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+stroke
+1494 631 M
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -6 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+stroke
+2527 405 M
+9 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+9 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1494 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 1291 V
+10 -42 V
+9 -40 V
+10 -39 V
+10 -37 V
+10 -36 V
+10 -35 V
+10 -33 V
+10 -31 V
+10 -31 V
+10 -29 V
+10 -29 V
+10 -27 V
+10 -26 V
+10 -25 V
+10 -25 V
+9 -23 V
+10 -23 V
+10 -22 V
+10 -21 V
+10 -20 V
+10 -20 V
+10 -18 V
+10 -19 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -16 V
+10 -15 V
+10 -15 V
+9 -14 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+9 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+stroke
+2527 480 M
+9 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=3, b=2 $}}%
+\put(3037,1963){\rjust{$a=1, b=1$}}%
+\put(1965,2226){\cjust{Pareto Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 2}}%
+\put(400,1640){\rjust{ 1.5}}%
+\put(400,1204){\rjust{ 1}}%
+\put(400,767){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-pascal.tex b/gsl-1.9/doc/rand-pascal.tex
new file mode 100644
index 0000000..bbef1cd
--- /dev/null
+++ b/gsl-1.9/doc/rand-pascal.tex
@@ -0,0 +1,772 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-pascal.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 913 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+751 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1021 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1291 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1561 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1831 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2100 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2370 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2640 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2910 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3180 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 1058 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 364 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -182 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1474 1240 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+0 -227 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -205 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -159 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -113 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2467 536 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -77 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -50 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -31 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -19 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$p=0.5,n=3$}}%
+\put(1965,2226){\cjust{Pascal Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3315,200){\cjust{ 10}}%
+\put(3045,200){\cjust{ 9}}%
+\put(2775,200){\cjust{ 8}}%
+\put(2505,200){\cjust{ 7}}%
+\put(2235,200){\cjust{ 6}}%
+\put(1966,200){\cjust{ 5}}%
+\put(1696,200){\cjust{ 4}}%
+\put(1426,200){\cjust{ 3}}%
+\put(1156,200){\cjust{ 2}}%
+\put(886,200){\cjust{ 1}}%
+\put(616,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.3}}%
+\put(400,1494){\rjust{ 0.2}}%
+\put(400,913){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-poisson.tex b/gsl-1.9/doc/rand-poisson.tex
new file mode 100644
index 0000000..32546cd
--- /dev/null
+++ b/gsl-1.9/doc/rand-poisson.tex
@@ -0,0 +1,774 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-poisson.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 913 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+751 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1021 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1291 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1561 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+1831 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2100 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2370 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2640 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+2910 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3180 331 M
+0 -63 V
+135 63 R
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -63 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 808 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 717 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 298 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -249 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+1464 1574 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+0 -466 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -388 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+0 -227 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -104 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+stroke
+2457 389 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -40 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -13 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -4 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+0 -1 V
+stroke
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1963){\rjust{$\mu=2.5$}}%
+\put(1965,2226){\cjust{Poisson Distribution}}%
+\put(1965,50){\cjust{$k$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3315,200){\cjust{10}}%
+\put(3045,200){\cjust{ 9}}%
+\put(2775,200){\cjust{ 8}}%
+\put(2505,200){\cjust{ 7}}%
+\put(2235,200){\cjust{ 6 }}%
+\put(1966,200){\cjust{5}}%
+\put(1696,200){\cjust{ 4}}%
+\put(1426,200){\cjust{ 3}}%
+\put(1156,200){\cjust{ 2}}%
+\put(886,200){\cjust{ 1}}%
+\put(616,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.3}}%
+\put(400,1494){\rjust{ 0.2}}%
+\put(400,913){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-rayleigh-tail.tex b/gsl-1.9/doc/rand-rayleigh-tail.tex
new file mode 100644
index 0000000..b4593a3
--- /dev/null
+++ b/gsl-1.9/doc/rand-rayleigh-tail.tex
@@ -0,0 +1,1019 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-rayleigh-tail.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 1131 M
+-31 0 V
+0.500 UL
+LTb
+481 1932 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 1601 V
+10 -1 V
+10 -1 V
+10 -3 V
+10 -3 V
+9 -4 V
+10 -5 V
+10 -5 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -11 V
+10 -12 V
+10 -13 V
+10 -12 V
+9 -14 V
+10 -14 V
+10 -14 V
+10 -15 V
+10 -16 V
+10 -16 V
+10 -16 V
+10 -16 V
+10 -17 V
+10 -18 V
+10 -17 V
+10 -18 V
+10 -18 V
+10 -19 V
+9 -18 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -20 V
+10 -19 V
+10 -20 V
+10 -19 V
+10 -20 V
+stroke
+1494 1382 M
+10 -20 V
+10 -19 V
+10 -20 V
+10 -20 V
+9 -19 V
+10 -20 V
+10 -19 V
+10 -20 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -18 V
+10 -17 V
+9 -18 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -16 V
+10 -16 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+9 -14 V
+10 -14 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+9 -10 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+stroke
+2527 355 M
+9 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 201 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+9 6 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 6 V
+10 5 V
+10 5 V
+10 6 V
+10 5 V
+9 5 V
+10 6 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+9 4 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+9 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+stroke
+1494 821 M
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+stroke
+2527 654 M
+9 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$a=0.5,\sigma=2$}}%
+\put(3037,1963){\rjust{$a=1,\sigma=1$}}%
+\put(1965,2226){\cjust{Rayleigh Tail Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,1932){\rjust{ 1}}%
+\put(400,1131){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-rayleigh.tex b/gsl-1.9/doc/rand-rayleigh.tex
new file mode 100644
index 0000000..e4d02c3
--- /dev/null
+++ b/gsl-1.9/doc/rand-rayleigh.tex
@@ -0,0 +1,1044 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-rayleigh.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 580 M
+-31 0 V
+0.500 UL
+LTb
+481 830 M
+-31 0 V
+0.500 UL
+LTb
+481 1079 M
+-31 0 V
+0.500 UL
+LTb
+481 1328 M
+-31 0 V
+0.500 UL
+LTb
+481 1577 M
+-31 0 V
+0.500 UL
+LTb
+481 1827 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1075 331 M
+0 -31 V
+0.500 UL
+LTb
+1669 331 M
+0 -31 V
+0.500 UL
+LTb
+2262 331 M
+0 -31 V
+0.500 UL
+LTb
+2856 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 331 M
+10 42 V
+10 41 V
+10 42 V
+10 41 V
+10 42 V
+10 41 V
+10 41 V
+9 41 V
+10 40 V
+10 40 V
+10 40 V
+10 39 V
+10 39 V
+10 39 V
+10 38 V
+10 38 V
+10 37 V
+10 36 V
+10 36 V
+10 35 V
+10 35 V
+9 34 V
+10 33 V
+10 33 V
+10 32 V
+10 31 V
+10 30 V
+10 30 V
+10 29 V
+10 28 V
+10 27 V
+10 26 V
+10 25 V
+10 25 V
+10 23 V
+9 23 V
+10 22 V
+10 20 V
+10 20 V
+10 19 V
+10 18 V
+10 17 V
+10 16 V
+10 15 V
+10 14 V
+10 13 V
+10 13 V
+10 11 V
+10 10 V
+9 9 V
+10 9 V
+10 7 V
+10 7 V
+10 5 V
+10 5 V
+10 4 V
+10 3 V
+10 2 V
+10 1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -3 V
+9 -4 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -9 V
+10 -9 V
+10 -10 V
+10 -11 V
+10 -11 V
+10 -12 V
+10 -12 V
+9 -13 V
+10 -13 V
+10 -14 V
+10 -14 V
+10 -14 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -17 V
+10 -16 V
+10 -17 V
+10 -17 V
+10 -18 V
+9 -17 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -19 V
+10 -18 V
+stroke
+1494 1324 M
+10 -19 V
+10 -18 V
+10 -19 V
+10 -19 V
+9 -18 V
+10 -19 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -18 V
+10 -17 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -17 V
+9 -16 V
+10 -17 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -15 V
+10 -14 V
+10 -13 V
+10 -14 V
+9 -13 V
+10 -13 V
+10 -13 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+9 -10 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+stroke
+2527 354 M
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+9 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+9 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 10 V
+10 11 V
+10 10 V
+10 11 V
+10 10 V
+10 10 V
+10 11 V
+9 10 V
+10 11 V
+10 10 V
+10 10 V
+10 10 V
+10 11 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 11 V
+10 10 V
+10 10 V
+9 9 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 9 V
+10 10 V
+10 9 V
+10 10 V
+10 9 V
+10 10 V
+10 9 V
+10 9 V
+10 9 V
+9 10 V
+10 9 V
+10 9 V
+10 8 V
+10 9 V
+10 9 V
+10 9 V
+10 8 V
+10 9 V
+10 8 V
+10 8 V
+10 8 V
+10 9 V
+10 8 V
+9 7 V
+10 8 V
+10 8 V
+10 8 V
+10 7 V
+10 8 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 6 V
+9 6 V
+10 7 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+10 6 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+9 5 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+9 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+stroke
+1494 1070 M
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+9 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+9 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+stroke
+2527 818 M
+9 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+9 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$\sigma=2$}}%
+\put(3037,1963){\rjust{$\sigma=1$}}%
+\put(1965,2226){\cjust{Rayleigh Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 5}}%
+\put(2856,200){\cjust{ 4}}%
+\put(2262,200){\cjust{ 3}}%
+\put(1669,200){\cjust{ 2}}%
+\put(1075,200){\cjust{ 1}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 0.7}}%
+\put(400,1827){\rjust{ 0.6}}%
+\put(400,1577){\rjust{ 0.5}}%
+\put(400,1328){\rjust{ 0.4}}%
+\put(400,1079){\rjust{ 0.3}}%
+\put(400,830){\rjust{ 0.2}}%
+\put(400,580){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-tdist.tex b/gsl-1.9/doc/rand-tdist.tex
new file mode 100644
index 0000000..c0ef6b0
--- /dev/null
+++ b/gsl-1.9/doc/rand-tdist.tex
@@ -0,0 +1,1049 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-tdist.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 680 M
+-31 0 V
+0.500 UL
+LTb
+481 1029 M
+-31 0 V
+0.500 UL
+LTb
+481 1378 M
+-31 0 V
+0.500 UL
+LTb
+481 1727 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+852 331 M
+0 -31 V
+0.500 UL
+LTb
+1223 331 M
+0 -31 V
+0.500 UL
+LTb
+1594 331 M
+0 -31 V
+0.500 UL
+LTb
+1966 331 M
+0 -31 V
+0.500 UL
+LTb
+2337 331 M
+0 -31 V
+0.500 UL
+LTb
+2708 331 M
+0 -31 V
+0.500 UL
+LTb
+3079 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 396 M
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+9 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+9 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+9 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+9 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+9 6 V
+10 5 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 8 V
+10 8 V
+9 8 V
+10 9 V
+10 8 V
+10 9 V
+10 10 V
+10 9 V
+10 10 V
+10 10 V
+10 11 V
+10 11 V
+stroke
+1494 756 M
+10 11 V
+10 12 V
+10 12 V
+10 12 V
+9 12 V
+10 14 V
+10 13 V
+10 14 V
+10 14 V
+10 15 V
+10 15 V
+10 15 V
+10 16 V
+10 16 V
+10 17 V
+10 17 V
+10 17 V
+10 17 V
+10 18 V
+9 19 V
+10 18 V
+10 19 V
+10 19 V
+10 19 V
+10 19 V
+10 20 V
+10 19 V
+10 19 V
+10 19 V
+10 19 V
+10 19 V
+10 18 V
+10 18 V
+9 17 V
+10 16 V
+10 16 V
+10 15 V
+10 13 V
+10 13 V
+10 12 V
+10 10 V
+10 9 V
+10 8 V
+10 6 V
+10 5 V
+10 3 V
+10 2 V
+9 0 V
+10 -2 V
+10 -3 V
+10 -5 V
+10 -6 V
+10 -8 V
+10 -9 V
+10 -10 V
+10 -12 V
+10 -13 V
+10 -13 V
+10 -15 V
+10 -16 V
+10 -16 V
+9 -17 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -20 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -19 V
+10 -18 V
+9 -19 V
+10 -18 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -17 V
+10 -16 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -14 V
+10 -14 V
+10 -13 V
+10 -14 V
+9 -12 V
+10 -12 V
+10 -12 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -9 V
+10 -10 V
+10 -9 V
+10 -8 V
+10 -9 V
+stroke
+2527 669 M
+9 -8 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+9 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+9 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 349 M
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+9 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+9 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 4 V
+9 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 5 V
+10 5 V
+10 5 V
+10 5 V
+10 6 V
+9 5 V
+10 6 V
+10 6 V
+10 6 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 8 V
+10 8 V
+10 9 V
+10 8 V
+10 9 V
+9 9 V
+10 10 V
+10 10 V
+10 10 V
+10 10 V
+10 11 V
+10 11 V
+10 12 V
+10 11 V
+10 13 V
+10 12 V
+10 13 V
+10 14 V
+10 13 V
+9 14 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 16 V
+10 17 V
+10 16 V
+10 18 V
+10 17 V
+stroke
+1494 903 M
+10 18 V
+10 18 V
+10 19 V
+10 18 V
+9 19 V
+10 20 V
+10 20 V
+10 20 V
+10 20 V
+10 20 V
+10 21 V
+10 20 V
+10 21 V
+10 21 V
+10 21 V
+10 21 V
+10 21 V
+10 21 V
+10 21 V
+9 21 V
+10 21 V
+10 20 V
+10 21 V
+10 19 V
+10 20 V
+10 19 V
+10 19 V
+10 18 V
+10 18 V
+10 17 V
+10 16 V
+10 16 V
+10 15 V
+9 14 V
+10 14 V
+10 12 V
+10 12 V
+10 11 V
+10 10 V
+10 8 V
+10 8 V
+10 7 V
+10 5 V
+10 5 V
+10 3 V
+10 3 V
+10 1 V
+9 0 V
+10 -1 V
+10 -3 V
+10 -3 V
+10 -5 V
+10 -5 V
+10 -7 V
+10 -8 V
+10 -8 V
+10 -10 V
+10 -11 V
+10 -12 V
+10 -12 V
+10 -14 V
+9 -14 V
+10 -15 V
+10 -16 V
+10 -16 V
+10 -17 V
+10 -18 V
+10 -18 V
+10 -19 V
+10 -19 V
+10 -20 V
+10 -19 V
+10 -21 V
+10 -20 V
+10 -21 V
+9 -21 V
+10 -21 V
+10 -21 V
+10 -21 V
+10 -21 V
+10 -21 V
+10 -21 V
+10 -21 V
+10 -20 V
+10 -21 V
+10 -20 V
+10 -20 V
+10 -20 V
+10 -20 V
+10 -20 V
+9 -19 V
+10 -18 V
+10 -19 V
+10 -18 V
+10 -18 V
+10 -17 V
+10 -18 V
+10 -16 V
+10 -17 V
+10 -16 V
+10 -15 V
+10 -15 V
+10 -15 V
+10 -15 V
+stroke
+2527 759 M
+9 -14 V
+10 -13 V
+10 -14 V
+10 -13 V
+10 -12 V
+10 -13 V
+10 -11 V
+10 -12 V
+10 -11 V
+10 -11 V
+10 -10 V
+10 -10 V
+10 -10 V
+10 -10 V
+9 -9 V
+10 -9 V
+10 -8 V
+10 -9 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+9 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 0 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1863){\rjust{$\nu_1=5$}}%
+\put(3037,1963){\rjust{$\nu_1=1$}}%
+\put(1965,2226){\cjust{Student's t distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 4}}%
+\put(3079,200){\cjust{ 3}}%
+\put(2708,200){\cjust{ 2}}%
+\put(2337,200){\cjust{ 1}}%
+\put(1966,200){\cjust{ 0}}%
+\put(1594,200){\cjust{-1}}%
+\put(1223,200){\cjust{-2}}%
+\put(852,200){\cjust{-3}}%
+\put(481,200){\cjust{-4}}%
+\put(400,2076){\rjust{ 0.5}}%
+\put(400,1727){\rjust{ 0.4}}%
+\put(400,1378){\rjust{ 0.3}}%
+\put(400,1029){\rjust{ 0.2}}%
+\put(400,680){\rjust{ 0.1}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/rand-weibull.tex b/gsl-1.9/doc/rand-weibull.tex
new file mode 100644
index 0000000..92da0cc
--- /dev/null
+++ b/gsl-1.9/doc/rand-weibull.tex
@@ -0,0 +1,1330 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(3600,2376)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: rand-weibull.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 360 237
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+481 331 M
+-31 0 V
+0.500 UL
+LTb
+481 913 M
+-31 0 V
+0.500 UL
+LTb
+481 1494 M
+-31 0 V
+0.500 UL
+LTb
+481 2076 M
+-31 0 V
+0.500 UL
+LTb
+481 331 M
+0 -31 V
+0.500 UL
+LTb
+1223 331 M
+0 -31 V
+0.500 UL
+LTb
+1966 331 M
+0 -31 V
+0.500 UL
+LTb
+2708 331 M
+0 -31 V
+0.500 UL
+LTb
+3450 331 M
+0 -31 V
+0.500 UL
+LTb
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UL
+LT0
+LTb
+LT0
+3087 1963 M
+263 0 V
+481 1494 M
+10 -7 V
+10 -8 V
+10 -8 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -8 V
+9 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -8 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+9 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+9 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+stroke
+1494 919 M
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+9 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+stroke
+2527 624 M
+9 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+9 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+1.000 UL
+LT1
+LTb
+LT1
+3087 1863 M
+263 0 V
+481 331 M
+10 16 V
+10 15 V
+10 16 V
+10 15 V
+10 16 V
+10 15 V
+10 16 V
+9 15 V
+10 16 V
+10 15 V
+10 15 V
+10 16 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 15 V
+10 14 V
+9 15 V
+10 15 V
+10 14 V
+10 14 V
+10 15 V
+10 14 V
+10 14 V
+10 14 V
+10 13 V
+10 14 V
+10 14 V
+10 13 V
+10 13 V
+10 14 V
+9 13 V
+10 13 V
+10 12 V
+10 13 V
+10 13 V
+10 12 V
+10 12 V
+10 12 V
+10 12 V
+10 12 V
+10 11 V
+10 12 V
+10 11 V
+10 11 V
+9 11 V
+10 11 V
+10 10 V
+10 10 V
+10 11 V
+10 10 V
+10 9 V
+10 10 V
+10 10 V
+10 9 V
+10 9 V
+10 9 V
+10 8 V
+10 9 V
+10 8 V
+9 8 V
+10 8 V
+10 8 V
+10 8 V
+10 7 V
+10 7 V
+10 7 V
+10 7 V
+10 6 V
+10 6 V
+10 7 V
+10 5 V
+10 6 V
+10 6 V
+9 5 V
+10 5 V
+10 5 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+9 3 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+stroke
+1494 1328 M
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+9 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+9 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -7 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+stroke
+2527 811 M
+9 -6 V
+10 -7 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -7 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+9 -6 V
+10 -6 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -6 V
+10 -5 V
+10 -5 V
+10 -6 V
+9 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -5 V
+10 -4 V
+10 -5 V
+10 -4 V
+9 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -5 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -4 V
+10 -4 V
+9 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -4 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -3 V
+9 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -3 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -3 V
+9 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -3 V
+10 -2 V
+10 -2 V
+10 -2 V
+1.000 UL
+LT2
+LTb
+LT2
+3087 1763 M
+263 0 V
+481 331 M
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+9 0 V
+10 1 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+10 1 V
+10 1 V
+9 0 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+9 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+9 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+10 3 V
+10 2 V
+9 3 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+9 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+9 4 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+stroke
+1494 526 M
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+9 3 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+9 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 5 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+9 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+10 4 V
+9 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 4 V
+10 3 V
+10 4 V
+10 3 V
+9 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 4 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+10 3 V
+stroke
+2527 928 M
+9 3 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 3 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 3 V
+10 2 V
+10 2 V
+9 3 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 2 V
+10 1 V
+10 2 V
+10 2 V
+9 1 V
+10 2 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 2 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 1 V
+10 0 V
+10 1 V
+9 1 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 1 V
+10 0 V
+10 0 V
+10 0 V
+10 0 V
+9 -1 V
+10 0 V
+10 0 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 0 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+9 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -1 V
+10 -2 V
+10 -2 V
+9 -1 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+10 -2 V
+0.500 UL
+LTb
+481 331 M
+2969 0 V
+0 1745 V
+-2969 0 V
+481 331 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(3037,1763){\rjust{$a=2,b=3$}}%
+\put(3037,1863){\rjust{$a=1,b=2$}}%
+\put(3037,1963){\rjust{$a=1,b=1$}}%
+\put(1965,2226){\cjust{Weibull Distribution}}%
+\put(1965,50){\cjust{$x$}}%
+\put(100,1203){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(x)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(3450,200){\cjust{ 2}}%
+\put(2708,200){\cjust{ 1.5}}%
+\put(1966,200){\cjust{ 1}}%
+\put(1223,200){\cjust{ 0.5}}%
+\put(481,200){\cjust{ 0}}%
+\put(400,2076){\rjust{ 1.5}}%
+\put(400,1494){\rjust{ 1}}%
+\put(400,913){\rjust{ 0.5}}%
+\put(400,331){\rjust{ 0}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/randist.texi b/gsl-1.9/doc/randist.texi
new file mode 100644
index 0000000..e193a09
--- /dev/null
+++ b/gsl-1.9/doc/randist.texi
@@ -0,0 +1,2296 @@
+@cindex random number distributions
+@cindex cumulative distribution functions (CDFs)
+@cindex CDFs, cumulative distribution functions
+@cindex inverse cumulative distribution functions
+@cindex quantile functions
+This chapter describes functions for generating random variates and
+computing their probability distributions. Samples from the
+distributions described in this chapter can be obtained using any of the
+random number generators in the library as an underlying source of
+randomness.
+
+In the simplest cases a non-uniform distribution can be obtained
+analytically from the uniform distribution of a random number generator
+by applying an appropriate transformation. This method uses one call to
+the random number generator. More complicated distributions are created
+by the @dfn{acceptance-rejection} method, which compares the desired
+distribution against a distribution which is similar and known
+analytically. This usually requires several samples from the generator.
+
+The library also provides cumulative distribution functions and inverse
+cumulative distribution functions, sometimes referred to as quantile
+functions. The cumulative distribution functions and their inverses are
+computed separately for the upper and lower tails of the distribution,
+allowing full accuracy to be retained for small results.
+
+The functions for random variates and probability density functions
+described in this section are declared in @file{gsl_randist.h}. The
+corresponding cumulative distribution functions are declared in
+@file{gsl_cdf.h}.
+
+Note that the discrete random variate functions always
+return a value of type @code{unsigned int}, and on most platforms this
+has a maximum value of @c{$2^{32}-1 \approx 4.29\times10^9$}
+@math{2^32-1 ~=~ 4.29e9}. They should only be called with
+a safe range of parameters (where there is a negligible probability of
+a variate exceeding this limit) to prevent incorrect results due to
+overflow.
+
+@menu
+* Random Number Distribution Introduction::
+* The Gaussian Distribution::
+* The Gaussian Tail Distribution::
+* The Bivariate Gaussian Distribution::
+* The Exponential Distribution::
+* The Laplace Distribution::
+* The Exponential Power Distribution::
+* The Cauchy Distribution::
+* The Rayleigh Distribution::
+* The Rayleigh Tail Distribution::
+* The Landau Distribution::
+* The Levy alpha-Stable Distributions::
+* The Levy skew alpha-Stable Distribution::
+* The Gamma Distribution::
+* The Flat (Uniform) Distribution::
+* The Lognormal Distribution::
+* The Chi-squared Distribution::
+* The F-distribution::
+* The t-distribution::
+* The Beta Distribution::
+* The Logistic Distribution::
+* The Pareto Distribution::
+* Spherical Vector Distributions::
+* The Weibull Distribution::
+* The Type-1 Gumbel Distribution::
+* The Type-2 Gumbel Distribution::
+* The Dirichlet Distribution::
+* General Discrete Distributions::
+* The Poisson Distribution::
+* The Bernoulli Distribution::
+* The Binomial Distribution::
+* The Multinomial Distribution::
+* The Negative Binomial Distribution::
+* The Pascal Distribution::
+* The Geometric Distribution::
+* The Hypergeometric Distribution::
+* The Logarithmic Distribution::
+* Shuffling and Sampling::
+* Random Number Distribution Examples::
+* Random Number Distribution References and Further Reading::
+@end menu
+
+@node Random Number Distribution Introduction
+@section Introduction
+
+Continuous random number distributions are defined by a probability
+density function, @math{p(x)}, such that the probability of @math{x}
+occurring in the infinitesimal range @math{x} to @math{x+dx} is @c{$p\,dx$}
+@math{p dx}.
+
+The cumulative distribution function for the lower tail @math{P(x)} is
+defined by the integral,
+@tex
+\beforedisplay
+$$
+P(x) = \int_{-\infty}^{x} dx' p(x')
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+P(x) = \int_@{-\infty@}^@{x@} dx' p(x')
+@end example
+
+@end ifinfo
+@noindent
+and gives the probability of a variate taking a value less than @math{x}.
+
+The cumulative distribution function for the upper tail @math{Q(x)} is
+defined by the integral,
+@tex
+\beforedisplay
+$$
+Q(x) = \int_{x}^{+\infty} dx' p(x')
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+Q(x) = \int_@{x@}^@{+\infty@} dx' p(x')
+@end example
+
+@end ifinfo
+@noindent
+and gives the probability of a variate taking a value greater than @math{x}.
+
+The upper and lower cumulative distribution functions are related by
+@math{P(x) + Q(x) = 1} and satisfy @c{$0 \le P(x) \le 1$}
+@math{0 <= P(x) <= 1}, @c{$0 \le Q(x) \le 1$}
+@math{0 <= Q(x) <= 1}.
+
+The inverse cumulative distributions, @c{$x=P^{-1}(P)$}
+@math{x=P^@{-1@}(P)} and @c{$x=Q^{-1}(Q)$}
+@math{x=Q^@{-1@}(Q)} give the values of @math{x}
+which correspond to a specific value of @math{P} or @math{Q}.
+They can be used to find confidence limits from probability values.
+
+For discrete distributions the probability of sampling the integer
+value @math{k} is given by @math{p(k)}, where @math{\sum_k p(k) = 1}.
+The cumulative distribution for the lower tail @math{P(k)} of a
+discrete distribution is defined as,
+@tex
+\beforedisplay
+$$
+P(k) = \sum_{i \le k} p(i)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+P(k) = \sum_@{i <= k@} p(i)
+@end example
+
+@end ifinfo
+@noindent
+where the sum is over the allowed range of the distribution less than
+or equal to @math{k}.
+
+The cumulative distribution for the upper tail of a discrete
+distribution @math{Q(k)} is defined as
+@tex
+\beforedisplay
+$$
+Q(k) = \sum_{i > k} p(i)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+Q(k) = \sum_@{i > k@} p(i)
+@end example
+
+@end ifinfo
+@noindent
+giving the sum of probabilities for all values greater than @math{k}.
+These two definitions satisfy the identity @math{P(k)+Q(k)=1}.
+
+If the range of the distribution is 1 to @math{n} inclusive then
+@math{P(n)=1}, @math{Q(n)=0} while @math{P(1) = p(1)},
+@math{Q(1)=1-p(1)}.
+
+@page
+@node The Gaussian Distribution
+@section The Gaussian Distribution
+@deftypefun double gsl_ran_gaussian (const gsl_rng * @var{r}, double @var{sigma})
+@cindex Gaussian distribution
+This function returns a Gaussian random variate, with mean zero and
+standard deviation @var{sigma}. The probability distribution for
+Gaussian random variates is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over \sqrt{2 \pi \sigma^2}} \exp (-x^2 / 2\sigma^2) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over \sqrt@{2 \pi \sigma^2@}@} \exp (-x^2 / 2\sigma^2) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x} in the range @math{-\infty} to @math{+\infty}. Use the
+transformation @math{z = \mu + x} on the numbers returned by
+@code{gsl_ran_gaussian} to obtain a Gaussian distribution with mean
+@math{\mu}. This function uses the Box-Mueller algorithm which requires two
+calls to the random number generator @var{r}.
+@end deftypefun
+
+@deftypefun double gsl_ran_gaussian_pdf (double @var{x}, double @var{sigma})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Gaussian distribution with standard deviation @var{sigma}, using
+the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-gaussian.tex}
+@end tex
+
+@deftypefun double gsl_ran_gaussian_ziggurat (const gsl_rng * @var{r}, double @var{sigma})
+@deftypefunx double gsl_ran_gaussian_ratio_method (const gsl_rng * @var{r}, double @var{sigma})
+This function computes a Gaussian random variate using the alternative
+Marsaglia-Tsang ziggurat and Kinderman-Monahan-Leva ratio methods. The
+Ziggurat algorithm is the fastest available algorithm in most cases.
+@end deftypefun
+
+@deftypefun double gsl_ran_ugaussian (const gsl_rng * @var{r})
+@deftypefunx double gsl_ran_ugaussian_pdf (double @var{x})
+@deftypefunx double gsl_ran_ugaussian_ratio_method (const gsl_rng * @var{r})
+These functions compute results for the unit Gaussian distribution. They
+are equivalent to the functions above with a standard deviation of one,
+@var{sigma} = 1.
+@end deftypefun
+
+@deftypefun double gsl_cdf_gaussian_P (double @var{x}, double @var{sigma})
+@deftypefunx double gsl_cdf_gaussian_Q (double @var{x}, double @var{sigma})
+@deftypefunx double gsl_cdf_gaussian_Pinv (double @var{P}, double @var{sigma})
+@deftypefunx double gsl_cdf_gaussian_Qinv (double @var{Q}, double @var{sigma})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Gaussian
+distribution with standard deviation @var{sigma}.
+@end deftypefun
+
+@deftypefun double gsl_cdf_ugaussian_P (double @var{x})
+@deftypefunx double gsl_cdf_ugaussian_Q (double @var{x})
+@deftypefunx double gsl_cdf_ugaussian_Pinv (double @var{P})
+@deftypefunx double gsl_cdf_ugaussian_Qinv (double @var{Q})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the unit Gaussian
+distribution.
+@end deftypefun
+
+@page
+@node The Gaussian Tail Distribution
+@section The Gaussian Tail Distribution
+@deftypefun double gsl_ran_gaussian_tail (const gsl_rng * @var{r}, double @var{a}, double @var{sigma})
+@cindex Gaussian Tail distribution
+This function provides random variates from the upper tail of a Gaussian
+distribution with standard deviation @var{sigma}. The values returned
+are larger than the lower limit @var{a}, which must be positive. The
+method is based on Marsaglia's famous rectangle-wedge-tail algorithm (Ann.
+Math. Stat. 32, 894--899 (1961)), with this aspect explained in Knuth, v2,
+3rd ed, p139,586 (exercise 11).
+
+The probability distribution for Gaussian tail random variates is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over N(a;\sigma) \sqrt{2 \pi \sigma^2}} \exp (- x^2 / 2\sigma^2) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over N(a;\sigma) \sqrt@{2 \pi \sigma^2@}@} \exp (- x^2/(2 \sigma^2)) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x > a} where @math{N(a;\sigma)} is the normalization constant,
+@tex
+\beforedisplay
+$$
+N(a;\sigma) = {1 \over 2} \hbox{erfc}\left({a \over \sqrt{2 \sigma^2}}\right).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+N(a;\sigma) = (1/2) erfc(a / sqrt(2 sigma^2)).
+@end example
+@end ifinfo
+
+@end deftypefun
+
+@deftypefun double gsl_ran_gaussian_tail_pdf (double @var{x}, double @var{a}, double @var{sigma})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Gaussian tail distribution with standard deviation @var{sigma} and
+lower limit @var{a}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-gaussian-tail.tex}
+@end tex
+
+@deftypefun double gsl_ran_ugaussian_tail (const gsl_rng * @var{r}, double @var{a})
+@deftypefunx double gsl_ran_ugaussian_tail_pdf (double @var{x}, double @var{a})
+These functions compute results for the tail of a unit Gaussian
+distribution. They are equivalent to the functions above with a standard
+deviation of one, @var{sigma} = 1.
+@end deftypefun
+
+
+@page
+@node The Bivariate Gaussian Distribution
+@section The Bivariate Gaussian Distribution
+
+@deftypefun void gsl_ran_bivariate_gaussian (const gsl_rng * @var{r}, double @var{sigma_x}, double @var{sigma_y}, double @var{rho}, double * @var{x}, double * @var{y})
+@cindex Bivariate Gaussian distribution
+@cindex two dimensional Gaussian distribution
+@cindex Gaussian distribution, bivariate
+This function generates a pair of correlated Gaussian variates, with
+mean zero, correlation coefficient @var{rho} and standard deviations
+@var{sigma_x} and @var{sigma_y} in the @math{x} and @math{y} directions.
+The probability distribution for bivariate Gaussian random variates is,
+@tex
+\beforedisplay
+$$
+p(x,y) dx dy = {1 \over 2 \pi \sigma_x \sigma_y \sqrt{1-\rho^2}} \exp \left(-{(x^2/\sigma_x^2 + y^2/\sigma_y^2 - 2 \rho x y/(\sigma_x\sigma_y)) \over 2(1-\rho^2)}\right) dx dy
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x,y) dx dy = @{1 \over 2 \pi \sigma_x \sigma_y \sqrt@{1-\rho^2@}@} \exp (-(x^2/\sigma_x^2 + y^2/\sigma_y^2 - 2 \rho x y/(\sigma_x\sigma_y))/2(1-\rho^2)) dx dy
+@end example
+
+@end ifinfo
+@noindent
+for @math{x,y} in the range @math{-\infty} to @math{+\infty}. The
+correlation coefficient @var{rho} should lie between @math{1} and
+@math{-1}.
+@end deftypefun
+
+@deftypefun double gsl_ran_bivariate_gaussian_pdf (double @var{x}, double @var{y}, double @var{sigma_x}, double @var{sigma_y}, double @var{rho})
+This function computes the probability density @math{p(x,y)} at
+(@var{x},@var{y}) for a bivariate Gaussian distribution with standard
+deviations @var{sigma_x}, @var{sigma_y} and correlation coefficient
+@var{rho}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-bivariate-gaussian.tex}
+@end tex
+
+@page
+@node The Exponential Distribution
+@section The Exponential Distribution
+@deftypefun double gsl_ran_exponential (const gsl_rng * @var{r}, double @var{mu})
+@cindex Exponential distribution
+This function returns a random variate from the exponential distribution
+with mean @var{mu}. The distribution is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over \mu} \exp(-x/\mu) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over \mu@} \exp(-x/\mu) dx
+@end example
+
+@end ifinfo
+@noindent
+for @c{$x \ge 0$}
+@math{x >= 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_exponential_pdf (double @var{x}, double @var{mu})
+This function computes the probability density @math{p(x)} at @var{x}
+for an exponential distribution with mean @var{mu}, using the formula
+given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-exponential.tex}
+@end tex
+
+@deftypefun double gsl_cdf_exponential_P (double @var{x}, double @var{mu})
+@deftypefunx double gsl_cdf_exponential_Q (double @var{x}, double @var{mu})
+@deftypefunx double gsl_cdf_exponential_Pinv (double @var{P}, double @var{mu})
+@deftypefunx double gsl_cdf_exponential_Qinv (double @var{Q}, double @var{mu})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the exponential
+distribution with mean @var{mu}.
+@end deftypefun
+
+@page
+@node The Laplace Distribution
+@section The Laplace Distribution
+@deftypefun double gsl_ran_laplace (const gsl_rng * @var{r}, double @var{a})
+@cindex two-sided exponential distribution
+@cindex Laplace distribution
+This function returns a random variate from the Laplace distribution
+with width @var{a}. The distribution is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over 2 a} \exp(-|x/a|) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over 2 a@} \exp(-|x/a|) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{-\infty < x < \infty}.
+@end deftypefun
+
+@deftypefun double gsl_ran_laplace_pdf (double @var{x}, double @var{a})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Laplace distribution with width @var{a}, using the formula
+given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-laplace.tex}
+@end tex
+
+@deftypefun double gsl_cdf_laplace_P (double @var{x}, double @var{a})
+@deftypefunx double gsl_cdf_laplace_Q (double @var{x}, double @var{a})
+@deftypefunx double gsl_cdf_laplace_Pinv (double @var{P}, double @var{a})
+@deftypefunx double gsl_cdf_laplace_Qinv (double @var{Q}, double @var{a})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Laplace
+distribution with width @var{a}.
+@end deftypefun
+
+
+@page
+@node The Exponential Power Distribution
+@section The Exponential Power Distribution
+@deftypefun double gsl_ran_exppow (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Exponential power distribution
+This function returns a random variate from the exponential power distribution
+with scale parameter @var{a} and exponent @var{b}. The distribution is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over 2 a \Gamma(1+1/b)} \exp(-|x/a|^b) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over 2 a \Gamma(1+1/b)@} \exp(-|x/a|^b) dx
+@end example
+
+@end ifinfo
+@noindent
+for @c{$x \ge 0$}
+@math{x >= 0}. For @math{b = 1} this reduces to the Laplace
+distribution. For @math{b = 2} it has the same form as a gaussian
+distribution, but with @c{$a = \sqrt{2} \sigma$}
+@math{a = \sqrt@{2@} \sigma}.
+@end deftypefun
+
+@deftypefun double gsl_ran_exppow_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for an exponential power distribution with scale parameter @var{a}
+and exponent @var{b}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-exppow.tex}
+@end tex
+
+@deftypefun double gsl_cdf_exppow_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_exppow_Q (double @var{x}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} for the exponential power distribution with
+parameters @var{a} and @var{b}.
+@end deftypefun
+
+
+@page
+@node The Cauchy Distribution
+@section The Cauchy Distribution
+@deftypefun double gsl_ran_cauchy (const gsl_rng * @var{r}, double @var{a})
+@cindex Cauchy distribution
+This function returns a random variate from the Cauchy distribution with
+scale parameter @var{a}. The probability distribution for Cauchy
+random variates is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over a\pi (1 + (x/a)^2) } dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over a\pi (1 + (x/a)^2) @} dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x} in the range @math{-\infty} to @math{+\infty}. The Cauchy
+distribution is also known as the Lorentz distribution.
+@end deftypefun
+
+@deftypefun double gsl_ran_cauchy_pdf (double @var{x}, double @var{a})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Cauchy distribution with scale parameter @var{a}, using the formula
+given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-cauchy.tex}
+@end tex
+
+@deftypefun double gsl_cdf_cauchy_P (double @var{x}, double @var{a})
+@deftypefunx double gsl_cdf_cauchy_Q (double @var{x}, double @var{a})
+@deftypefunx double gsl_cdf_cauchy_Pinv (double @var{P}, double @var{a})
+@deftypefunx double gsl_cdf_cauchy_Qinv (double @var{Q}, double @var{a})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Cauchy
+distribution with scale parameter @var{a}.
+@end deftypefun
+
+
+@page
+@node The Rayleigh Distribution
+@section The Rayleigh Distribution
+@deftypefun double gsl_ran_rayleigh (const gsl_rng * @var{r}, double @var{sigma})
+@cindex Rayleigh distribution
+This function returns a random variate from the Rayleigh distribution with
+scale parameter @var{sigma}. The distribution is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {x \over \sigma^2} \exp(- x^2/(2 \sigma^2)) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{x \over \sigma^2@} \exp(- x^2/(2 \sigma^2)) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x > 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_rayleigh_pdf (double @var{x}, double @var{sigma})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Rayleigh distribution with scale parameter @var{sigma}, using the
+formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-rayleigh.tex}
+@end tex
+
+@deftypefun double gsl_cdf_rayleigh_P (double @var{x}, double @var{sigma})
+@deftypefunx double gsl_cdf_rayleigh_Q (double @var{x}, double @var{sigma})
+@deftypefunx double gsl_cdf_rayleigh_Pinv (double @var{P}, double @var{sigma})
+@deftypefunx double gsl_cdf_rayleigh_Qinv (double @var{Q}, double @var{sigma})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Rayleigh
+distribution with scale parameter @var{sigma}.
+@end deftypefun
+
+
+@page
+@node The Rayleigh Tail Distribution
+@section The Rayleigh Tail Distribution
+@deftypefun double gsl_ran_rayleigh_tail (const gsl_rng * @var{r}, double @var{a}, double @var{sigma})
+@cindex Rayleigh Tail distribution
+This function returns a random variate from the tail of the Rayleigh
+distribution with scale parameter @var{sigma} and a lower limit of
+@var{a}. The distribution is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {x \over \sigma^2} \exp ((a^2 - x^2) /(2 \sigma^2)) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{x \over \sigma^2@} \exp ((a^2 - x^2) /(2 \sigma^2)) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x > a}.
+@end deftypefun
+
+@deftypefun double gsl_ran_rayleigh_tail_pdf (double @var{x}, double @var{a}, double @var{sigma})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Rayleigh tail distribution with scale parameter @var{sigma} and
+lower limit @var{a}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-rayleigh-tail.tex}
+@end tex
+
+@page
+@node The Landau Distribution
+@section The Landau Distribution
+@deftypefun double gsl_ran_landau (const gsl_rng * @var{r})
+@cindex Landau distribution
+This function returns a random variate from the Landau distribution. The
+probability distribution for Landau random variates is defined
+analytically by the complex integral,
+@tex
+\beforedisplay
+$$
+p(x) =
+{1 \over {2 \pi i}} \int_{c-i\infty}^{c+i\infty} ds\, \exp(s \log(s) + x s)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) = (1/(2 \pi i)) \int_@{c-i\infty@}^@{c+i\infty@} ds exp(s log(s) + x s)
+@end example
+@end ifinfo
+For numerical purposes it is more convenient to use the following
+equivalent form of the integral,
+@tex
+\beforedisplay
+$$
+p(x) = (1/\pi) \int_0^\infty dt \exp(-t \log(t) - x t) \sin(\pi t).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) = (1/\pi) \int_0^\infty dt \exp(-t \log(t) - x t) \sin(\pi t).
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_ran_landau_pdf (double @var{x})
+This function computes the probability density @math{p(x)} at @var{x}
+for the Landau distribution using an approximation to the formula given
+above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-landau.tex}
+@end tex
+
+@page
+@node The Levy alpha-Stable Distributions
+@section The Levy alpha-Stable Distributions
+@deftypefun double gsl_ran_levy (const gsl_rng * @var{r}, double @var{c}, double @var{alpha})
+@cindex Levy distribution
+This function returns a random variate from the Levy symmetric stable
+distribution with scale @var{c} and exponent @var{alpha}. The symmetric
+stable probability distribution is defined by a fourier transform,
+@tex
+\beforedisplay
+$$
+p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^\alpha)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) = @{1 \over 2 \pi@} \int_@{-\infty@}^@{+\infty@} dt \exp(-it x - |c t|^alpha)
+@end example
+
+@end ifinfo
+@noindent
+There is no explicit solution for the form of @math{p(x)} and the
+library does not define a corresponding @code{pdf} function. For
+@math{\alpha = 1} the distribution reduces to the Cauchy distribution. For
+@math{\alpha = 2} it is a Gaussian distribution with @c{$\sigma = \sqrt{2} c$}
+@math{\sigma = \sqrt@{2@} c}. For @math{\alpha < 1} the tails of the
+distribution become extremely wide.
+
+The algorithm only works for @c{$0 < \alpha \le 2$}
+@math{0 < alpha <= 2}.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-levy.tex}
+@end tex
+
+@page
+@node The Levy skew alpha-Stable Distribution
+@section The Levy skew alpha-Stable Distribution
+
+@deftypefun double gsl_ran_levy_skew (const gsl_rng * @var{r}, double @var{c}, double @var{alpha}, double @var{beta})
+@cindex Levy distribution, skew
+@cindex Skew Levy distribution
+This function returns a random variate from the Levy skew stable
+distribution with scale @var{c}, exponent @var{alpha} and skewness
+parameter @var{beta}. The skewness parameter must lie in the range
+@math{[-1,1]}. The Levy skew stable probability distribution is defined
+by a fourier transform,
+@tex
+\beforedisplay
+$$
+p(x) = {1 \over 2 \pi} \int_{-\infty}^{+\infty} dt \exp(-it x - |c t|^\alpha (1-i \beta \sign(t) \tan(\pi\alpha/2)))
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) = @{1 \over 2 \pi@} \int_@{-\infty@}^@{+\infty@} dt \exp(-it x - |c t|^alpha (1-i beta sign(t) tan(pi alpha/2)))
+@end example
+
+@end ifinfo
+@noindent
+When @math{\alpha = 1} the term @math{\tan(\pi \alpha/2)} is replaced by
+@math{-(2/\pi)\log|t|}. There is no explicit solution for the form of
+@math{p(x)} and the library does not define a corresponding @code{pdf}
+function. For @math{\alpha = 2} the distribution reduces to a Gaussian
+distribution with @c{$\sigma = \sqrt{2} c$}
+@math{\sigma = \sqrt@{2@} c} and the skewness parameter has no effect.
+For @math{\alpha < 1} the tails of the distribution become extremely
+wide. The symmetric distribution corresponds to @math{\beta =
+0}.
+
+The algorithm only works for @c{$0 < \alpha \le 2$}
+@math{0 < alpha <= 2}.
+@end deftypefun
+
+The Levy alpha-stable distributions have the property that if @math{N}
+alpha-stable variates are drawn from the distribution @math{p(c, \alpha,
+\beta)} then the sum @math{Y = X_1 + X_2 + \dots + X_N} will also be
+distributed as an alpha-stable variate,
+@c{$p(N^{1/\alpha} c, \alpha, \beta)$}
+@math{p(N^(1/\alpha) c, \alpha, \beta)}.
+
+@comment PDF not available because there is no analytic expression for it
+@comment
+@comment @deftypefun double gsl_ran_levy_pdf (double @var{x}, double @var{mu})
+@comment This function computes the probability density @math{p(x)} at @var{x}
+@comment for a symmetric Levy distribution with scale parameter @var{mu} and
+@comment exponent @var{a}, using the formula given above.
+@comment @end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-levyskew.tex}
+@end tex
+
+@page
+@node The Gamma Distribution
+@section The Gamma Distribution
+@deftypefun double gsl_ran_gamma (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Gamma distribution
+This function returns a random variate from the gamma
+distribution. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over \Gamma(a) b^a} x^{a-1} e^{-x/b} dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over \Gamma(a) b^a@} x^@{a-1@} e^@{-x/b@} dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x > 0}.
+@comment If @xmath{X} and @xmath{Y} are independent gamma-distributed random
+@comment variables of order @xmath{a} and @xmath{b}, then @xmath{X+Y} has a gamma
+@comment distribution of order @xmath{a+b}.
+
+@cindex Erlang distribution
+The gamma distribution with an integer parameter @var{a} is known as the Erlang distribution.
+
+The variates are computed using the Marsaglia-Tsang fast gamma method.
+This function for this method was previously called
+@code{gsl_ran_gamma_mt} and can still be accessed using this name.
+@end deftypefun
+
+@deftypefun double gsl_ran_gamma_knuth (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+This function returns a gamma variate using the algorithms from Knuth (vol 2).
+@end deftypefun
+
+@deftypefun double gsl_ran_gamma_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a gamma distribution with parameters @var{a} and @var{b}, using the
+formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-gamma.tex}
+@end tex
+
+@deftypefun double gsl_cdf_gamma_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gamma_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gamma_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gamma_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the gamma
+distribution with parameters @var{a} and @var{b}.
+@end deftypefun
+
+@page
+@node The Flat (Uniform) Distribution
+@section The Flat (Uniform) Distribution
+@deftypefun double gsl_ran_flat (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex flat distribution
+@cindex uniform distribution
+This function returns a random variate from the flat (uniform)
+distribution from @var{a} to @var{b}. The distribution is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over (b-a)} dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over (b-a)@} dx
+@end example
+
+@end ifinfo
+@noindent
+if @c{$a \le x < b$}
+@math{a <= x < b} and 0 otherwise.
+@end deftypefun
+
+@deftypefun double gsl_ran_flat_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a uniform distribution from @var{a} to @var{b}, using the formula
+given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-flat.tex}
+@end tex
+
+@deftypefun double gsl_cdf_flat_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_flat_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_flat_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_flat_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for a uniform distribution
+from @var{a} to @var{b}.
+@end deftypefun
+
+
+@page
+@node The Lognormal Distribution
+@section The Lognormal Distribution
+@deftypefun double gsl_ran_lognormal (const gsl_rng * @var{r}, double @var{zeta}, double @var{sigma})
+@cindex Lognormal distribution
+This function returns a random variate from the lognormal
+distribution. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over x \sqrt{2 \pi \sigma^2}} \exp(-(\ln(x) - \zeta)^2/2 \sigma^2) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over x \sqrt@{2 \pi \sigma^2@} @} \exp(-(\ln(x) - \zeta)^2/2 \sigma^2) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{x > 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_lognormal_pdf (double @var{x}, double @var{zeta}, double @var{sigma})
+This function computes the probability density @math{p(x)} at @var{x}
+for a lognormal distribution with parameters @var{zeta} and @var{sigma},
+using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-lognormal.tex}
+@end tex
+
+@deftypefun double gsl_cdf_lognormal_P (double @var{x}, double @var{zeta}, double @var{sigma})
+@deftypefunx double gsl_cdf_lognormal_Q (double @var{x}, double @var{zeta}, double @var{sigma})
+@deftypefunx double gsl_cdf_lognormal_Pinv (double @var{P}, double @var{zeta}, double @var{sigma})
+@deftypefunx double gsl_cdf_lognormal_Qinv (double @var{Q}, double @var{zeta}, double @var{sigma})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the lognormal
+distribution with parameters @var{zeta} and @var{sigma}.
+@end deftypefun
+
+
+@page
+@node The Chi-squared Distribution
+@section The Chi-squared Distribution
+The chi-squared distribution arises in statistics. If @math{Y_i} are
+@math{n} independent gaussian random variates with unit variance then the
+sum-of-squares,
+@tex
+\beforedisplay
+$$
+X_i = \sum_i Y_i^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X_i = \sum_i Y_i^2
+@end example
+
+@end ifinfo
+@noindent
+has a chi-squared distribution with @math{n} degrees of freedom.
+
+@deftypefun double gsl_ran_chisq (const gsl_rng * @var{r}, double @var{nu})
+@cindex Chi-squared distribution
+This function returns a random variate from the chi-squared distribution
+with @var{nu} degrees of freedom. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {1 \over 2 \Gamma(\nu/2) } (x/2)^{\nu/2 - 1} \exp(-x/2) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{1 \over 2 \Gamma(\nu/2) @} (x/2)^@{\nu/2 - 1@} \exp(-x/2) dx
+@end example
+
+@end ifinfo
+@noindent
+for @c{$x \ge 0$}
+@math{x >= 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_chisq_pdf (double @var{x}, double @var{nu})
+This function computes the probability density @math{p(x)} at @var{x}
+for a chi-squared distribution with @var{nu} degrees of freedom, using
+the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-chisq.tex}
+@end tex
+
+@deftypefun double gsl_cdf_chisq_P (double @var{x}, double @var{nu})
+@deftypefunx double gsl_cdf_chisq_Q (double @var{x}, double @var{nu})
+@deftypefunx double gsl_cdf_chisq_Pinv (double @var{P}, double @var{nu})
+@deftypefunx double gsl_cdf_chisq_Qinv (double @var{Q}, double @var{nu})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the chi-squared
+distribution with @var{nu} degrees of freedom.
+@end deftypefun
+
+
+
+@page
+@node The F-distribution
+@section The F-distribution
+The F-distribution arises in statistics. If @math{Y_1} and @math{Y_2}
+are chi-squared deviates with @math{\nu_1} and @math{\nu_2} degrees of
+freedom then the ratio,
+@tex
+\beforedisplay
+$$
+X = { (Y_1 / \nu_1) \over (Y_2 / \nu_2) }
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X = @{ (Y_1 / \nu_1) \over (Y_2 / \nu_2) @}
+@end example
+
+@end ifinfo
+@noindent
+has an F-distribution @math{F(x;\nu_1,\nu_2)}.
+
+@deftypefun double gsl_ran_fdist (const gsl_rng * @var{r}, double @var{nu1}, double @var{nu2})
+@cindex F-distribution
+This function returns a random variate from the F-distribution with degrees of freedom @var{nu1} and @var{nu2}. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx =
+ { \Gamma((\nu_1 + \nu_2)/2)
+ \over \Gamma(\nu_1/2) \Gamma(\nu_2/2) }
+ \nu_1^{\nu_1/2} \nu_2^{\nu_2/2}
+ x^{\nu_1/2 - 1} (\nu_2 + \nu_1 x)^{-\nu_1/2 -\nu_2/2}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx =
+ @{ \Gamma((\nu_1 + \nu_2)/2)
+ \over \Gamma(\nu_1/2) \Gamma(\nu_2/2) @}
+ \nu_1^@{\nu_1/2@} \nu_2^@{\nu_2/2@}
+ x^@{\nu_1/2 - 1@} (\nu_2 + \nu_1 x)^@{-\nu_1/2 -\nu_2/2@}
+@end example
+
+@end ifinfo
+@noindent
+for @c{$x \ge 0$}
+@math{x >= 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_fdist_pdf (double @var{x}, double @var{nu1}, double @var{nu2})
+This function computes the probability density @math{p(x)} at @var{x}
+for an F-distribution with @var{nu1} and @var{nu2} degrees of freedom,
+using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-fdist.tex}
+@end tex
+
+@deftypefun double gsl_cdf_fdist_P (double @var{x}, double @var{nu1}, double @var{nu2})
+@deftypefunx double gsl_cdf_fdist_Q (double @var{x}, double @var{nu1}, double @var{nu2})
+@deftypefunx double gsl_cdf_fdist_Pinv (double @var{P}, double @var{nu1}, double @var{nu2})
+@deftypefunx double gsl_cdf_fdist_Qinv (double @var{Q}, double @var{nu1}, double @var{nu2})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the F-distribution
+with @var{nu1} and @var{nu2} degrees of freedom.
+@end deftypefun
+
+@page
+@node The t-distribution
+@section The t-distribution
+The t-distribution arises in statistics. If @math{Y_1} has a normal
+distribution and @math{Y_2} has a chi-squared distribution with
+@math{\nu} degrees of freedom then the ratio,
+@tex
+\beforedisplay
+$$
+X = { Y_1 \over \sqrt{Y_2 / \nu} }
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+X = @{ Y_1 \over \sqrt@{Y_2 / \nu@} @}
+@end example
+
+@end ifinfo
+@noindent
+has a t-distribution @math{t(x;\nu)} with @math{\nu} degrees of freedom.
+
+@deftypefun double gsl_ran_tdist (const gsl_rng * @var{r}, double @var{nu})
+@cindex t-distribution
+@cindex Student t-distribution
+This function returns a random variate from the t-distribution. The
+distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {\Gamma((\nu + 1)/2) \over \sqrt{\pi \nu} \Gamma(\nu/2)}
+ (1 + x^2/\nu)^{-(\nu + 1)/2} dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{\Gamma((\nu + 1)/2) \over \sqrt@{\pi \nu@} \Gamma(\nu/2)@}
+ (1 + x^2/\nu)^@{-(\nu + 1)/2@} dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{-\infty < x < +\infty}.
+@end deftypefun
+
+@deftypefun double gsl_ran_tdist_pdf (double @var{x}, double @var{nu})
+This function computes the probability density @math{p(x)} at @var{x}
+for a t-distribution with @var{nu} degrees of freedom, using the formula
+given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-tdist.tex}
+@end tex
+
+@deftypefun double gsl_cdf_tdist_P (double @var{x}, double @var{nu})
+@deftypefunx double gsl_cdf_tdist_Q (double @var{x}, double @var{nu})
+@deftypefunx double gsl_cdf_tdist_Pinv (double @var{P}, double @var{nu})
+@deftypefunx double gsl_cdf_tdist_Qinv (double @var{Q}, double @var{nu})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the t-distribution
+with @var{nu} degrees of freedom.
+@end deftypefun
+
+@page
+@node The Beta Distribution
+@section The Beta Distribution
+@deftypefun double gsl_ran_beta (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Beta distribution
+This function returns a random variate from the beta
+distribution. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {\Gamma(a+b) \over \Gamma(a) \Gamma(b)} x^{a-1} (1-x)^{b-1} dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{\Gamma(a+b) \over \Gamma(a) \Gamma(b)@} x^@{a-1@} (1-x)^@{b-1@} dx
+@end example
+
+@end ifinfo
+@noindent
+for @c{$0 \le x \le 1$}
+@math{0 <= x <= 1}.
+@end deftypefun
+
+@deftypefun double gsl_ran_beta_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a beta distribution with parameters @var{a} and @var{b}, using the
+formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-beta.tex}
+@end tex
+
+@deftypefun double gsl_cdf_beta_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_beta_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_beta_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_beta_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the beta
+distribution with parameters @var{a} and @var{b}.
+@end deftypefun
+
+@page
+@node The Logistic Distribution
+@section The Logistic Distribution
+
+@deftypefun double gsl_ran_logistic (const gsl_rng * @var{r}, double @var{a})
+@cindex Logistic distribution
+This function returns a random variate from the logistic
+distribution. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = { \exp(-x/a) \over a (1 + \exp(-x/a))^2 } dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{ \exp(-x/a) \over a (1 + \exp(-x/a))^2 @} dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{-\infty < x < +\infty}.
+@end deftypefun
+
+@deftypefun double gsl_ran_logistic_pdf (double @var{x}, double @var{a})
+This function computes the probability density @math{p(x)} at @var{x}
+for a logistic distribution with scale parameter @var{a}, using the
+formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-logistic.tex}
+@end tex
+
+@deftypefun double gsl_cdf_logistic_P (double @var{x}, double @var{a})
+@deftypefunx double gsl_cdf_logistic_Q (double @var{x}, double @var{a})
+@deftypefunx double gsl_cdf_logistic_Pinv (double @var{P}, double @var{a})
+@deftypefunx double gsl_cdf_logistic_Qinv (double @var{Q}, double @var{a})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the logistic
+distribution with scale parameter @var{a}.
+@end deftypefun
+
+@page
+@node The Pareto Distribution
+@section The Pareto Distribution
+@deftypefun double gsl_ran_pareto (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Pareto distribution
+This function returns a random variate from the Pareto distribution of
+order @var{a}. The distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = (a/b) / (x/b)^{a+1} dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = (a/b) / (x/b)^@{a+1@} dx
+@end example
+
+@end ifinfo
+@noindent
+for @c{$x \ge b$}
+@math{x >= b}.
+@end deftypefun
+
+@deftypefun double gsl_ran_pareto_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Pareto distribution with exponent @var{a} and scale @var{b}, using
+the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-pareto.tex}
+@end tex
+
+@deftypefun double gsl_cdf_pareto_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_pareto_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_pareto_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_pareto_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Pareto
+distribution with exponent @var{a} and scale @var{b}.
+@end deftypefun
+
+@page
+@node Spherical Vector Distributions
+@section Spherical Vector Distributions
+
+The spherical distributions generate random vectors, located on a
+spherical surface. They can be used as random directions, for example in
+the steps of a random walk.
+
+@deftypefun void gsl_ran_dir_2d (const gsl_rng * @var{r}, double * @var{x}, double * @var{y})
+@deftypefunx void gsl_ran_dir_2d_trig_method (const gsl_rng * @var{r}, double * @var{x}, double * @var{y})
+@cindex 2D random direction vector
+@cindex direction vector, random 2D
+@cindex spherical random variates, 2D
+This function returns a random direction vector @math{v} =
+(@var{x},@var{y}) in two dimensions. The vector is normalized such that
+@math{|v|^2 = x^2 + y^2 = 1}. The obvious way to do this is to take a
+uniform random number between 0 and @math{2\pi} and let @var{x} and
+@var{y} be the sine and cosine respectively. Two trig functions would
+have been expensive in the old days, but with modern hardware
+implementations, this is sometimes the fastest way to go. This is the
+case for the Pentium (but not the case for the Sun Sparcstation).
+One can avoid the trig evaluations by choosing @var{x} and
+@var{y} in the interior of a unit circle (choose them at random from the
+interior of the enclosing square, and then reject those that are outside
+the unit circle), and then dividing by @c{$\sqrt{x^2 + y^2}$}
+@math{\sqrt@{x^2 + y^2@}}.
+A much cleverer approach, attributed to von Neumann (See Knuth, v2, 3rd
+ed, p140, exercise 23), requires neither trig nor a square root. In
+this approach, @var{u} and @var{v} are chosen at random from the
+interior of a unit circle, and then @math{x=(u^2-v^2)/(u^2+v^2)} and
+@math{y=2uv/(u^2+v^2)}.
+@end deftypefun
+
+@deftypefun void gsl_ran_dir_3d (const gsl_rng * @var{r}, double * @var{x}, double * @var{y}, double * @var{z})
+@cindex 3D random direction vector
+@cindex direction vector, random 3D
+@cindex spherical random variates, 3D
+This function returns a random direction vector @math{v} =
+(@var{x},@var{y},@var{z}) in three dimensions. The vector is normalized
+such that @math{|v|^2 = x^2 + y^2 + z^2 = 1}. The method employed is
+due to Robert E. Knop (CACM 13, 326 (1970)), and explained in Knuth, v2,
+3rd ed, p136. It uses the surprising fact that the distribution
+projected along any axis is actually uniform (this is only true for 3
+dimensions).
+@end deftypefun
+
+@deftypefun void gsl_ran_dir_nd (const gsl_rng * @var{r}, size_t @var{n}, double * @var{x})
+@cindex N-dimensional random direction vector
+@cindex direction vector, random N-dimensional
+@cindex spherical random variates, N-dimensional
+
+This function returns a random direction vector
+@c{$v = (x_1,x_2,\ldots,x_n)$}
+@math{v = (x_1,x_2,...,x_n)} in @var{n} dimensions. The vector is normalized
+such that
+@c{$|v|^2 = x_1^2 + x_2^2 + \cdots + x_n^2 = 1$}
+@math{|v|^2 = x_1^2 + x_2^2 + ... + x_n^2 = 1}. The method
+uses the fact that a multivariate gaussian distribution is spherically
+symmetric. Each component is generated to have a gaussian distribution,
+and then the components are normalized. The method is described by
+Knuth, v2, 3rd ed, p135--136, and attributed to G. W. Brown, Modern
+Mathematics for the Engineer (1956).
+@end deftypefun
+
+@page
+@node The Weibull Distribution
+@section The Weibull Distribution
+@deftypefun double gsl_ran_weibull (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Weibull distribution
+This function returns a random variate from the Weibull distribution. The
+distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = {b \over a^b} x^{b-1} \exp(-(x/a)^b) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = @{b \over a^b@} x^@{b-1@} \exp(-(x/a)^b) dx
+@end example
+
+@end ifinfo
+@noindent
+for @c{$x \ge 0$}
+@math{x >= 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_weibull_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Weibull distribution with scale @var{a} and exponent @var{b},
+using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-weibull.tex}
+@end tex
+
+@deftypefun double gsl_cdf_weibull_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_weibull_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_weibull_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_weibull_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Weibull
+distribution with scale @var{a} and exponent @var{b}.
+@end deftypefun
+
+
+@page
+@node The Type-1 Gumbel Distribution
+@section The Type-1 Gumbel Distribution
+@deftypefun double gsl_ran_gumbel1 (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Gumbel distribution (Type 1)
+@cindex Type 1 Gumbel distribution, random variates
+This function returns a random variate from the Type-1 Gumbel
+distribution. The Type-1 Gumbel distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = a b \exp(-(b \exp(-ax) + ax)) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = a b \exp(-(b \exp(-ax) + ax)) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{-\infty < x < \infty}.
+@end deftypefun
+
+@deftypefun double gsl_ran_gumbel1_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Type-1 Gumbel distribution with parameters @var{a} and @var{b},
+using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-gumbel1.tex}
+@end tex
+
+@deftypefun double gsl_cdf_gumbel1_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gumbel1_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gumbel1_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gumbel1_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Type-1 Gumbel
+distribution with parameters @var{a} and @var{b}.
+@end deftypefun
+
+
+@page
+@node The Type-2 Gumbel Distribution
+@section The Type-2 Gumbel Distribution
+@deftypefun double gsl_ran_gumbel2 (const gsl_rng * @var{r}, double @var{a}, double @var{b})
+@cindex Gumbel distribution (Type 2)
+@cindex Type 2 Gumbel distribution
+This function returns a random variate from the Type-2 Gumbel
+distribution. The Type-2 Gumbel distribution function is,
+@tex
+\beforedisplay
+$$
+p(x) dx = a b x^{-a-1} \exp(-b x^{-a}) dx
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(x) dx = a b x^@{-a-1@} \exp(-b x^@{-a@}) dx
+@end example
+
+@end ifinfo
+@noindent
+for @math{0 < x < \infty}.
+@end deftypefun
+
+@deftypefun double gsl_ran_gumbel2_pdf (double @var{x}, double @var{a}, double @var{b})
+This function computes the probability density @math{p(x)} at @var{x}
+for a Type-2 Gumbel distribution with parameters @var{a} and @var{b},
+using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-gumbel2.tex}
+@end tex
+
+@deftypefun double gsl_cdf_gumbel2_P (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gumbel2_Q (double @var{x}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gumbel2_Pinv (double @var{P}, double @var{a}, double @var{b})
+@deftypefunx double gsl_cdf_gumbel2_Qinv (double @var{Q}, double @var{a}, double @var{b})
+These functions compute the cumulative distribution functions
+@math{P(x)}, @math{Q(x)} and their inverses for the Type-2 Gumbel
+distribution with parameters @var{a} and @var{b}.
+@end deftypefun
+
+
+@page
+@node The Dirichlet Distribution
+@section The Dirichlet Distribution
+@deftypefun void gsl_ran_dirichlet (const gsl_rng * @var{r}, size_t @var{K}, const double @var{alpha}[], double @var{theta}[])
+@cindex Dirichlet distribution
+This function returns an array of @var{K} random variates from a Dirichlet
+distribution of order @var{K}-1. The distribution function is
+@tex
+\beforedisplay
+$$
+p(\theta_1,\ldots,\theta_K) \, d\theta_1 \cdots d\theta_K =
+ {1 \over Z} \prod_{i=1}^{K} \theta_i^{\alpha_i - 1}
+ \; \delta(1 -\sum_{i=1}^K \theta_i) d\theta_1 \cdots d\theta_K
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(\theta_1, ..., \theta_K) d\theta_1 ... d\theta_K =
+ (1/Z) \prod_@{i=1@}^K \theta_i^@{\alpha_i - 1@} \delta(1 -\sum_@{i=1@}^K \theta_i) d\theta_1 ... d\theta_K
+@end example
+
+@end ifinfo
+@noindent
+for @c{$\theta_i \ge 0$}
+@math{theta_i >= 0}
+and @c{$\alpha_i \ge 0$}
+@math{alpha_i >= 0}. The delta function ensures that @math{\sum \theta_i = 1}.
+The normalization factor @math{Z} is
+@tex
+\beforedisplay
+$$
+Z = {\prod_{i=1}^K \Gamma(\alpha_i) \over \Gamma( \sum_{i=1}^K \alpha_i)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+Z = @{\prod_@{i=1@}^K \Gamma(\alpha_i)@} / @{\Gamma( \sum_@{i=1@}^K \alpha_i)@}
+@end example
+@end ifinfo
+
+The random variates are generated by sampling @var{K} values
+from gamma distributions with parameters
+@c{$a=\alpha_i$, $b=1$}
+@math{a=alpha_i, b=1},
+and renormalizing.
+See A.M. Law, W.D. Kelton, @cite{Simulation Modeling and Analysis} (1991).
+@end deftypefun
+
+@deftypefun double gsl_ran_dirichlet_pdf (size_t @var{K}, const double @var{alpha}[], const double @var{theta}[])
+This function computes the probability density
+@c{$p(\theta_1, \ldots , \theta_K)$}
+@math{p(\theta_1, ... , \theta_K)}
+at @var{theta}[@var{K}] for a Dirichlet distribution with parameters
+@var{alpha}[@var{K}], using the formula given above.
+@end deftypefun
+
+@deftypefun double gsl_ran_dirichlet_lnpdf (size_t @var{K}, const double @var{alpha}[], const double @var{theta}[])
+This function computes the logarithm of the probability density
+@c{$p(\theta_1, \ldots , \theta_K)$}
+@math{p(\theta_1, ... , \theta_K)}
+for a Dirichlet distribution with parameters
+@var{alpha}[@var{K}].
+@end deftypefun
+
+@page
+@node General Discrete Distributions
+@section General Discrete Distributions
+
+Given @math{K} discrete events with different probabilities @math{P[k]},
+produce a random value @math{k} consistent with its probability.
+
+The obvious way to do this is to preprocess the probability list by
+generating a cumulative probability array with @math{K+1} elements:
+@tex
+\beforedisplay
+$$
+\eqalign{
+C[0] & = 0 \cr
+C[k+1] &= C[k]+P[k].
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+ C[0] = 0
+C[k+1] = C[k]+P[k].
+@end example
+
+@end ifinfo
+@noindent
+Note that this construction produces @math{C[K]=1}. Now choose a
+uniform deviate @math{u} between 0 and 1, and find the value of @math{k}
+such that @c{$C[k] \le u < C[k+1]$}
+@math{C[k] <= u < C[k+1]}.
+Although this in principle requires of order @math{\log K} steps per
+random number generation, they are fast steps, and if you use something
+like @math{\lfloor uK \rfloor} as a starting point, you can often do
+pretty well.
+
+But faster methods have been devised. Again, the idea is to preprocess
+the probability list, and save the result in some form of lookup table;
+then the individual calls for a random discrete event can go rapidly.
+An approach invented by G. Marsaglia (Generating discrete random numbers
+in a computer, Comm ACM 6, 37--38 (1963)) is very clever, and readers
+interested in examples of good algorithm design are directed to this
+short and well-written paper. Unfortunately, for large @math{K},
+Marsaglia's lookup table can be quite large.
+
+A much better approach is due to Alastair J. Walker (An efficient method
+for generating discrete random variables with general distributions, ACM
+Trans on Mathematical Software 3, 253--256 (1977); see also Knuth, v2,
+3rd ed, p120--121,139). This requires two lookup tables, one floating
+point and one integer, but both only of size @math{K}. After
+preprocessing, the random numbers are generated in O(1) time, even for
+large @math{K}. The preprocessing suggested by Walker requires
+@math{O(K^2)} effort, but that is not actually necessary, and the
+implementation provided here only takes @math{O(K)} effort. In general,
+more preprocessing leads to faster generation of the individual random
+numbers, but a diminishing return is reached pretty early. Knuth points
+out that the optimal preprocessing is combinatorially difficult for
+large @math{K}.
+
+This method can be used to speed up some of the discrete random number
+generators below, such as the binomial distribution. To use it for
+something like the Poisson Distribution, a modification would have to
+be made, since it only takes a finite set of @math{K} outcomes.
+
+@deftypefun {gsl_ran_discrete_t *} gsl_ran_discrete_preproc (size_t @var{K}, const double * @var{P})
+@cindex Discrete random numbers
+@cindex Discrete random numbers, preprocessing
+This function returns a pointer to a structure that contains the lookup
+table for the discrete random number generator. The array @var{P}[] contains
+the probabilities of the discrete events; these array elements must all be
+positive, but they needn't add up to one (so you can think of them more
+generally as ``weights'')---the preprocessor will normalize appropriately.
+This return value is used
+as an argument for the @code{gsl_ran_discrete} function below.
+@end deftypefun
+
+@deftypefun {size_t} gsl_ran_discrete (const gsl_rng * @var{r}, const gsl_ran_discrete_t * @var{g})
+@cindex Discrete random numbers
+After the preprocessor, above, has been called, you use this function to
+get the discrete random numbers.
+@end deftypefun
+
+@deftypefun {double} gsl_ran_discrete_pdf (size_t @var{k}, const gsl_ran_discrete_t * @var{g})
+@cindex Discrete random numbers
+Returns the probability @math{P[k]} of observing the variable @var{k}.
+Since @math{P[k]} is not stored as part of the lookup table, it must be
+recomputed; this computation takes @math{O(K)}, so if @var{K} is large
+and you care about the original array @math{P[k]} used to create the
+lookup table, then you should just keep this original array @math{P[k]}
+around.
+@end deftypefun
+
+@deftypefun {void} gsl_ran_discrete_free (gsl_ran_discrete_t * @var{g})
+@cindex Discrete random numbers
+De-allocates the lookup table pointed to by @var{g}.
+@end deftypefun
+
+@page
+@node The Poisson Distribution
+@section The Poisson Distribution
+@deftypefun {unsigned int} gsl_ran_poisson (const gsl_rng * @var{r}, double @var{mu})
+@cindex Poisson random numbers
+This function returns a random integer from the Poisson distribution
+with mean @var{mu}. The probability distribution for Poisson variates is,
+@tex
+\beforedisplay
+$$
+p(k) = {\mu^k \over k!} \exp(-\mu)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = @{\mu^k \over k!@} \exp(-\mu)
+@end example
+
+@end ifinfo
+@noindent
+for @c{$k \ge 0$}
+@math{k >= 0}.
+@end deftypefun
+
+@deftypefun double gsl_ran_poisson_pdf (unsigned int @var{k}, double @var{mu})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a Poisson distribution with mean @var{mu}, using the formula
+given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-poisson.tex}
+@end tex
+
+@deftypefun double gsl_cdf_poisson_P (unsigned int @var{k}, double @var{mu})
+@deftypefunx double gsl_cdf_poisson_Q (unsigned int @var{k}, double @var{mu})
+These functions compute the cumulative distribution functions
+@math{P(k)}, @math{Q(k)} for the Poisson distribution with parameter
+@var{mu}.
+@end deftypefun
+
+
+@page
+@node The Bernoulli Distribution
+@section The Bernoulli Distribution
+@deftypefun {unsigned int} gsl_ran_bernoulli (const gsl_rng * @var{r}, double @var{p})
+@cindex Bernoulli trial, random variates
+This function returns either 0 or 1, the result of a Bernoulli trial
+with probability @var{p}. The probability distribution for a Bernoulli
+trial is,
+@tex
+\beforedisplay
+$$
+\eqalign{
+p(0) & = 1 - p \cr
+p(1) & = p
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(0) = 1 - p
+p(1) = p
+@end example
+@end ifinfo
+
+@end deftypefun
+
+@deftypefun double gsl_ran_bernoulli_pdf (unsigned int @var{k}, double @var{p})
+This function computes the probability @math{p(k)} of obtaining
+@var{k} from a Bernoulli distribution with probability parameter
+@var{p}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-bernoulli.tex}
+@end tex
+
+@page
+@node The Binomial Distribution
+@section The Binomial Distribution
+@deftypefun {unsigned int} gsl_ran_binomial (const gsl_rng * @var{r}, double @var{p}, unsigned int @var{n})
+@cindex Binomial random variates
+This function returns a random integer from the binomial distribution,
+the number of successes in @var{n} independent trials with probability
+@var{p}. The probability distribution for binomial variates is,
+@tex
+\beforedisplay
+$$
+p(k) = {n! \over k! (n-k)!} p^k (1-p)^{n-k}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = @{n! \over k! (n-k)! @} p^k (1-p)^@{n-k@}
+@end example
+
+@end ifinfo
+@noindent
+for @c{$0 \le k \le n$}
+@math{0 <= k <= n}.
+@end deftypefun
+
+@deftypefun double gsl_ran_binomial_pdf (unsigned int @var{k}, double @var{p}, unsigned int @var{n})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a binomial distribution with parameters @var{p} and @var{n}, using
+the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-binomial.tex}
+@end tex
+
+@deftypefun double gsl_cdf_binomial_P (unsigned int @var{k}, double @var{p}, unsigned int @var{n})
+@deftypefunx double gsl_cdf_binomial_Q (unsigned int @var{k}, double @var{p}, unsigned int @var{n})
+These functions compute the cumulative distribution functions
+@math{P(k)}, @math{Q(k)} for the binomial
+distribution with parameters @var{p} and @var{n}.
+@end deftypefun
+
+
+@page
+@node The Multinomial Distribution
+@section The Multinomial Distribution
+@deftypefun void gsl_ran_multinomial (const gsl_rng * @var{r}, size_t @var{K}, unsigned int @var{N}, const double @var{p}[], unsigned int @var{n}[])
+@cindex Multinomial distribution
+
+This function computes a random sample @var{n}[] from the multinomial
+distribution formed by @var{N} trials from an underlying distribution
+@var{p}[@var{K}]. The distribution function for @var{n}[] is,
+@tex
+\beforedisplay
+$$
+P(n_1, n_2,\cdots, n_K) = {{ N!}\over{n_1 ! n_2 ! \cdots n_K !}} \,
+ p_1^{n_1} p_2^{n_2} \cdots p_K^{n_K}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+P(n_1, n_2, ..., n_K) =
+ (N!/(n_1! n_2! ... n_K!)) p_1^n_1 p_2^n_2 ... p_K^n_K
+@end example
+
+@end ifinfo
+@noindent
+where @c{($n_1$, $n_2$, $\ldots$, $n_K$)}
+@math{(n_1, n_2, ..., n_K)}
+are nonnegative integers with
+@c{$\sum_{k=1}^{K} n_k =N$}
+@math{sum_@{k=1@}^K n_k = N},
+and
+@c{$(p_1, p_2, \ldots, p_K)$}
+@math{(p_1, p_2, ..., p_K)}
+is a probability distribution with @math{\sum p_i = 1}.
+If the array @var{p}[@var{K}] is not normalized then its entries will be
+treated as weights and normalized appropriately. The arrays @var{n}[]
+and @var{p}[] must both be of length @var{K}.
+
+Random variates are generated using the conditional binomial method (see
+C.S. David, @cite{The computer generation of multinomial random
+variates}, Comp. Stat. Data Anal. 16 (1993) 205--217 for details).
+@end deftypefun
+
+@deftypefun double gsl_ran_multinomial_pdf (size_t @var{K}, const double @var{p}[], const unsigned int @var{n}[])
+This function computes the probability
+@c{$P(n_1, n_2, \ldots, n_K)$}
+@math{P(n_1, n_2, ..., n_K)}
+of sampling @var{n}[@var{K}] from a multinomial distribution
+with parameters @var{p}[@var{K}], using the formula given above.
+@end deftypefun
+
+@deftypefun double gsl_ran_multinomial_lnpdf (size_t @var{K}, const double @var{p}[], const unsigned int @var{n}[])
+This function returns the logarithm of the probability for the
+multinomial distribution @c{$P(n_1, n_2, \ldots, n_K)$}
+@math{P(n_1, n_2, ..., n_K)} with parameters @var{p}[@var{K}].
+@end deftypefun
+
+@page
+@node The Negative Binomial Distribution
+@section The Negative Binomial Distribution
+@deftypefun {unsigned int} gsl_ran_negative_binomial (const gsl_rng * @var{r}, double @var{p}, double @var{n})
+@cindex Negative Binomial distribution, random variates
+This function returns a random integer from the negative binomial
+distribution, the number of failures occurring before @var{n} successes
+in independent trials with probability @var{p} of success. The
+probability distribution for negative binomial variates is,
+@tex
+\beforedisplay
+$$
+p(k) = {\Gamma(n + k) \over \Gamma(k+1) \Gamma(n) } p^n (1-p)^k
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = @{\Gamma(n + k) \over \Gamma(k+1) \Gamma(n) @} p^n (1-p)^k
+@end example
+
+@end ifinfo
+@noindent
+Note that @math{n} is not required to be an integer.
+@end deftypefun
+
+@deftypefun double gsl_ran_negative_binomial_pdf (unsigned int @var{k}, double @var{p}, double @var{n})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a negative binomial distribution with parameters @var{p} and
+@var{n}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-nbinomial.tex}
+@end tex
+
+@deftypefun double gsl_cdf_negative_binomial_P (unsigned int @var{k}, double @var{p}, double @var{n})
+@deftypefunx double gsl_cdf_negative_binomial_Q (unsigned int @var{k}, double @var{p}, double @var{n})
+These functions compute the cumulative distribution functions
+@math{P(k)}, @math{Q(k)} for the negative binomial distribution with
+parameters @var{p} and @var{n}.
+@end deftypefun
+
+@page
+@node The Pascal Distribution
+@section The Pascal Distribution
+
+@deftypefun {unsigned int} gsl_ran_pascal (const gsl_rng * @var{r}, double @var{p}, unsigned int @var{n})
+This function returns a random integer from the Pascal distribution. The
+Pascal distribution is simply a negative binomial distribution with an
+integer value of @math{n}.
+@tex
+\beforedisplay
+$$
+p(k) = {(n + k - 1)! \over k! (n - 1)! } p^n (1-p)^k
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = @{(n + k - 1)! \over k! (n - 1)! @} p^n (1-p)^k
+@end example
+
+@end ifinfo
+@noindent
+for @c{$k \ge 0$}
+@math{k >= 0}
+@end deftypefun
+
+@deftypefun double gsl_ran_pascal_pdf (unsigned int @var{k}, double @var{p}, unsigned int @var{n})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a Pascal distribution with parameters @var{p} and
+@var{n}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-pascal.tex}
+@end tex
+
+@deftypefun double gsl_cdf_pascal_P (unsigned int @var{k}, double @var{p}, unsigned int @var{n})
+@deftypefunx double gsl_cdf_pascal_Q (unsigned int @var{k}, double @var{p}, unsigned int @var{n})
+These functions compute the cumulative distribution functions
+@math{P(k)}, @math{Q(k)} for the Pascal distribution with
+parameters @var{p} and @var{n}.
+@end deftypefun
+
+@page
+@node The Geometric Distribution
+@section The Geometric Distribution
+@deftypefun {unsigned int} gsl_ran_geometric (const gsl_rng * @var{r}, double @var{p})
+@cindex Geometric random variates
+This function returns a random integer from the geometric distribution,
+the number of independent trials with probability @var{p} until the
+first success. The probability distribution for geometric variates
+is,
+@tex
+\beforedisplay
+$$
+p(k) = p (1-p)^{k-1}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = p (1-p)^(k-1)
+@end example
+
+@end ifinfo
+@noindent
+for @c{$k \ge 1$}
+@math{k >= 1}. Note that the distribution begins with @math{k=1} with this
+definition. There is another convention in which the exponent @math{k-1}
+is replaced by @math{k}.
+@end deftypefun
+
+@deftypefun double gsl_ran_geometric_pdf (unsigned int @var{k}, double @var{p})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a geometric distribution with probability parameter @var{p}, using
+the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-geometric.tex}
+@end tex
+
+@deftypefun double gsl_cdf_geometric_P (unsigned int @var{k}, double @var{p})
+@deftypefunx double gsl_cdf_geometric_Q (unsigned int @var{k}, double @var{p})
+These functions compute the cumulative distribution functions
+@math{P(k)}, @math{Q(k)} for the geometric distribution with parameter
+@var{p}.
+@end deftypefun
+
+
+@page
+@node The Hypergeometric Distribution
+@section The Hypergeometric Distribution
+@cindex hypergeometric random variates
+@deftypefun {unsigned int} gsl_ran_hypergeometric (const gsl_rng * @var{r}, unsigned int @var{n1}, unsigned int @var{n2}, unsigned int @var{t})
+@cindex Geometric random variates
+This function returns a random integer from the hypergeometric
+distribution. The probability distribution for hypergeometric
+random variates is,
+@tex
+\beforedisplay
+$$
+p(k) = C(n_1, k) C(n_2, t - k) / C(n_1 + n_2, t)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = C(n_1, k) C(n_2, t - k) / C(n_1 + n_2, t)
+@end example
+
+@end ifinfo
+@noindent
+where @math{C(a,b) = a!/(b!(a-b)!)} and
+@c{$t \leq n_1 + n_2$}
+@math{t <= n_1 + n_2}. The domain of @math{k} is
+@c{$\hbox{max}(0,t-n_2), \ldots, \hbox{min}(t,n_1)$}
+@math{max(0,t-n_2), ..., min(t,n_1)}.
+
+If a population contains @math{n_1} elements of ``type 1'' and
+@math{n_2} elements of ``type 2'' then the hypergeometric
+distribution gives the probability of obtaining @math{k} elements of
+``type 1'' in @math{t} samples from the population without
+replacement.
+@end deftypefun
+
+@deftypefun double gsl_ran_hypergeometric_pdf (unsigned int @var{k}, unsigned int @var{n1}, unsigned int @var{n2}, unsigned int @var{t})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a hypergeometric distribution with parameters @var{n1}, @var{n2},
+@var{t}, using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-hypergeometric.tex}
+@end tex
+
+@deftypefun double gsl_cdf_hypergeometric_P (unsigned int @var{k}, unsigned int @var{n1}, unsigned int @var{n2}, unsigned int @var{t})
+@deftypefunx double gsl_cdf_hypergeometric_Q (unsigned int @var{k}, unsigned int @var{n1}, unsigned int @var{n2}, unsigned int @var{t})
+These functions compute the cumulative distribution functions
+@math{P(k)}, @math{Q(k)} for the hypergeometric distribution with
+parameters @var{n1}, @var{n2} and @var{t}.
+@end deftypefun
+
+
+@page
+@node The Logarithmic Distribution
+@section The Logarithmic Distribution
+@deftypefun {unsigned int} gsl_ran_logarithmic (const gsl_rng * @var{r}, double @var{p})
+@cindex Logarithmic random variates
+This function returns a random integer from the logarithmic
+distribution. The probability distribution for logarithmic random variates
+is,
+@tex
+\beforedisplay
+$$
+p(k) = {-1 \over \log(1-p)} {\left( p^k \over k \right)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p(k) = @{-1 \over \log(1-p)@} @{(p^k \over k)@}
+@end example
+
+@end ifinfo
+@noindent
+for @c{$k \ge 1$}
+@math{k >= 1}.
+@end deftypefun
+
+@deftypefun double gsl_ran_logarithmic_pdf (unsigned int @var{k}, double @var{p})
+This function computes the probability @math{p(k)} of obtaining @var{k}
+from a logarithmic distribution with probability parameter @var{p},
+using the formula given above.
+@end deftypefun
+
+@sp 1
+@tex
+\centerline{\input rand-logarithmic.tex}
+@end tex
+
+@page
+@node Shuffling and Sampling
+@section Shuffling and Sampling
+
+The following functions allow the shuffling and sampling of a set of
+objects. The algorithms rely on a random number generator as a source of
+randomness and a poor quality generator can lead to correlations in the
+output. In particular it is important to avoid generators with a short
+period. For more information see Knuth, v2, 3rd ed, Section 3.4.2,
+``Random Sampling and Shuffling''.
+
+@deftypefun void gsl_ran_shuffle (const gsl_rng * @var{r}, void * @var{base}, size_t @var{n}, size_t @var{size})
+
+This function randomly shuffles the order of @var{n} objects, each of
+size @var{size}, stored in the array @var{base}[0..@var{n}-1]. The
+output of the random number generator @var{r} is used to produce the
+permutation. The algorithm generates all possible @math{n!}
+permutations with equal probability, assuming a perfect source of random
+numbers.
+
+The following code shows how to shuffle the numbers from 0 to 51,
+
+@example
+int a[52];
+
+for (i = 0; i < 52; i++)
+ @{
+ a[i] = i;
+ @}
+
+gsl_ran_shuffle (r, a, 52, sizeof (int));
+@end example
+
+@end deftypefun
+
+@deftypefun int gsl_ran_choose (const gsl_rng * @var{r}, void * @var{dest}, size_t @var{k}, void * @var{src}, size_t @var{n}, size_t @var{size})
+This function fills the array @var{dest}[k] with @var{k} objects taken
+randomly from the @var{n} elements of the array
+@var{src}[0..@var{n}-1]. The objects are each of size @var{size}. The
+output of the random number generator @var{r} is used to make the
+selection. The algorithm ensures all possible samples are equally
+likely, assuming a perfect source of randomness.
+
+The objects are sampled @emph{without} replacement, thus each object can
+only appear once in @var{dest}[k]. It is required that @var{k} be less
+than or equal to @code{n}. The objects in @var{dest} will be in the
+same relative order as those in @var{src}. You will need to call
+@code{gsl_ran_shuffle(r, dest, n, size)} if you want to randomize the
+order.
+
+The following code shows how to select a random sample of three unique
+numbers from the set 0 to 99,
+
+@example
+double a[3], b[100];
+
+for (i = 0; i < 100; i++)
+ @{
+ b[i] = (double) i;
+ @}
+
+gsl_ran_choose (r, a, 3, b, 100, sizeof (double));
+@end example
+
+@end deftypefun
+
+@deftypefun void gsl_ran_sample (const gsl_rng * @var{r}, void * @var{dest}, size_t @var{k}, void * @var{src}, size_t @var{n}, size_t @var{size})
+This function is like @code{gsl_ran_choose} but samples @var{k} items
+from the original array of @var{n} items @var{src} with replacement, so
+the same object can appear more than once in the output sequence
+@var{dest}. There is no requirement that @var{k} be less than @var{n}
+in this case.
+@end deftypefun
+
+
+@node Random Number Distribution Examples
+@section Examples
+
+The following program demonstrates the use of a random number generator
+to produce variates from a distribution. It prints 10 samples from the
+Poisson distribution with a mean of 3.
+
+@example
+@verbatiminclude examples/randpoisson.c
+@end example
+
+@noindent
+If the library and header files are installed under @file{/usr/local}
+(the default location) then the program can be compiled with these
+options,
+
+@example
+$ gcc -Wall demo.c -lgsl -lgslcblas -lm
+@end example
+
+@noindent
+Here is the output of the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/randpoisson.out
+@end example
+
+@noindent
+The variates depend on the seed used by the generator. The seed for the
+default generator type @code{gsl_rng_default} can be changed with the
+@code{GSL_RNG_SEED} environment variable to produce a different stream
+of variates,
+
+@example
+$ GSL_RNG_SEED=123 ./a.out
+@verbatiminclude examples/randpoisson.2.out
+@end example
+
+@noindent
+The following program generates a random walk in two dimensions.
+
+@example
+@verbatiminclude examples/randwalk.c
+@end example
+
+@noindent
+Here is the output from the program, three 10-step random walks from the origin,
+
+@tex
+\centerline{\input random-walk.tex}
+@end tex
+
+The following program computes the upper and lower cumulative
+distribution functions for the standard normal distribution at
+@math{x=2}.
+
+@example
+@verbatiminclude examples/cdf.c
+@end example
+
+@noindent
+Here is the output of the program,
+
+@example
+@verbatiminclude examples/cdf.out
+@end example
+
+@node Random Number Distribution References and Further Reading
+@section References and Further Reading
+
+For an encyclopaedic coverage of the subject readers are advised to
+consult the book @cite{Non-Uniform Random Variate Generation} by Luc
+Devroye. It covers every imaginable distribution and provides hundreds
+of algorithms.
+
+@itemize @asis
+@item
+Luc Devroye, @cite{Non-Uniform Random Variate Generation},
+Springer-Verlag, ISBN 0-387-96305-7.
+@end itemize
+
+@noindent
+The subject of random variate generation is also reviewed by Knuth, who
+describes algorithms for all the major distributions.
+
+@itemize @asis
+@item
+Donald E. Knuth, @cite{The Art of Computer Programming: Seminumerical
+Algorithms} (Vol 2, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896842.
+@end itemize
+
+@noindent
+The Particle Data Group provides a short review of techniques for
+generating distributions of random numbers in the ``Monte Carlo''
+section of its Annual Review of Particle Physics.
+
+@itemize @asis
+@item
+@cite{Review of Particle Properties}
+R.M. Barnett et al., Physical Review D54, 1 (1996)
+@uref{http://pdg.lbl.gov/}.
+@end itemize
+
+@noindent
+The Review of Particle Physics is available online in postscript and pdf
+format.
+
+@noindent
+An overview of methods used to compute cumulative distribution functions
+can be found in @cite{Statistical Computing} by W.J. Kennedy and
+J.E. Gentle. Another general reference is @cite{Elements of Statistical
+Computing} by R.A. Thisted.
+
+@itemize @asis
+@item
+William E. Kennedy and James E. Gentle, @cite{Statistical Computing} (1980),
+Marcel Dekker, ISBN 0-8247-6898-1.
+@end itemize
+
+@itemize @asis
+@item
+Ronald A. Thisted, @cite{Elements of Statistical Computing} (1988),
+Chapman & Hall, ISBN 0-412-01371-1.
+@end itemize
+
+@noindent
+The cumulative distribution functions for the Gaussian distribution
+are based on the following papers,
+
+@itemize @asis
+@item
+@cite{Rational Chebyshev Approximations Using Linear Equations},
+W.J. Cody, W. Fraser, J.F. Hart. Numerische Mathematik 12, 242--251 (1968).
+@end itemize
+
+@itemize @asis
+@item
+@cite{Rational Chebyshev Approximations for the Error Function},
+W.J. Cody. Mathematics of Computation 23, n107, 631--637 (July 1969).
+@end itemize
diff --git a/gsl-1.9/doc/random-walk.tex b/gsl-1.9/doc/random-walk.tex
new file mode 100644
index 0000000..3305371
--- /dev/null
+++ b/gsl-1.9/doc/random-walk.tex
@@ -0,0 +1,571 @@
+% GNUPLOT: plain TeX with Postscript
+\begingroup
+ \catcode`\@=11\relax
+ \def\GNUPLOTspecial{%
+ \def\do##1{\catcode`##1=12\relax}\dospecials
+ \catcode`\{=1\catcode`\}=2\catcode\%=14\relax\special}%
+%
+\expandafter\ifx\csname GNUPLOTpicture\endcsname\relax
+ \csname newdimen\endcsname\GNUPLOTunit
+ \gdef\GNUPLOTpicture(#1,#2){\vbox to#2\GNUPLOTunit\bgroup
+ \def\put(##1,##2)##3{\unskip\raise##2\GNUPLOTunit
+ \hbox to0pt{\kern##1\GNUPLOTunit ##3\hss}\ignorespaces}%
+ \def\ljust##1{\vbox to0pt{\vss\hbox to0pt{##1\hss}\vss}}%
+ \def\cjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1\hss}\vss}}%
+ \def\rjust##1{\vbox to0pt{\vss\hbox to0pt{\hss ##1}\vss}}%
+ \def\stack##1{\let\\=\cr\tabskip=0pt\halign{\hfil ####\hfil\cr ##1\crcr}}%
+ \def\lstack##1{\hbox to0pt{\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\cstack##1{\hbox to0pt{\hss\vbox to0pt{\vss\stack{##1}}\hss}}%
+ \def\rstack##1{\hbox to0pt{\vbox to0pt{\stack{##1}\vss}\hss}}%
+ \vss\hbox to#1\GNUPLOTunit\bgroup\ignorespaces}%
+ \gdef\endGNUPLOTpicture{\hss\egroup\egroup}%
+\fi
+\GNUPLOTunit=0.1bp
+\GNUPLOTpicture(2880,2468)
+{\GNUPLOTspecial{"
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: random-walk.tex
+%%Creator: gnuplot 4.0 patchlevel 0
+%%CreationDate: Wed Aug 31 12:38:29 2005
+%%DocumentFonts:
+%%BoundingBox: 0 0 288 246
+%%Orientation: Landscape
+%%EndComments
+/gnudict 256 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -33 def
+/dl {10.0 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/Rounded false def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/N {newpath moveto} bind def
+/C {setrgbcolor} bind def
+/f {rlineto fill} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke userlinewidth 2 mul setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/AL { stroke userlinewidth 2 div setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/UL { dup gnulinewidth mul /userlinewidth exch def
+ dup 1 lt {pop 1} if 10 mul /udl exch def } def
+/PL { stroke userlinewidth setlinewidth
+ Rounded { 1 setlinejoin 1 setlinecap } if } def
+/LTw { PL [] 1 setgray } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 udl mul 2 udl mul] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+/BoxColFill {
+ gsave Rec
+ /Fillden exch def
+ currentrgbcolor
+ /ColB exch def /ColG exch def /ColR exch def
+ /ColR ColR Fillden mul Fillden sub 1 add def
+ /ColG ColG Fillden mul Fillden sub 1 add def
+ /ColB ColB Fillden mul Fillden sub 1 add def
+ ColR ColG ColB setrgbcolor
+ fill grestore } def
+%
+% PostScript Level 1 Pattern Fill routine
+% Usage: x y w h s a XX PatternFill
+% x,y = lower left corner of box to be filled
+% w,h = width and height of box
+% a = angle in degrees between lines and x-axis
+% XX = 0/1 for no/yes cross-hatch
+%
+/PatternFill { gsave /PFa [ 9 2 roll ] def
+ PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
+ PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
+ gsave 1 setgray fill grestore clip
+ currentlinewidth 0.5 mul setlinewidth
+ /PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
+ 0 0 M PFa 5 get rotate PFs -2 div dup translate
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 M 0 PFs V } for
+ 0 PFa 6 get ne {
+ 0 1 PFs PFa 4 get div 1 add floor cvi
+ { PFa 4 get mul 0 2 1 roll M PFs 0 V } for
+ } if
+ stroke grestore } def
+%
+/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
+dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
+currentdict end definefont pop
+end
+%%EndProlog
+gnudict begin
+gsave
+0 0 translate
+0.100 0.100 scale
+0 setgray
+newpath
+0.500 UL
+LTb
+413 363 M
+-63 0 V
+0.500 UL
+LTb
+413 544 M
+-63 0 V
+0.500 UL
+LTb
+413 724 M
+-63 0 V
+0.500 UL
+LTb
+413 905 M
+-63 0 V
+0.500 UL
+LTb
+413 1085 M
+-63 0 V
+0.500 UL
+LTb
+413 1266 M
+-63 0 V
+0.500 UL
+LTb
+413 1447 M
+-63 0 V
+0.500 UL
+LTb
+413 1627 M
+-63 0 V
+0.500 UL
+LTb
+413 1808 M
+-63 0 V
+0.500 UL
+LTb
+413 1988 M
+-63 0 V
+0.500 UL
+LTb
+413 2169 M
+-63 0 V
+0.500 UL
+LTb
+413 363 M
+0 -63 V
+0.500 UL
+LTb
+503 363 M
+91 0 R
+0 -63 V
+0.500 UL
+LTb
+684 363 M
+90 0 R
+0 -63 V
+0.500 UL
+LTb
+864 363 M
+91 0 R
+0 -63 V
+0.500 UL
+LTb
+1045 363 M
+90 0 R
+0 -63 V
+0.500 UL
+LTb
+1226 363 M
+90 0 R
+0 -63 V
+0.500 UL
+LTb
+1406 363 M
+91 0 R
+0 -63 V
+0.500 UL
+LTb
+1587 363 M
+90 0 R
+0 -63 V
+0.500 UL
+LTb
+1767 363 M
+91 0 R
+0 -63 V
+0.500 UL
+LTb
+1948 363 M
+90 0 R
+0 -63 V
+0.500 UL
+LTb
+2129 363 M
+90 0 R
+0 -63 V
+0.500 UL
+LTb
+1.000 UL
+LTa
+413 1266 M
+1806 0 V
+1.000 UL
+LTa
+1316 363 M
+0 1806 V
+0.500 UL
+LTb
+413 363 M
+1806 0 V
+0 1806 V
+-1806 0 V
+413 363 L
+LTb
+LTb
+LTb
+1.000 UP
+1.000 UP
+1.000 UL
+LT0
+1316 1266 M
+-106 146 V
+51 173 V
+159 86 V
+139 115 V
+-17 -180 V
+-161 -81 V
+-176 40 V
+-124 132 V
+175 47 V
+168 66 V
+1316 1266 M
+-166 70 V
+-176 40 V
+161 81 V
+-121 134 V
+903 1734 L
+68 -168 V
+823 1463 L
+179 27 V
+92 -156 V
+959 1454 L
+357 -188 R
+-176 -42 V
+-82 161 V
+-96 153 V
+-172 55 V
+172 -57 V
+26 179 V
+838 1614 L
+-14 180 V
+721 1646 L
+71 166 V
+524 -546 R
+-173 -51 V
+106 146 V
+110 143 V
+-41 176 V
+-82 -161 V
+1125 1376 L
+161 -82 V
+135 -120 V
+165 74 V
+146 106 V
+1316 1266 Pls
+1210 1412 Pls
+1261 1585 Pls
+1420 1671 Pls
+1559 1786 Pls
+1542 1606 Pls
+1381 1525 Pls
+1205 1565 Pls
+1081 1697 Pls
+1256 1744 Pls
+1424 1810 Pls
+1316 1266 Pls
+1150 1336 Pls
+974 1376 Pls
+1135 1457 Pls
+1014 1591 Pls
+903 1734 Pls
+971 1566 Pls
+823 1463 Pls
+1002 1490 Pls
+1094 1334 Pls
+959 1454 Pls
+1316 1266 Pls
+1140 1224 Pls
+1058 1385 Pls
+962 1538 Pls
+790 1593 Pls
+962 1536 Pls
+988 1715 Pls
+838 1614 Pls
+824 1794 Pls
+721 1646 Pls
+792 1812 Pls
+1316 1266 Pls
+1143 1215 Pls
+1249 1361 Pls
+1359 1504 Pls
+1318 1680 Pls
+1236 1519 Pls
+1125 1376 Pls
+1286 1294 Pls
+1421 1174 Pls
+1586 1248 Pls
+1732 1354 Pls
+0.500 UL
+LTb
+413 363 M
+1806 0 V
+0 1806 V
+-1806 0 V
+413 363 L
+1.000 UP
+stroke
+grestore
+end
+showpage
+}}%
+\put(1316,2319){\cjust{Random walk}}%
+\put(1316,50){\cjust{$k$}}%
+\put(100,1266){%
+\special{ps: gsave currentpoint currentpoint translate
+270 rotate neg exch neg exch translate}%
+\cstack{$p(k)$}%
+\special{ps: currentpoint grestore moveto}%
+}%
+\put(2219,200){\cjust{ 5}}%
+\put(2038,200){\cjust{ 4}}%
+\put(1858,200){\cjust{ 3}}%
+\put(1677,200){\cjust{ 2}}%
+\put(1497,200){\cjust{ 1}}%
+\put(1316,200){\cjust{ 0}}%
+\put(1135,200){\cjust{-1}}%
+\put(955,200){\cjust{-2}}%
+\put(774,200){\cjust{-3}}%
+\put(594,200){\cjust{-4}}%
+\put(413,200){\cjust{-5}}%
+\put(300,2169){\rjust{ 5}}%
+\put(300,1988){\rjust{ 4}}%
+\put(300,1808){\rjust{ 3}}%
+\put(300,1627){\rjust{ 2}}%
+\put(300,1447){\rjust{ 1}}%
+\put(300,1266){\rjust{ 0}}%
+\put(300,1085){\rjust{-1}}%
+\put(300,905){\rjust{-2}}%
+\put(300,724){\rjust{-3}}%
+\put(300,544){\rjust{-4}}%
+\put(300,363){\rjust{-5}}%
+\endGNUPLOTpicture
+\endgroup
+\endinput
diff --git a/gsl-1.9/doc/randplots.gnp b/gsl-1.9/doc/randplots.gnp
new file mode 100644
index 0000000..88221b5
--- /dev/null
+++ b/gsl-1.9/doc/randplots.gnp
@@ -0,0 +1,374 @@
+#set term postscript eps enhanced
+set term pstex monochrome
+set samples 300
+#set size 0.8,0.88 # paperback 6x9 #CHANGE THESE LATER IN FILE ALSO
+set size 1,1.1 # us letter #IF MODIFIED
+set border 31 lw 0.5
+set tics out
+set ticscale 0.5 0.25
+set xtics border nomirror norotate
+set ytics border nomirror norotate
+set format x "%g"
+
+# Continuous distributions
+
+set xlabel "$x$"
+set ylabel "$p(x)$"
+
+set xrange [-5:5]
+set yrange [0:0.5]
+set ytics 0.1
+set xtics 1
+set output "rand-gaussian.tex"
+set title "Gaussian Distribution"
+p(x)=1/sqrt(2*pi*sigma**2)*exp(-x**2/(2*sigma**2))
+plot sigma=1.0, p(x) title "$\\sigma=1$", \
+ sigma=2.0, p(x) title "$\\sigma=2$"
+
+set xrange [0:5]
+set yrange [0:2]
+set ytics 0.5
+set xtics 1
+set output "rand-gaussian-tail.tex"
+set title "Gaussian Tail Distribution"
+p(x)= x > a ? 1/(0.5*erfc(a/sqrt(2*sigma**2))*sqrt(2*pi*sigma**2))*exp(-x**2/(2*sigma**2)) : 0
+plot a=1.5, sigma=1.0, p(x) title "$\\sigma=1,a=1.5$"
+
+set xrange [0:5]
+set yrange [0:1.09]
+set ytics 0.5
+set xtics 1
+set output "rand-rayleigh-tail.tex"
+set title "Rayleigh Tail Distribution"
+p(x)= x > a ? (x/sigma**2)*exp((a**2 - x**2)/(2*sigma**2)) : 0
+plot a=1.0, sigma=1.0, p(x) title "$a=1,\\sigma=1$", \
+ a=0.5, sigma=2.0, p(x) title "$a=0.5,\\sigma=2$"
+
+set size ratio -1 0.8,1.143
+set xlabel "$x$"
+set ylabel "$y$"
+set xrange [-2:2]
+set yrange [-2:2]
+set ytics 1
+set xtics 1
+set output "rand-bivariate-gaussian.tex"
+set title "Bivariate Gaussian Distribution"
+set isosamples 30
+p(x,y)=1/sqrt(2*pi*sqrt(1-rho**2))*exp(-(x**2 + y**2 - 2*rho*x*y)/(2*(1-rho**2)))
+#set cntrparam cspline
+set noclabel
+set contour
+set view 0,0
+set nosurface
+splot rho=0.9, p(x,y) title "$\\sigma_x=1, \\sigma_y=1, \\rho=0.9$"
+set size noratio 1,1.1 # us letter
+
+set xlabel "$x$"
+set ylabel "$p(x)$"
+set ytics 0.1
+set xrange [-5:5]
+set yrange [0:0.4]
+set output "rand-cauchy.tex"
+set title "Cauchy Distribution"
+p(x)=1/(pi*a*(1+(x/a)**2))
+plot a=1.0, p(x) title "$a=1$", \
+ a=2.0, p(x) title "$a=2$"
+
+set ytics 0.5
+set yrange [0:1]
+set xrange [0:3]
+set output "rand-exponential.tex"
+set title "Exponential Distribution"
+p(x)=exp(-x/mu)/mu
+plot mu=1.0, p(x) title "$\\mu=1$", \
+ mu=2.0, p(x) title "$\\mu=2$"
+
+set yrange [0:1]
+set xrange [0:3]
+set output "rand-chisq.tex"
+set title "Chi-squared Distribution"
+p(x)=(x/2)**(nu/2.0-1.0) *exp(-x/2)/ (2*gamma(nu/2.0))
+plot nu=1.0, p(x) title "$\\nu=1$", \
+ nu=2.0, p(x) title "$\\nu=2$", \
+ nu=3.0, p(x) title "$\\nu=3$"
+
+set yrange [0:1]
+set xrange [0:5]
+set output "rand-erlang.tex"
+set title "Erlang Distribution"
+p(x)=x**(n-1) *exp(-x/a)/ (gamma(n)*a**n)
+plot n=1.0, a=1, p(x) title "$n=1$", \
+ n=2.0, a=1.0, p(x) title "$n=2$", \
+ n=3.0, a=1.0, p(x) title "$n=3$"
+
+set xrange [0:2]
+set xtics 1
+set output "rand-fdist.tex"
+set title "F-Distribution"
+p(x)=gamma((v1+v2)/2.0)*v1**(v1/2.0)*v2**(v2/2.0)\
+ /gamma(v1/2.0)/gamma(v2/2.0) * \
+ x**(v1/2.0-1)*(v2+v1*x)**-(v1/2.0+v2/2.0)
+plot v1=1.0, v2=1.0, p(x) title "$\\nu_1=1, \\nu_2=1$", \
+ v1=3.0, v2=1.0, p(x) title "$\\nu_1=3, \\nu_2=2$"
+
+set xrange [0:5]
+set output "rand-flat.tex"
+set title "Flat Distribution"
+p(x)= (x<b && x>a) ? 1/(b-a) : 0
+plot a=0.5, b=2.5, p(x) title "$a=0.5,b=2.5$" with step, \
+ a=1.2, b=4.8, p(x) title "$a=1.2,b=4.8$" with step
+
+set xrange [0:5]
+set yrange [0:1]
+set ytics 0.5
+set output "rand-gamma.tex"
+set title "Gamma Distribution"
+p(x)= x**(a-1)* exp(-x) / gamma(a)
+plot a=1.0, p(x) title "$a=1$", \
+ a=2.0, p(x) title "$a=2$", \
+ a=3.0, p(x) title "$a=3$"
+
+set xrange [0:1]
+set yrange [0:4]
+set xtics 0.25
+set ytics 1
+set output "rand-beta.tex"
+set title "Beta Distribution"
+p(x)= gamma(a+b)/(gamma(a)*gamma(b))*x**(a-1)*(1-x)**(b-1)
+plot a=2.0, b=2.0, p(x) title "$a=2,b=2$", \
+ a=4.0, b=1.0, p(x) title "$a=4,b=1$", \
+ a=1.0, b=4.0, p(x) title "$a=1,b=4$"
+
+
+set xrange [-5:5]
+set yrange [0:0.3]
+set ytics 0.1
+set xtics 1
+set output "rand-logistic.tex"
+set title "Logistic Distribution"
+p(x)= exp(-x/a)/a/(1+exp(-x/a))**2
+plot a=1.0, p(x) title "$a=1$", \
+ a=2.0, p(x) title "$a=2$"
+
+set xrange [0:3]
+set yrange [0:0.7]
+set xtics 1
+set ytics 0.5
+set output "rand-lognormal.tex"
+set title "Lognormal Distribution"
+p(x)= exp(-(log(x)-zeta)**2/2/sigma**2)/sqrt(2*pi*sigma**2)/x
+plot zeta=0.0, sigma=1.0, p(x) title "$\\zeta=0, \\sigma=1$", \
+ zeta=1.0, sigma=1.0, p(x) title "$\\zeta=1, \\sigma=1$"
+
+set xrange [0:5]
+set yrange [0:2]
+set ytics 0.5
+set xtics 1
+set output "rand-pareto.tex"
+set title "Pareto Distribution"
+p(x)= x>b ? a*b**a/x**(a+1) : 0
+plot a=1.0, b=1, p(x) title "$a=1, b=1$", \
+ a=3.0, b=2, p(x) title "$a=3, b=2 $"
+
+set xrange [0:5]
+set yrange [0:0.7]
+set ytics 0.1
+set xtics 1
+set output "rand-rayleigh.tex"
+set title "Rayleigh Distribution"
+p(x)= (x/sigma**2)*exp(-x**2/(2*sigma**2))
+plot sigma=1.0, p(x) title "$\\sigma=1$", \
+ sigma=2.0, p(x) title "$\\sigma=2$"
+
+set xrange [0:5]
+set yrange [0:1.09]
+set ytics 0.5
+set xtics 1
+set output "rand-rayleigh-tail.tex"
+set title "Rayleigh Tail Distribution"
+p(x)= x > a ? (x/sigma**2)*exp((a**2 - x**2)/(2*sigma**2)) : 0
+plot a=1.0, sigma=1.0, p(x) title "$a=1,\\sigma=1$", \
+ a=0.5, sigma=2.0, p(x) title "$a=0.5,\\sigma=2$"
+
+set xrange [-4:4]
+set yrange [0:0.5]
+set ytics 0.1
+set output "rand-tdist.tex"
+set title "Student's t distribution"
+p(x)=gamma((v+1.0)/2)/sqrt(pi*v)/gamma(v/2)*(1+(x**2)/v)**-((v+1.0)/2)
+plot v=1.0, p(x) title "$\\nu_1=1$", \
+ v=5.0, p(x) title "$\\nu_1=5$"
+
+set xrange [-5:5]
+set yrange [0:0.55]
+set ytics 0.1
+set output "rand-laplace.tex"
+set title "Laplace Distribution (Two-sided Exponential)"
+p(x)=exp(-abs(x)/a)/2/a
+plot a=1.0, p(x) title "$a=1$", \
+ a=2.0, p(x) title "$a=2$"
+
+set xrange [-5:5]
+set yrange [0:0.8]
+set ytics 0.2
+set output "rand-exppow.tex"
+set title "Exponential Power Distribution"
+p(x)=exp(-(abs(x/a))**b)/2/a/gamma(1.0+1.0/b)
+plot a=1.0, b=2.5, p(x) title "$a=1, b=2.5$", \
+ a=1.0, b=0.5, p(x) title "$a=1, b=0.5$"
+
+set xrange [-5:10]
+set yrange [0:0.2]
+set ytics 0.1
+set output "rand-landau.tex"
+set title "Landau Distribution"
+plot 'landau.dat' notitle w lines
+
+set xrange [-5:5]
+set yrange [0:0.45]
+set ytics 0.1
+set output "rand-levy.tex"
+set title "Levy Distribution"
+p1(x)=1/(pi*mu*(1+(x/mu)**2))
+p2(x)=1/sqrt(2*pi*2*mu**2)*exp(-x**2/(4*mu**2))
+plot mu=1.0, a=1, p1(x) title "$c=1, \\alpha=1.0$", \
+ mu=1.0, a=2, p2(x) title "$c=1, \\alpha=2.0$"
+
+set xrange [-5:5]
+set yrange [0:0.09]
+set ytics 0.05
+set output "rand-levyskew.tex"
+set title "Levy Skew Distribution"
+logp(x)= 1.0990e+01+x*(-3.3388e-01+x*(-4.2372e-01+x*(2.1749e-01+x*(-4.4910e-02 + x*(4.1801e-03 - 1.4456e-04*x)))))
+p1(x)=exp(logp(x))/1000000
+plot mu=1.0, a=1, p1(x) title "$c=1, \\alpha=1.0, \\beta=1.0$"
+
+
+set xrange [0:2]
+set yrange [0:1.5]
+set ytics 0.5
+set xtics 0.5
+set output "rand-weibull.tex"
+set title "Weibull Distribution"
+p(x)=(b/a) * (x/a)**(b-1) * exp(-(x/a)**b)
+plot a=1.0, b=1.0, p(x) title "$a=1,b=1$", \
+ a=1.0, b=2.0, p(x) title "$a=1,b=2$", \
+ a=2.0, b=3.0, p(x) title "$a=2,b=3$"
+
+set xrange [-2:5]
+set yrange [0:0.5]
+set ytics 0.1
+set xtics 1.0
+set output "rand-gumbel1.tex"
+set title "Type 1 Gumbel Distribution"
+p1(x)=a*b*exp(-(b*exp(-a*x)+a*x))
+plot a=1.0, b=1.0, p1(x) title "Type 1, $a=1,b=1$"
+
+set xrange [0:2]
+set yrange [0:0.7]
+set ytics 0.1
+set xtics 0.5
+set output "rand-gumbel2.tex"
+set title "Type 2 Gumbel Distribution"
+p2(x)=x > 0 ? a*b*x**(-a-1)*exp(-b*x**-a) : 0
+plot a=1.0, b=1.0, p2(x) title "Type 2, $a=1,b=1$"
+
+# Discrete distributions
+
+set xlabel "$k$"
+set ylabel "$p(k)$"
+set ticscale 0.5 1
+set mxtics 2
+
+set xrange [-0.5:10.5]
+set yrange [0:0.3]
+set ytics 0.1
+set xtics 1
+set function style step
+set output "rand-poisson.tex"
+set title "Poisson Distribution"
+p(x)=mu**int(x)/(int(x)!) * exp(-mu)
+plot mu=2.5, p(x+0.5) title "$\\mu=2.5$"
+
+set xrange [:1.5]
+set yrange [0:1]
+set ytics 0.5
+set xtics 1
+set function style step
+set output "rand-bernoulli.tex"
+set title "Bernoulli Trial"
+p(x)= (int(x) == 0) ? 1-p : p
+plot p = 0.7, p(x+0.5) title "$p=0.7$"
+
+set xrange [:10.5]
+set yrange [0:0.3]
+set xtics 1
+set ytics 0.1
+set output "rand-binomial.tex"
+set title "Binomial Distribution"
+p(x)= P**int(x)*(1-P)**(n-int(x))*gamma(n+1.0)/gamma(int(x)+1.0)/gamma(n-int(x)+1.0) + 1e-5
+plot P=0.5,n=9.99999999, p(x+0.5) title "$p=0.5,n=9$"
+
+set xrange [:5.5]
+set yrange [0:0.7]
+set ytics 0.1
+set xtics 1
+set output "rand-geometric.tex"
+set title "Geometric Distribution"
+p(x)=int(x) ? P*(1-P)**int(x-1) : 0
+plot P=0.5, p(x+0.5) title "$p=0.5$"
+
+set xrange [:10.5]
+set yrange [0:0.7]
+set ytics 0.1
+set xtics 1
+set output "rand-logarithmic.tex"
+set title "Logarithmic Distribution"
+p(x)=int(x) ? (-1/log(1-P))*(P**int(x))/int(x) : 0
+plot P=0.7, p(x+0.5) title "$p=0.7$"
+
+set xrange [:10.5]
+set yrange [0:0.7]
+set ytics 0.1
+set xtics 1
+set output "rand-hypergeometric.tex"
+set title "Hypergeometric Distribution"
+choose(a,b)=gamma(a+1)/(gamma(b+1)*gamma(a-b+1))
+p(x)=choose(n1,int(x))*choose(n2,t-int(x))/choose(n1+n2,t)
+plot n1=5, n2=20, t=3, p(x+0.5) title "$n1=5, n2=20, t=3$"
+
+set xrange [:10.5]
+set yrange [0:0.3]
+set xtics 1
+set ytics 0.1
+set output "rand-nbinomial.tex"
+set title "Negative Binomial Distribution"
+p(x)= (P**n)*((1-P)**(int(x)))*gamma(n+int(x))/gamma(n)/gamma(int(x)+1.0) + 1e-5
+plot P=0.5,n=3.5, p(x+0.5) title "$p=0.5,n=3.5$"
+
+set xrange [:10.5]
+set yrange [0:0.3]
+set xtics 1
+set ytics 0.1
+set output "rand-pascal.tex"
+set title "Pascal Distribution"
+p(x)= (P**n)*((1-P)**(int(x)))*gamma(n+int(x))/gamma(n)/gamma(int(x)+1.0) + 1e-5
+plot P=0.5,n=3, p(x+0.5) title "$p=0.5,n=3$"
+
+######################################################################
+
+set ticscale 1 0
+set xrange [-5:5]
+set yrange [-5:5]
+set xtics 1
+set ytics 1
+set size 0.8,1.143
+set size square
+set output "random-walk.tex"
+set title "Random walk"
+set xzeroaxis
+set yzeroaxis
+set nokey
+plot "rand-walk.dat" using 1:2 with linesp
+
+
diff --git a/gsl-1.9/doc/rng.texi b/gsl-1.9/doc/rng.texi
new file mode 100644
index 0000000..a947f31
--- /dev/null
+++ b/gsl-1.9/doc/rng.texi
@@ -0,0 +1,1456 @@
+@cindex random number generators
+
+The library provides a large collection of random number generators
+which can be accessed through a uniform interface. Environment
+variables allow you to select different generators and seeds at runtime,
+so that you can easily switch between generators without needing to
+recompile your program. Each instance of a generator keeps track of its
+own state, allowing the generators to be used in multi-threaded
+programs. Additional functions are available for transforming uniform
+random numbers into samples from continuous or discrete probability
+distributions such as the Gaussian, log-normal or Poisson distributions.
+
+These functions are declared in the header file @file{gsl_rng.h}.
+
+@comment Need to explain the difference between SERIAL and PARALLEL random
+@comment number generators here
+
+@menu
+* General comments on random numbers::
+* The Random Number Generator Interface::
+* Random number generator initialization::
+* Sampling from a random number generator::
+* Auxiliary random number generator functions::
+* Random number environment variables::
+* Copying random number generator state::
+* Reading and writing random number generator state::
+* Random number generator algorithms::
+* Unix random number generators::
+* Other random number generators::
+* Random Number Generator Performance::
+* Random Number Generator Examples::
+* Random Number References and Further Reading::
+* Random Number Acknowledgements::
+@end menu
+
+@node General comments on random numbers
+@section General comments on random numbers
+
+In 1988, Park and Miller wrote a paper entitled ``Random number
+generators: good ones are hard to find.'' [Commun.@: ACM, 31, 1192--1201].
+Fortunately, some excellent random number generators are available,
+though poor ones are still in common use. You may be happy with the
+system-supplied random number generator on your computer, but you should
+be aware that as computers get faster, requirements on random number
+generators increase. Nowadays, a simulation that calls a random number
+generator millions of times can often finish before you can make it down
+the hall to the coffee machine and back.
+
+A very nice review of random number generators was written by Pierre
+L'Ecuyer, as Chapter 4 of the book: Handbook on Simulation, Jerry Banks,
+ed. (Wiley, 1997). The chapter is available in postscript from
+L'Ecuyer's ftp site (see references). Knuth's volume on Seminumerical
+Algorithms (originally published in 1968) devotes 170 pages to random
+number generators, and has recently been updated in its 3rd edition
+(1997).
+@comment is only now starting to show its age.
+@comment Nonetheless,
+It is brilliant, a classic. If you don't own it, you should stop reading
+right now, run to the nearest bookstore, and buy it.
+
+A good random number generator will satisfy both theoretical and
+statistical properties. Theoretical properties are often hard to obtain
+(they require real math!), but one prefers a random number generator
+with a long period, low serial correlation, and a tendency @emph{not} to
+``fall mainly on the planes.'' Statistical tests are performed with
+numerical simulations. Generally, a random number generator is used to
+estimate some quantity for which the theory of probability provides an
+exact answer. Comparison to this exact answer provides a measure of
+``randomness''.
+
+@node The Random Number Generator Interface
+@section The Random Number Generator Interface
+
+It is important to remember that a random number generator is not a
+``real'' function like sine or cosine. Unlike real functions, successive
+calls to a random number generator yield different return values. Of
+course that is just what you want for a random number generator, but to
+achieve this effect, the generator must keep track of some kind of
+``state'' variable. Sometimes this state is just an integer (sometimes
+just the value of the previously generated random number), but often it
+is more complicated than that and may involve a whole array of numbers,
+possibly with some indices thrown in. To use the random number
+generators, you do not need to know the details of what comprises the
+state, and besides that varies from algorithm to algorithm.
+
+The random number generator library uses two special structs,
+@code{gsl_rng_type} which holds static information about each type of
+generator and @code{gsl_rng} which describes an instance of a generator
+created from a given @code{gsl_rng_type}.
+
+The functions described in this section are declared in the header file
+@file{gsl_rng.h}.
+
+@node Random number generator initialization
+@section Random number generator initialization
+
+@deftypefun {gsl_rng *} gsl_rng_alloc (const gsl_rng_type * @var{T})
+This function returns a pointer to a newly-created
+instance of a random number generator of type @var{T}.
+For example, the following code creates an instance of the Tausworthe
+generator,
+
+@example
+gsl_rng * r = gsl_rng_alloc (gsl_rng_taus);
+@end example
+
+If there is insufficient memory to create the generator then the
+function returns a null pointer and the error handler is invoked with an
+error code of @code{GSL_ENOMEM}.
+
+The generator is automatically initialized with the default seed,
+@code{gsl_rng_default_seed}. This is zero by default but can be changed
+either directly or by using the environment variable @code{GSL_RNG_SEED}
+(@pxref{Random number environment variables}).
+
+The details of the available generator types are
+described later in this chapter.
+@end deftypefun
+
+@deftypefun void gsl_rng_set (const gsl_rng * @var{r}, unsigned long int @var{s})
+This function initializes (or `seeds') the random number generator. If
+the generator is seeded with the same value of @var{s} on two different
+runs, the same stream of random numbers will be generated by successive
+calls to the routines below. If different values of @var{s} are
+supplied, then the generated streams of random numbers should be
+completely different. If the seed @var{s} is zero then the standard seed
+from the original implementation is used instead. For example, the
+original Fortran source code for the @code{ranlux} generator used a seed
+of 314159265, and so choosing @var{s} equal to zero reproduces this when
+using @code{gsl_rng_ranlux}.
+@end deftypefun
+
+@deftypefun void gsl_rng_free (gsl_rng * @var{r})
+This function frees all the memory associated with the generator
+@var{r}.
+@end deftypefun
+
+@node Sampling from a random number generator
+@section Sampling from a random number generator
+
+The following functions return uniformly distributed random numbers,
+either as integers or double precision floating point numbers. To obtain
+non-uniform distributions @pxref{Random Number Distributions}.
+
+@deftypefun {unsigned long int} gsl_rng_get (const gsl_rng * @var{r})
+This function returns a random integer from the generator @var{r}. The
+minimum and maximum values depend on the algorithm used, but all
+integers in the range [@var{min},@var{max}] are equally likely. The
+values of @var{min} and @var{max} can determined using the auxiliary
+functions @code{gsl_rng_max (r)} and @code{gsl_rng_min (r)}.
+@end deftypefun
+
+@deftypefun double gsl_rng_uniform (const gsl_rng * @var{r})
+This function returns a double precision floating point number uniformly
+distributed in the range [0,1). The range includes 0.0 but excludes 1.0.
+The value is typically obtained by dividing the result of
+@code{gsl_rng_get(r)} by @code{gsl_rng_max(r) + 1.0} in double
+precision. Some generators compute this ratio internally so that they
+can provide floating point numbers with more than 32 bits of randomness
+(the maximum number of bits that can be portably represented in a single
+@code{unsigned long int}).
+@end deftypefun
+
+@deftypefun double gsl_rng_uniform_pos (const gsl_rng * @var{r})
+This function returns a positive double precision floating point number
+uniformly distributed in the range (0,1), excluding both 0.0 and 1.0.
+The number is obtained by sampling the generator with the algorithm of
+@code{gsl_rng_uniform} until a non-zero value is obtained. You can use
+this function if you need to avoid a singularity at 0.0.
+@end deftypefun
+
+@deftypefun {unsigned long int} gsl_rng_uniform_int (const gsl_rng * @var{r}, unsigned long int @var{n})
+This function returns a random integer from 0 to @math{n-1} inclusive
+by scaling down and/or discarding samples from the generator @var{r}.
+All integers in the range @math{[0,n-1]} are produced with equal
+probability. For generators with a non-zero minimum value an offset
+is applied so that zero is returned with the correct probability.
+
+Note that this function is designed for sampling from ranges smaller
+than the range of the underlying generator. The parameter @var{n}
+must be less than or equal to the range of the generator @var{r}.
+If @var{n} is larger than the range of the generator then the function
+calls the error handler with an error code of @code{GSL_EINVAL} and
+returns zero.
+
+In particular, this function is not intended for generating the full range of
+unsigned integer values @c{$[0,2^{32}-1]$}
+@math{[0,2^32-1]}. Instead
+choose a generator with the maximal integer range and zero mimimum
+value, such as @code{gsl_rng_ranlxd1}, @code{gsl_rng_mt19937} or
+@code{gsl_rng_taus}, and sample it directly using
+@code{gsl_rng_get}. The range of each generator can be found using
+the auxiliary functions described in the next section.
+@end deftypefun
+
+@node Auxiliary random number generator functions
+@section Auxiliary random number generator functions
+The following functions provide information about an existing
+generator. You should use them in preference to hard-coding the generator
+parameters into your own code.
+
+@deftypefun {const char *} gsl_rng_name (const gsl_rng * @var{r})
+This function returns a pointer to the name of the generator.
+For example,
+
+@example
+printf ("r is a '%s' generator\n",
+ gsl_rng_name (r));
+@end example
+
+@noindent
+would print something like @code{r is a 'taus' generator}.
+@end deftypefun
+
+@deftypefun {unsigned long int} gsl_rng_max (const gsl_rng * @var{r})
+@code{gsl_rng_max} returns the largest value that @code{gsl_rng_get}
+can return.
+@end deftypefun
+
+@deftypefun {unsigned long int} gsl_rng_min (const gsl_rng * @var{r})
+@code{gsl_rng_min} returns the smallest value that @code{gsl_rng_get}
+can return. Usually this value is zero. There are some generators with
+algorithms that cannot return zero, and for these generators the minimum
+value is 1.
+@end deftypefun
+
+@deftypefun {void *} gsl_rng_state (const gsl_rng * @var{r})
+@deftypefunx size_t gsl_rng_size (const gsl_rng * @var{r})
+These functions return a pointer to the state of generator @var{r} and
+its size. You can use this information to access the state directly. For
+example, the following code will write the state of a generator to a
+stream,
+
+@example
+void * state = gsl_rng_state (r);
+size_t n = gsl_rng_size (r);
+fwrite (state, n, 1, stream);
+@end example
+@end deftypefun
+
+@deftypefun {const gsl_rng_type **} gsl_rng_types_setup (void)
+This function returns a pointer to an array of all the available
+generator types, terminated by a null pointer. The function should be
+called once at the start of the program, if needed. The following code
+fragment shows how to iterate over the array of generator types to print
+the names of the available algorithms,
+
+@example
+const gsl_rng_type **t, **t0;
+
+t0 = gsl_rng_types_setup ();
+
+printf ("Available generators:\n");
+
+for (t = t0; *t != 0; t++)
+ @{
+ printf ("%s\n", (*t)->name);
+ @}
+@end example
+@end deftypefun
+
+@node Random number environment variables
+@section Random number environment variables
+
+The library allows you to choose a default generator and seed from the
+environment variables @code{GSL_RNG_TYPE} and @code{GSL_RNG_SEED} and
+the function @code{gsl_rng_env_setup}. This makes it easy try out
+different generators and seeds without having to recompile your program.
+
+@deftypefun {const gsl_rng_type *} gsl_rng_env_setup (void)
+This function reads the environment variables @code{GSL_RNG_TYPE} and
+@code{GSL_RNG_SEED} and uses their values to set the corresponding
+library variables @code{gsl_rng_default} and
+@code{gsl_rng_default_seed}. These global variables are defined as
+follows,
+
+@example
+extern const gsl_rng_type *gsl_rng_default
+extern unsigned long int gsl_rng_default_seed
+@end example
+
+The environment variable @code{GSL_RNG_TYPE} should be the name of a
+generator, such as @code{taus} or @code{mt19937}. The environment
+variable @code{GSL_RNG_SEED} should contain the desired seed value. It
+is converted to an @code{unsigned long int} using the C library function
+@code{strtoul}.
+
+If you don't specify a generator for @code{GSL_RNG_TYPE} then
+@code{gsl_rng_mt19937} is used as the default. The initial value of
+@code{gsl_rng_default_seed} is zero.
+
+@end deftypefun
+
+@noindent
+@need 2000
+Here is a short program which shows how to create a global
+generator using the environment variables @code{GSL_RNG_TYPE} and
+@code{GSL_RNG_SEED},
+
+@example
+@verbatiminclude examples/rng.c
+@end example
+
+@noindent
+Running the program without any environment variables uses the initial
+defaults, an @code{mt19937} generator with a seed of 0,
+
+@example
+$ ./a.out
+@verbatiminclude examples/rng.out
+@end example
+
+@noindent
+By setting the two variables on the command line we can
+change the default generator and the seed,
+
+@example
+$ GSL_RNG_TYPE="taus" GSL_RNG_SEED=123 ./a.out
+GSL_RNG_TYPE=taus
+GSL_RNG_SEED=123
+generator type: taus
+seed = 123
+first value = 2720986350
+@end example
+
+@node Copying random number generator state
+@section Copying random number generator state
+
+The above methods do not expose the random number `state' which changes
+from call to call. It is often useful to be able to save and restore
+the state. To permit these practices, a few somewhat more advanced
+functions are supplied. These include:
+
+@deftypefun int gsl_rng_memcpy (gsl_rng * @var{dest}, const gsl_rng * @var{src})
+This function copies the random number generator @var{src} into the
+pre-existing generator @var{dest}, making @var{dest} into an exact copy
+of @var{src}. The two generators must be of the same type.
+@end deftypefun
+
+@deftypefun {gsl_rng *} gsl_rng_clone (const gsl_rng * @var{r})
+This function returns a pointer to a newly created generator which is an
+exact copy of the generator @var{r}.
+@end deftypefun
+
+@node Reading and writing random number generator state
+@section Reading and writing random number generator state
+
+The library provides functions for reading and writing the random
+number state to a file as binary data or formatted text.
+
+@deftypefun int gsl_rng_fwrite (FILE * @var{stream}, const gsl_rng * @var{r})
+This function writes the random number state of the random number
+generator @var{r} to the stream @var{stream} in binary format. The
+return value is 0 for success and @code{GSL_EFAILED} if there was a
+problem writing to the file. Since the data is written in the native
+binary format it may not be portable between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_rng_fread (FILE * @var{stream}, gsl_rng * @var{r})
+This function reads the random number state into the random number
+generator @var{r} from the open stream @var{stream} in binary format.
+The random number generator @var{r} must be preinitialized with the
+correct random number generator type since type information is not
+saved. The return value is 0 for success and @code{GSL_EFAILED} if
+there was a problem reading from the file. The data is assumed to
+have been written in the native binary format on the same
+architecture.
+@end deftypefun
+
+@node Random number generator algorithms
+@section Random number generator algorithms
+
+The functions described above make no reference to the actual algorithm
+used. This is deliberate so that you can switch algorithms without
+having to change any of your application source code. The library
+provides a large number of generators of different types, including
+simulation quality generators, generators provided for compatibility
+with other libraries and historical generators from the past.
+
+The following generators are recommended for use in simulation. They
+have extremely long periods, low correlation and pass most statistical
+tests. For the most reliable source of uncorrelated numbers, the
+second-generation @sc{ranlux} generators have the strongest proof of
+randomness.
+
+@deffn {Generator} gsl_rng_mt19937
+@cindex MT19937 random number generator
+The MT19937 generator of Makoto Matsumoto and Takuji Nishimura is a
+variant of the twisted generalized feedback shift-register algorithm,
+and is known as the ``Mersenne Twister'' generator. It has a Mersenne
+prime period of
+@comment
+@c{$2^{19937} - 1$}
+@math{2^19937 - 1} (about
+@c{$10^{6000}$}
+@math{10^6000}) and is
+equi-distributed in 623 dimensions. It has passed the @sc{diehard}
+statistical tests. It uses 624 words of state per generator and is
+comparable in speed to the other generators. The original generator used
+a default seed of 4357 and choosing @var{s} equal to zero in
+@code{gsl_rng_set} reproduces this. Later versions switched to 5489
+as the default seed, you can choose this explicitly via @code{gsl_rng_set}
+instead if you require it.
+
+For more information see,
+@itemize @asis
+@item
+Makoto Matsumoto and Takuji Nishimura, ``Mersenne Twister: A
+623-dimensionally equidistributed uniform pseudorandom number
+generator''. @cite{ACM Transactions on Modeling and Computer
+Simulation}, Vol.@: 8, No.@: 1 (Jan. 1998), Pages 3--30
+@end itemize
+
+@noindent
+The generator @code{gsl_rng_mt19937} uses the second revision of the
+seeding procedure published by the two authors above in 2002. The
+original seeding procedures could cause spurious artifacts for some seed
+values. They are still available through the alternative generators
+@code{gsl_rng_mt19937_1999} and @code{gsl_rng_mt19937_1998}.
+@end deffn
+
+@deffn {Generator} gsl_rng_ranlxs0
+@deffnx {Generator} gsl_rng_ranlxs1
+@deffnx {Generator} gsl_rng_ranlxs2
+@cindex RANLXS random number generator
+
+The generator @code{ranlxs0} is a second-generation version of the
+@sc{ranlux} algorithm of L@"uscher, which produces ``luxury random
+numbers''. This generator provides single precision output (24 bits) at
+three luxury levels @code{ranlxs0}, @code{ranlxs1} and @code{ranlxs2},
+in increasing order of strength.
+It uses double-precision floating point arithmetic internally and can be
+significantly faster than the integer version of @code{ranlux},
+particularly on 64-bit architectures. The period of the generator is
+about @c{$10^{171}$}
+@math{10^171}. The algorithm has mathematically proven properties and
+can provide truly decorrelated numbers at a known level of randomness.
+The higher luxury levels provide increased decorrelation between samples
+as an additional safety margin.
+@end deffn
+
+@deffn {Generator} gsl_rng_ranlxd1
+@deffnx {Generator} gsl_rng_ranlxd2
+@cindex RANLXD random number generator
+
+These generators produce double precision output (48 bits) from the
+@sc{ranlxs} generator. The library provides two luxury levels
+@code{ranlxd1} and @code{ranlxd2}, in increasing order of strength.
+@end deffn
+
+
+@deffn {Generator} gsl_rng_ranlux
+@deffnx {Generator} gsl_rng_ranlux389
+
+@cindex RANLUX random number generator
+The @code{ranlux} generator is an implementation of the original
+algorithm developed by L@"uscher. It uses a
+lagged-fibonacci-with-skipping algorithm to produce ``luxury random
+numbers''. It is a 24-bit generator, originally designed for
+single-precision IEEE floating point numbers. This implementation is
+based on integer arithmetic, while the second-generation versions
+@sc{ranlxs} and @sc{ranlxd} described above provide floating-point
+implementations which will be faster on many platforms.
+The period of the generator is about @c{$10^{171}$}
+@math{10^171}. The algorithm has mathematically proven properties and
+it can provide truly decorrelated numbers at a known level of
+randomness. The default level of decorrelation recommended by L@"uscher
+is provided by @code{gsl_rng_ranlux}, while @code{gsl_rng_ranlux389}
+gives the highest level of randomness, with all 24 bits decorrelated.
+Both types of generator use 24 words of state per generator.
+
+For more information see,
+@itemize @asis
+@item
+M. L@"uscher, ``A portable high-quality random number generator for
+lattice field theory calculations'', @cite{Computer Physics
+Communications}, 79 (1994) 100--110.
+@item
+F. James, ``RANLUX: A Fortran implementation of the high-quality
+pseudo-random number generator of L@"uscher'', @cite{Computer Physics
+Communications}, 79 (1994) 111--114
+@end itemize
+@end deffn
+
+
+@deffn {Generator} gsl_rng_cmrg
+@cindex CMRG, combined multiple recursive random number generator
+This is a combined multiple recursive generator by L'Ecuyer.
+Its sequence is,
+@tex
+\beforedisplay
+$$
+z_n = (x_n - y_n) \,\hbox{mod}\, m_1
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+z_n = (x_n - y_n) mod m_1
+@end example
+
+@end ifinfo
+@noindent
+where the two underlying generators @math{x_n} and @math{y_n} are,
+@tex
+\beforedisplay
+$$
+\eqalign{
+x_n & = (a_1 x_{n-1} + a_2 x_{n-2} + a_3 x_{n-3}) \,\hbox{mod}\, m_1 \cr
+y_n & = (b_1 y_{n-1} + b_2 y_{n-2} + b_3 y_{n-3}) \,\hbox{mod}\, m_2
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_n = (a_1 x_@{n-1@} + a_2 x_@{n-2@} + a_3 x_@{n-3@}) mod m_1
+y_n = (b_1 y_@{n-1@} + b_2 y_@{n-2@} + b_3 y_@{n-3@}) mod m_2
+@end example
+
+@end ifinfo
+@noindent
+with coefficients
+@math{a_1 = 0},
+@math{a_2 = 63308},
+@math{a_3 = -183326},
+@math{b_1 = 86098},
+@math{b_2 = 0},
+@math{b_3 = -539608},
+and moduli
+@c{$m_1 = 2^{31} - 1 = 2147483647$}
+@math{m_1 = 2^31 - 1 = 2147483647}
+and
+@c{$m_2 = 2145483479$}
+@math{m_2 = 2145483479}.
+
+The period of this generator is
+@c{$\hbox{lcm}(m_1^3-1, m_2^3-1)$}
+@math{lcm(m_1^3-1, m_2^3-1)},
+which is approximately
+@c{$2^{185}$}
+@math{2^185}
+(about
+@c{$10^{56}$}
+@math{10^56}). It uses
+6 words of state per generator. For more information see,
+
+@itemize @asis
+@item
+P. L'Ecuyer, ``Combined Multiple Recursive Random Number
+Generators'', @cite{Operations Research}, 44, 5 (1996), 816--822.
+@end itemize
+@end deffn
+
+@deffn {Generator} gsl_rng_mrg
+@cindex MRG, multiple recursive random number generator
+This is a fifth-order multiple recursive generator by L'Ecuyer, Blouin
+and Coutre. Its sequence is,
+@tex
+\beforedisplay
+$$
+x_n = (a_1 x_{n-1} + a_5 x_{n-5}) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_n = (a_1 x_@{n-1@} + a_5 x_@{n-5@}) mod m
+@end example
+
+@end ifinfo
+@noindent
+with
+@math{a_1 = 107374182},
+@math{a_2 = a_3 = a_4 = 0},
+@math{a_5 = 104480}
+and
+@c{$m = 2^{31}-1$}
+@math{m = 2^31 - 1}.
+
+The period of this generator is about
+@c{$10^{46}$}
+@math{10^46}. It uses 5 words
+of state per generator. More information can be found in the following
+paper,
+@itemize @asis
+@item
+P. L'Ecuyer, F. Blouin, and R. Coutre, ``A search for good multiple
+recursive random number generators'', @cite{ACM Transactions on Modeling and
+Computer Simulation} 3, 87--98 (1993).
+@end itemize
+@end deffn
+
+@deffn {Generator} gsl_rng_taus
+@deffnx {Generator} gsl_rng_taus2
+@cindex Tausworthe random number generator
+This is a maximally equidistributed combined Tausworthe generator by
+L'Ecuyer. The sequence is,
+@tex
+\beforedisplay
+$$
+x_n = (s^1_n \oplus s^2_n \oplus s^3_n)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_n = (s1_n ^^ s2_n ^^ s3_n)
+@end example
+
+@end ifinfo
+@noindent
+where,
+@tex
+\beforedisplay
+$$
+\eqalign{
+s^1_{n+1} &= (((s^1_n \& 4294967294)\ll 12) \oplus (((s^1_n\ll 13) \oplus s^1_n)\gg 19)) \cr
+s^2_{n+1} &= (((s^2_n \& 4294967288)\ll 4) \oplus (((s^2_n\ll 2) \oplus s^2_n)\gg 25)) \cr
+s^3_{n+1} &= (((s^3_n \& 4294967280)\ll 17) \oplus (((s^3_n\ll 3) \oplus s^3_n)\gg 11))
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+s1_@{n+1@} = (((s1_n&4294967294)<<12)^^(((s1_n<<13)^^s1_n)>>19))
+s2_@{n+1@} = (((s2_n&4294967288)<< 4)^^(((s2_n<< 2)^^s2_n)>>25))
+s3_@{n+1@} = (((s3_n&4294967280)<<17)^^(((s3_n<< 3)^^s3_n)>>11))
+@end example
+
+@end ifinfo
+@noindent
+computed modulo
+@c{$2^{32}$}
+@math{2^32}. In the formulas above
+@c{$\oplus$}
+@math{^^}
+denotes ``exclusive-or''. Note that the algorithm relies on the properties
+of 32-bit unsigned integers and has been implemented using a bitmask
+of @code{0xFFFFFFFF} to make it work on 64 bit machines.
+
+The period of this generator is @c{$2^{88}$}
+@math{2^88} (about
+@c{$10^{26}$}
+@math{10^26}). It uses 3 words of state per generator. For more
+information see,
+
+@itemize @asis
+@item
+P. L'Ecuyer, ``Maximally Equidistributed Combined Tausworthe
+Generators'', @cite{Mathematics of Computation}, 65, 213 (1996), 203--213.
+@end itemize
+
+@noindent
+The generator @code{gsl_rng_taus2} uses the same algorithm as
+@code{gsl_rng_taus} but with an improved seeding procedure described in
+the paper,
+
+@itemize @asis
+@item
+P. L'Ecuyer, ``Tables of Maximally Equidistributed Combined LFSR
+Generators'', @cite{Mathematics of Computation}, 68, 225 (1999), 261--269
+@end itemize
+
+@noindent
+The generator @code{gsl_rng_taus2} should now be used in preference to
+@code{gsl_rng_taus}.
+@end deffn
+
+@deffn {Generator} gsl_rng_gfsr4
+@cindex Four-tap Generalized Feedback Shift Register
+The @code{gfsr4} generator is like a lagged-fibonacci generator, and
+produces each number as an @code{xor}'d sum of four previous values.
+@tex
+\beforedisplay
+$$
+r_n = r_{n-A} \oplus r_{n-B} \oplus r_{n-C} \oplus r_{n-D}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+r_n = r_@{n-A@} ^^ r_@{n-B@} ^^ r_@{n-C@} ^^ r_@{n-D@}
+@end example
+@end ifinfo
+
+Ziff (ref below) notes that ``it is now widely known'' that two-tap
+registers (such as R250, which is described below)
+have serious flaws, the most obvious one being the three-point
+correlation that comes from the definition of the generator. Nice
+mathematical properties can be derived for GFSR's, and numerics bears
+out the claim that 4-tap GFSR's with appropriately chosen offsets are as
+random as can be measured, using the author's test.
+
+This implementation uses the values suggested the example on p392 of
+Ziff's article: @math{A=471}, @math{B=1586}, @math{C=6988}, @math{D=9689}.
+
+
+If the offsets are appropriately chosen (such as the one ones in this
+implementation), then the sequence is said to be maximal; that means
+that the period is @math{2^D - 1}, where @math{D} is the longest lag.
+(It is one less than @math{2^D} because it is not permitted to have all
+zeros in the @code{ra[]} array.) For this implementation with
+@math{D=9689} that works out to about @c{$10^{2917}$}
+@math{10^2917}.
+
+Note that the implementation of this generator using a 32-bit
+integer amounts to 32 parallel implementations of one-bit
+generators. One consequence of this is that the period of this
+32-bit generator is the same as for the one-bit generator.
+Moreover, this independence means that all 32-bit patterns are
+equally likely, and in particular that 0 is an allowed random
+value. (We are grateful to Heiko Bauke for clarifying for us these
+properties of GFSR random number generators.)
+
+For more information see,
+@itemize @asis
+@item
+Robert M. Ziff, ``Four-tap shift-register-sequence random-number
+generators'', @cite{Computers in Physics}, 12(4), Jul/Aug
+1998, pp 385--392.
+@end itemize
+@end deffn
+
+@node Unix random number generators
+@section Unix random number generators
+
+The standard Unix random number generators @code{rand}, @code{random}
+and @code{rand48} are provided as part of GSL. Although these
+generators are widely available individually often they aren't all
+available on the same platform. This makes it difficult to write
+portable code using them and so we have included the complete set of
+Unix generators in GSL for convenience. Note that these generators
+don't produce high-quality randomness and aren't suitable for work
+requiring accurate statistics. However, if you won't be measuring
+statistical quantities and just want to introduce some variation into
+your program then these generators are quite acceptable.
+
+@cindex rand, BSD random number generator
+@cindex Unix random number generators, rand
+@cindex Unix random number generators, rand48
+
+@deffn {Generator} gsl_rng_rand
+@cindex BSD random number generator
+This is the BSD @code{rand} generator. Its sequence is
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n + c) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n + c) mod m
+@end example
+
+@end ifinfo
+@noindent
+with
+@math{a = 1103515245},
+@math{c = 12345} and
+@c{$m = 2^{31}$}
+@math{m = 2^31}.
+The seed specifies the initial value,
+@math{x_1}. The period of this
+generator is
+@c{$2^{31}$}
+@math{2^31}, and it uses 1 word of storage per
+generator.
+@end deffn
+
+@deffn {Generator} gsl_rng_random_bsd
+@deffnx {Generator} gsl_rng_random_libc5
+@deffnx {Generator} gsl_rng_random_glibc2
+These generators implement the @code{random} family of functions, a
+set of linear feedback shift register generators originally used in BSD
+Unix. There are several versions of @code{random} in use today: the
+original BSD version (e.g. on SunOS4), a libc5 version (found on
+older GNU/Linux systems) and a glibc2 version. Each version uses a
+different seeding procedure, and thus produces different sequences.
+
+The original BSD routines accepted a variable length buffer for the
+generator state, with longer buffers providing higher-quality
+randomness. The @code{random} function implemented algorithms for
+buffer lengths of 8, 32, 64, 128 and 256 bytes, and the algorithm with
+the largest length that would fit into the user-supplied buffer was
+used. To support these algorithms additional generators are available
+with the following names,
+
+@example
+gsl_rng_random8_bsd
+gsl_rng_random32_bsd
+gsl_rng_random64_bsd
+gsl_rng_random128_bsd
+gsl_rng_random256_bsd
+@end example
+
+@noindent
+where the numeric suffix indicates the buffer length. The original BSD
+@code{random} function used a 128-byte default buffer and so
+@code{gsl_rng_random_bsd} has been made equivalent to
+@code{gsl_rng_random128_bsd}. Corresponding versions of the @code{libc5}
+and @code{glibc2} generators are also available, with the names
+@code{gsl_rng_random8_libc5}, @code{gsl_rng_random8_glibc2}, etc.
+@end deffn
+
+@deffn {Generator} gsl_rng_rand48
+@cindex rand48 random number generator
+This is the Unix @code{rand48} generator. Its sequence is
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n + c) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n + c) mod m
+@end example
+
+@end ifinfo
+@noindent
+defined on 48-bit unsigned integers with
+@math{a = 25214903917},
+@math{c = 11} and
+@c{$m = 2^{48}$}
+@math{m = 2^48}.
+The seed specifies the upper 32 bits of the initial value, @math{x_1},
+with the lower 16 bits set to @code{0x330E}. The function
+@code{gsl_rng_get} returns the upper 32 bits from each term of the
+sequence. This does not have a direct parallel in the original
+@code{rand48} functions, but forcing the result to type @code{long int}
+reproduces the output of @code{mrand48}. The function
+@code{gsl_rng_uniform} uses the full 48 bits of internal state to return
+the double precision number @math{x_n/m}, which is equivalent to the
+function @code{drand48}. Note that some versions of the GNU C Library
+contained a bug in @code{mrand48} function which caused it to produce
+different results (only the lower 16-bits of the return value were set).
+@end deffn
+
+@node Other random number generators
+@section Other random number generators
+
+The generators in this section are provided for compatibility with
+existing libraries. If you are converting an existing program to use GSL
+then you can select these generators to check your new implementation
+against the original one, using the same random number generator. After
+verifying that your new program reproduces the original results you can
+then switch to a higher-quality generator.
+
+Note that most of the generators in this section are based on single
+linear congruence relations, which are the least sophisticated type of
+generator. In particular, linear congruences have poor properties when
+used with a non-prime modulus, as several of these routines do (e.g.
+with a power of two modulus,
+@c{$2^{31}$}
+@math{2^31} or
+@c{$2^{32}$}
+@math{2^32}). This
+leads to periodicity in the least significant bits of each number,
+with only the higher bits having any randomness. Thus if you want to
+produce a random bitstream it is best to avoid using the least
+significant bits.
+
+@deffn {Generator} gsl_rng_ranf
+@cindex RANF random number generator
+@cindex CRAY random number generator, RANF
+This is the CRAY random number generator @code{RANF}. Its sequence is
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n) mod m
+@end example
+
+@end ifinfo
+@noindent
+defined on 48-bit unsigned integers with @math{a = 44485709377909} and
+@c{$m = 2^{48}$}
+@math{m = 2^48}. The seed specifies the lower
+32 bits of the initial value,
+@math{x_1}, with the lowest bit set to
+prevent the seed taking an even value. The upper 16 bits of
+@math{x_1}
+are set to 0. A consequence of this procedure is that the pairs of seeds
+2 and 3, 4 and 5, etc produce the same sequences.
+
+The generator compatible with the CRAY MATHLIB routine RANF. It
+produces double precision floating point numbers which should be
+identical to those from the original RANF.
+
+There is a subtlety in the implementation of the seeding. The initial
+state is reversed through one step, by multiplying by the modular
+inverse of @math{a} mod @math{m}. This is done for compatibility with
+the original CRAY implementation.
+
+Note that you can only seed the generator with integers up to
+@c{$2^{32}$}
+@math{2^32}, while the original CRAY implementation uses
+non-portable wide integers which can cover all
+@c{$2^{48}$}
+@math{2^48} states of the generator.
+
+The function @code{gsl_rng_get} returns the upper 32 bits from each term
+of the sequence. The function @code{gsl_rng_uniform} uses the full 48
+bits to return the double precision number @math{x_n/m}.
+
+The period of this generator is @c{$2^{46}$}
+@math{2^46}.
+@end deffn
+
+@deffn {Generator} gsl_rng_ranmar
+@cindex RANMAR random number generator
+This is the RANMAR lagged-fibonacci generator of Marsaglia, Zaman and
+Tsang. It is a 24-bit generator, originally designed for
+single-precision IEEE floating point numbers. It was included in the
+CERNLIB high-energy physics library.
+@end deffn
+
+@deffn {Generator} gsl_rng_r250
+@cindex shift-register random number generator
+@cindex R250 shift-register random number generator
+This is the shift-register generator of Kirkpatrick and Stoll. The
+sequence is based on the recurrence
+@tex
+\beforedisplay
+$$
+x_n = x_{n-103} \oplus x_{n-250}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_n = x_@{n-103@} ^^ x_@{n-250@}
+@end example
+
+@end ifinfo
+@noindent
+where
+@c{$\oplus$}
+@math{^^} denotes ``exclusive-or'', defined on
+32-bit words. The period of this generator is about @c{$2^{250}$}
+@math{2^250} and it
+uses 250 words of state per generator.
+
+For more information see,
+@itemize @asis
+@item
+S. Kirkpatrick and E. Stoll, ``A very fast shift-register sequence random
+number generator'', @cite{Journal of Computational Physics}, 40, 517--526
+(1981)
+@end itemize
+@end deffn
+
+@deffn {Generator} gsl_rng_tt800
+@cindex TT800 random number generator
+This is an earlier version of the twisted generalized feedback
+shift-register generator, and has been superseded by the development of
+MT19937. However, it is still an acceptable generator in its own
+right. It has a period of
+@c{$2^{800}$}
+@math{2^800} and uses 33 words of storage
+per generator.
+
+For more information see,
+@itemize @asis
+@item
+Makoto Matsumoto and Yoshiharu Kurita, ``Twisted GFSR Generators
+II'', @cite{ACM Transactions on Modelling and Computer Simulation},
+Vol.@: 4, No.@: 3, 1994, pages 254--266.
+@end itemize
+@end deffn
+
+@comment The following generators are included only for historical reasons, so
+@comment that you can reproduce results from old programs which might have used
+@comment them. These generators should not be used for real simulations since
+@comment they have poor statistical properties by modern standards.
+
+@deffn {Generator} gsl_rng_vax
+@cindex VAX random number generator
+This is the VAX generator @code{MTH$RANDOM}. Its sequence is,
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n + c) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n + c) mod m
+@end example
+
+@end ifinfo
+@noindent
+with
+@math{a = 69069}, @math{c = 1} and
+@c{$m = 2^{32}$}
+@math{m = 2^32}. The seed specifies the initial value,
+@math{x_1}. The
+period of this generator is
+@c{$2^{32}$}
+@math{2^32} and it uses 1 word of storage per
+generator.
+@end deffn
+
+@deffn {Generator} gsl_rng_transputer
+This is the random number generator from the INMOS Transputer
+Development system. Its sequence is,
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n) mod m
+@end example
+
+@end ifinfo
+@noindent
+with @math{a = 1664525} and
+@c{$m = 2^{32}$}
+@math{m = 2^32}.
+The seed specifies the initial value,
+@c{$x_1$}
+@math{x_1}.
+@end deffn
+
+@deffn {Generator} gsl_rng_randu
+@cindex RANDU random number generator
+This is the IBM @code{RANDU} generator. Its sequence is
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n) mod m
+@end example
+
+@end ifinfo
+@noindent
+with @math{a = 65539} and
+@c{$m = 2^{31}$}
+@math{m = 2^31}. The
+seed specifies the initial value,
+@math{x_1}. The period of this
+generator was only
+@c{$2^{29}$}
+@math{2^29}. It has become a textbook example of a
+poor generator.
+@end deffn
+
+@deffn {Generator} gsl_rng_minstd
+@cindex RANMAR random number generator
+This is Park and Miller's ``minimal standard'' @sc{minstd} generator, a
+simple linear congruence which takes care to avoid the major pitfalls of
+such algorithms. Its sequence is,
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n) mod m
+@end example
+
+@end ifinfo
+@noindent
+with @math{a = 16807} and
+@c{$m = 2^{31} - 1 = 2147483647$}
+@math{m = 2^31 - 1 = 2147483647}.
+The seed specifies the initial value,
+@c{$x_1$}
+@math{x_1}. The period of this
+generator is about
+@c{$2^{31}$}
+@math{2^31}.
+
+This generator is used in the IMSL Library (subroutine RNUN) and in
+MATLAB (the RAND function). It is also sometimes known by the acronym
+``GGL'' (I'm not sure what that stands for).
+
+For more information see,
+@itemize @asis
+@item
+Park and Miller, ``Random Number Generators: Good ones are hard to find'',
+@cite{Communications of the ACM}, October 1988, Volume 31, No 10, pages
+1192--1201.
+@end itemize
+@end deffn
+
+@deffn {Generator} gsl_rng_uni
+@deffnx {Generator} gsl_rng_uni32
+This is a reimplementation of the 16-bit SLATEC random number generator
+RUNIF. A generalization of the generator to 32 bits is provided by
+@code{gsl_rng_uni32}. The original source code is available from NETLIB.
+@end deffn
+
+@deffn {Generator} gsl_rng_slatec
+This is the SLATEC random number generator RAND. It is ancient. The
+original source code is available from NETLIB.
+@end deffn
+
+
+@deffn {Generator} gsl_rng_zuf
+This is the ZUFALL lagged Fibonacci series generator of Peterson. Its
+sequence is,
+@tex
+\beforedisplay
+$$
+\eqalign{
+t &= u_{n-273} + u_{n-607} \cr
+u_n &= t - \hbox{floor}(t)
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+t = u_@{n-273@} + u_@{n-607@}
+u_n = t - floor(t)
+@end example
+@end ifinfo
+
+The original source code is available from NETLIB. For more information
+see,
+@itemize @asis
+@item
+W. Petersen, ``Lagged Fibonacci Random Number Generators for the NEC
+SX-3'', @cite{International Journal of High Speed Computing} (1994).
+@end itemize
+@end deffn
+
+@deffn {Generator} gsl_rng_knuthran2
+This is a second-order multiple recursive generator described by Knuth
+in @cite{Seminumerical Algorithms}, 3rd Ed., page 108. Its sequence is,
+@tex
+\beforedisplay
+$$
+x_n = (a_1 x_{n-1} + a_2 x_{n-2}) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_n = (a_1 x_@{n-1@} + a_2 x_@{n-2@}) mod m
+@end example
+
+@end ifinfo
+@noindent
+with
+@math{a_1 = 271828183},
+@math{a_2 = 314159269},
+and
+@c{$m = 2^{31}-1$}
+@math{m = 2^31 - 1}.
+@end deffn
+
+@deffn {Generator} gsl_rng_knuthran2002
+@deffnx {Generator} gsl_rng_knuthran
+This is a second-order multiple recursive generator described by Knuth
+in @cite{Seminumerical Algorithms}, 3rd Ed., Section 3.6. Knuth
+provides its C code. The updated routine @code{gsl_rng_knuthran2002}
+is from the revised 9th printing and corrects some weaknesses in the
+earlier version, which is implemented as @code{gsl_rng_knuthran}.
+@end deffn
+
+@deffn {Generator} gsl_rng_borosh13
+@deffnx {Generator} gsl_rng_fishman18
+@deffnx {Generator} gsl_rng_fishman20
+@deffnx {Generator} gsl_rng_lecuyer21
+@deffnx {Generator} gsl_rng_waterman14
+These multiplicative generators are taken from Knuth's
+@cite{Seminumerical Algorithms}, 3rd Ed., pages 106--108. Their sequence
+is,
+@tex
+\beforedisplay
+$$
+x_{n+1} = (a x_n) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (a x_n) mod m
+@end example
+
+@end ifinfo
+@noindent
+where the seed specifies the initial value, @c{$x_1$}
+@math{x_1}.
+The parameters @math{a} and @math{m} are as follows,
+Borosh-Niederreiter:
+@math{a = 1812433253}, @c{$m = 2^{32}$}
+@math{m = 2^32},
+Fishman18:
+@math{a = 62089911},
+@c{$m = 2^{31}-1$}
+@math{m = 2^31 - 1},
+Fishman20:
+@math{a = 48271},
+@c{$m = 2^{31}-1$}
+@math{m = 2^31 - 1},
+L'Ecuyer:
+@math{a = 40692},
+@c{$m = 2^{31}-249$}
+@math{m = 2^31 - 249},
+Waterman:
+@math{a = 1566083941},
+@c{$m = 2^{32}$}
+@math{m = 2^32}.
+@end deffn
+
+@deffn {Generator} gsl_rng_fishman2x
+This is the L'Ecuyer--Fishman random number generator. It is taken from
+Knuth's @cite{Seminumerical Algorithms}, 3rd Ed., page 108. Its sequence
+is,
+@tex
+\beforedisplay
+$$
+z_{n+1} = (x_n - y_n) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+z_@{n+1@} = (x_n - y_n) mod m
+@end example
+
+@end ifinfo
+@noindent
+with @c{$m = 2^{31}-1$}
+@math{m = 2^31 - 1}.
+@math{x_n} and @math{y_n} are given by the @code{fishman20}
+and @code{lecuyer21} algorithms.
+The seed specifies the initial value,
+@c{$x_1$}
+@math{x_1}.
+
+@end deffn
+
+
+@deffn {Generator} gsl_rng_coveyou
+This is the Coveyou random number generator. It is taken from Knuth's
+@cite{Seminumerical Algorithms}, 3rd Ed., Section 3.2.2. Its sequence
+is,
+@tex
+\beforedisplay
+$$
+x_{n+1} = (x_n (x_n + 1)) \,\hbox{mod}\, m
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{n+1@} = (x_n (x_n + 1)) mod m
+@end example
+
+@end ifinfo
+@noindent
+with @c{$m = 2^{32}$}
+@math{m = 2^32}.
+The seed specifies the initial value,
+@c{$x_1$}
+@math{x_1}.
+@end deffn
+
+
+
+
+
+@node Random Number Generator Performance
+@section Performance
+
+@comment
+@comment I made the original plot like this
+@comment ./benchmark > tmp; cat tmp | perl -n -e '($n,$s) = split(" ",$_); printf("%17s ",$n); print "-" x ($s/1e5), "\n";'
+@comment
+
+The following table shows the relative performance of a selection the
+available random number generators. The fastest simulation quality
+generators are @code{taus}, @code{gfsr4} and @code{mt19937}. The
+generators which offer the best mathematically-proven quality are those
+based on the @sc{ranlux} algorithm.
+
+@comment The large number of generators based on single linear congruences are
+@comment represented by the @code{random} generator below. These generators are
+@comment fast but have the lowest statistical quality.
+
+@example
+1754 k ints/sec, 870 k doubles/sec, taus
+1613 k ints/sec, 855 k doubles/sec, gfsr4
+1370 k ints/sec, 769 k doubles/sec, mt19937
+ 565 k ints/sec, 571 k doubles/sec, ranlxs0
+ 400 k ints/sec, 405 k doubles/sec, ranlxs1
+ 490 k ints/sec, 389 k doubles/sec, mrg
+ 407 k ints/sec, 297 k doubles/sec, ranlux
+ 243 k ints/sec, 254 k doubles/sec, ranlxd1
+ 251 k ints/sec, 253 k doubles/sec, ranlxs2
+ 238 k ints/sec, 215 k doubles/sec, cmrg
+ 247 k ints/sec, 198 k doubles/sec, ranlux389
+ 141 k ints/sec, 140 k doubles/sec, ranlxd2
+
+1852 k ints/sec, 935 k doubles/sec, ran3
+ 813 k ints/sec, 575 k doubles/sec, ran0
+ 787 k ints/sec, 476 k doubles/sec, ran1
+ 379 k ints/sec, 292 k doubles/sec, ran2
+@end example
+
+@node Random Number Generator Examples
+@section Examples
+
+The following program demonstrates the use of a random number generator
+to produce uniform random numbers in the range [0.0, 1.0),
+
+@example
+@verbatiminclude examples/rngunif.c
+@end example
+
+@noindent
+Here is the output of the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/rngunif.out
+@end example
+
+@noindent
+The numbers depend on the seed used by the generator. The default seed
+can be changed with the @code{GSL_RNG_SEED} environment variable to
+produce a different stream of numbers. The generator itself can be
+changed using the environment variable @code{GSL_RNG_TYPE}. Here is the
+output of the program using a seed value of 123 and the
+multiple-recursive generator @code{mrg},
+
+@example
+$ GSL_RNG_SEED=123 GSL_RNG_TYPE=mrg ./a.out
+@verbatiminclude examples/rngunif.2.out
+@end example
+
+@node Random Number References and Further Reading
+@section References and Further Reading
+
+The subject of random number generation and testing is reviewed
+extensively in Knuth's @cite{Seminumerical Algorithms}.
+
+@itemize @asis
+@item
+Donald E. Knuth, @cite{The Art of Computer Programming: Seminumerical
+Algorithms} (Vol 2, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896842.
+@end itemize
+
+@noindent
+Further information is available in the review paper written by Pierre
+L'Ecuyer,
+
+@itemize @asis
+P. L'Ecuyer, ``Random Number Generation'', Chapter 4 of the
+Handbook on Simulation, Jerry Banks Ed., Wiley, 1998, 93--137.
+
+@uref{http://www.iro.umontreal.ca/~lecuyer/papers.html}
+in the file @file{handsim.ps}.
+@end itemize
+
+@noindent
+The source code for the @sc{diehard} random number generator tests is also
+available online,
+
+@itemize @asis
+@item
+@cite{DIEHARD source code} G. Marsaglia,
+@item
+@uref{http://stat.fsu.edu/pub/diehard/}
+@end itemize
+
+@noindent
+A comprehensive set of random number generator tests is available from
+@sc{nist},
+
+@itemize @asis
+@item
+NIST Special Publication 800-22, ``A Statistical Test Suite for the
+Validation of Random Number Generators and Pseudo Random Number
+Generators for Cryptographic Applications''.
+@item
+@uref{http://csrc.nist.gov/rng/}
+@end itemize
+
+@node Random Number Acknowledgements
+@section Acknowledgements
+
+Thanks to Makoto Matsumoto, Takuji Nishimura and Yoshiharu Kurita for
+making the source code to their generators (MT19937, MM&TN; TT800,
+MM&YK) available under the GNU General Public License. Thanks to Martin
+L@"uscher for providing notes and source code for the @sc{ranlxs} and
+@sc{ranlxd} generators.
+
+@comment lcg
+@comment [ LCG(n) := n * 69069 mod (2^32) ]
+@comment First 6: [69069, 475559465, 2801775573, 1790562961, 3104832285, 4238970681]
+@comment %2^31-1 69069, 475559465, 654291926, 1790562961, 957348638, 2091487034
+@comment mrg
+@comment [q([x1, x2, x3, x4, x5]) := [107374182 mod 2147483647 * x1 + 104480 mod 2147483647 * x5, x1, x2, x3, x4]]
+@comment
+@comment cmrg
+@comment [q1([x1,x2,x3]) := [63308 mod 2147483647 * x2 -183326 mod 2147483647 * x3, x1, x2],
+@comment q2([x1,x2,x3]) := [86098 mod 2145483479 * x1 -539608 mod 2145483479 * x3, x1, x2] ]
+@comment initial for q1 is [69069, 475559465, 654291926]
+@comment initial for q2 is [1790562961, 959348806, 2093487202]
+
+@comment tausworthe
+@comment [ b1(x) := rsh(xor(lsh(x, 13), x), 19),
+@comment q1(x) := xor(lsh(and(x, 4294967294), 12), b1(x)),
+@comment b2(x) := rsh(xor(lsh(x, 2), x), 25),
+@comment q2(x) := xor(lsh(and(x, 4294967288), 4), b2(x)),
+@comment b3(x) := rsh(xor(lsh(x, 3), x), 11),
+@comment q3(x) := xor(lsh(and(x, 4294967280), 17), b3(x)) ]
+@comment [s1, s2, s3] = [600098857, 1131373026, 1223067536]
+@comment [2948905028, 441213979, 394017882]
diff --git a/gsl-1.9/doc/roots-bisection.eps b/gsl-1.9/doc/roots-bisection.eps
new file mode 100644
index 0000000..9f8cc7b
--- /dev/null
+++ b/gsl-1.9/doc/roots-bisection.eps
@@ -0,0 +1,1784 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mathematica-PSRender
+%%BoundingBox: 0 82 432 350
+%%Pages: (atend)
+%%EndComments
+%%BeginProlog
+/setrgbcolor dup where
+{ pop pop }
+{ { .114 mul exch .587 mul add exch .299 mul add setgray } bind def }
+ifelse
+/C /curveto load def
+/f /fill load def
+/F { closepath fill } bind def
+/L /lineto load def
+/S /stroke load def
+/s { closepath stroke } bind def
+/d /setdash load def
+/g /setgray load def
+/m /moveto load def
+/r /setrgbcolor load def
+/w /setlinewidth load def
+/b { gsave gsave F grestore 0 g S grestore newpath } bind def
+/dot { newpath 0 360 arc fill } bind def
+%%EndProlog
+%%Page: 1 1
+gsave
+0 82.5055 m
+432. 82.5055 L
+432. 349.495 L
+0 349.495 L
+0 82.5055 L
+closepath clip newpath
+0 g
+0.25 w
+[ ] 0 d
+51.0828 105.864 m
+51.0828 106.865 L
+S
+48.0828 92.8629 m
+/F0 /Times-Roman findfont def
+F0 10. scalefont setfont
+(1) show
+87.3821 105.864 m
+87.3821 106.865 L
+S
+84.3821 92.8629 m
+(2) show
+123.683 105.864 m
+123.683 106.865 L
+S
+120.683 92.8629 m
+(3) show
+159.984 105.864 m
+159.984 106.865 L
+S
+156.984 92.8629 m
+(4) show
+196.283 105.864 m
+196.283 106.865 L
+S
+193.283 92.8629 m
+(5) show
+0.125 w
+58.3427 105.864 m
+58.3427 106.464 L
+S
+65.6025 105.864 m
+65.6025 106.464 L
+S
+72.8624 105.864 m
+72.8624 106.464 L
+S
+80.1222 105.864 m
+80.1222 106.464 L
+S
+94.6419 105.864 m
+94.6419 106.464 L
+S
+101.903 105.864 m
+101.903 106.464 L
+S
+109.163 105.864 m
+109.163 106.464 L
+S
+116.423 105.864 m
+116.423 106.464 L
+S
+130.943 105.864 m
+130.943 106.464 L
+S
+138.203 105.864 m
+138.203 106.464 L
+S
+145.462 105.864 m
+145.462 106.464 L
+S
+152.724 105.864 m
+152.724 106.464 L
+S
+167.244 105.864 m
+167.244 106.464 L
+S
+174.503 105.864 m
+174.503 106.464 L
+S
+181.763 105.864 m
+181.763 106.464 L
+S
+189.023 105.864 m
+189.023 106.464 L
+S
+43.8214 105.864 m
+43.8214 106.464 L
+S
+203.544 105.864 m
+203.544 106.464 L
+S
+0.25 w
+43.6405 105.864 m
+203.725 105.864 L
+S
+43.6405 108.22 m
+44.641 108.22 L
+S
+26.6394 104.72 m
+/F1 /Times-Roman findfont def
+F1 10. scalefont setfont
+(-) show
+33.2644 104.72 m
+F0 10. scalefont setfont
+(1) show
+43.6405 131.777 m
+44.641 131.777 L
+S
+14.6395 128.277 m
+F1 10. scalefont setfont
+(-) show
+21.2645 128.277 m
+F0 10. scalefont setfont
+(0.5) show
+43.6405 155.333 m
+44.641 155.333 L
+S
+33.6395 151.833 m
+(0) show
+43.6405 178.89 m
+44.641 178.89 L
+S
+21.6395 175.39 m
+(0.5) show
+43.6405 202.446 m
+44.641 202.446 L
+S
+33.6395 198.946 m
+(1) show
+0.125 w
+43.6405 112.932 m
+44.2408 112.932 L
+S
+43.6405 117.643 m
+44.2408 117.643 L
+S
+43.6405 122.354 m
+44.2408 122.354 L
+S
+43.6405 127.066 m
+44.2408 127.066 L
+S
+43.6405 136.488 m
+44.2408 136.488 L
+S
+43.6405 141.2 m
+44.2408 141.2 L
+S
+43.6405 145.911 m
+44.2408 145.911 L
+S
+43.6405 150.622 m
+44.2408 150.622 L
+S
+43.6405 160.045 m
+44.2408 160.045 L
+S
+43.6405 164.756 m
+44.2408 164.756 L
+S
+43.6405 169.467 m
+44.2408 169.467 L
+S
+43.6405 174.179 m
+44.2408 174.179 L
+S
+43.6405 183.601 m
+44.2408 183.601 L
+S
+43.6405 188.312 m
+44.2408 188.312 L
+S
+43.6405 193.024 m
+44.2408 193.024 L
+S
+43.6405 197.735 m
+44.2408 197.735 L
+S
+0.25 w
+43.6405 105.864 m
+43.6405 204.801 L
+S
+51.0828 203.801 m
+51.0828 204.801 L
+S
+87.3821 203.801 m
+87.3821 204.801 L
+S
+123.683 203.801 m
+123.683 204.801 L
+S
+159.984 203.801 m
+159.984 204.801 L
+S
+196.283 203.801 m
+196.283 204.801 L
+S
+0.125 w
+58.3427 204.201 m
+58.3427 204.801 L
+S
+65.6025 204.201 m
+65.6025 204.801 L
+S
+72.8624 204.201 m
+72.8624 204.801 L
+S
+80.1222 204.201 m
+80.1222 204.801 L
+S
+94.6419 204.201 m
+94.6419 204.801 L
+S
+101.903 204.201 m
+101.903 204.801 L
+S
+109.163 204.201 m
+109.163 204.801 L
+S
+116.423 204.201 m
+116.423 204.801 L
+S
+130.943 204.201 m
+130.943 204.801 L
+S
+138.203 204.201 m
+138.203 204.801 L
+S
+145.462 204.201 m
+145.462 204.801 L
+S
+152.724 204.201 m
+152.724 204.801 L
+S
+167.244 204.201 m
+167.244 204.801 L
+S
+174.503 204.201 m
+174.503 204.801 L
+S
+181.763 204.201 m
+181.763 204.801 L
+S
+189.023 204.201 m
+189.023 204.801 L
+S
+43.8214 204.201 m
+43.8214 204.801 L
+S
+203.544 204.201 m
+203.544 204.801 L
+S
+0.25 w
+43.6405 204.801 m
+203.725 204.801 L
+S
+202.725 108.22 m
+203.725 108.22 L
+S
+202.725 131.777 m
+203.725 131.777 L
+S
+202.725 155.333 m
+203.725 155.333 L
+S
+202.725 178.89 m
+203.725 178.89 L
+S
+202.725 202.446 m
+203.725 202.446 L
+S
+0.125 w
+203.125 112.932 m
+203.725 112.932 L
+S
+203.125 117.643 m
+203.725 117.643 L
+S
+203.125 122.354 m
+203.725 122.354 L
+S
+203.125 127.066 m
+203.725 127.066 L
+S
+203.125 136.488 m
+203.725 136.488 L
+S
+203.125 141.2 m
+203.725 141.2 L
+S
+203.125 145.911 m
+203.725 145.911 L
+S
+203.125 150.622 m
+203.725 150.622 L
+S
+203.125 160.045 m
+203.725 160.045 L
+S
+203.125 164.756 m
+203.725 164.756 L
+S
+203.125 169.467 m
+203.725 169.467 L
+S
+203.125 174.179 m
+203.725 174.179 L
+S
+203.125 183.601 m
+203.725 183.601 L
+S
+203.125 188.312 m
+203.725 188.312 L
+S
+203.125 193.024 m
+203.725 193.024 L
+S
+203.125 197.735 m
+203.725 197.735 L
+S
+0.25 w
+203.725 105.864 m
+203.725 204.801 L
+S
+43.6405 155.333 m
+203.725 155.333 L
+S
+gsave
+43.6405 105.864 m
+203.725 105.864 L
+203.725 204.801 L
+43.6405 204.801 L
+43.6405 105.864 L
+closepath clip newpath
+1.5 w
+47.4521 192.238 m
+53.6362 196.669 L
+56.8555 198.508 L
+60.3822 200.133 L
+61.967 200.727 L
+63.6623 201.267 L
+65.2503 201.681 L
+66.7167 201.985 L
+68.3528 202.233 L
+69.214 202.326 L
+69.6543 202.363 L
+70.1281 202.397 L
+70.5411 202.418 L
+70.9205 202.432 L
+71.1014 202.437 L
+71.2999 202.442 L
+71.4872 202.445 L
+71.6617 202.446 L
+71.7674 202.446 L
+71.8827 202.446 L
+72.0908 202.445 L
+72.2941 202.442 L
+72.4798 202.438 L
+72.6815 202.432 L
+72.904 202.424 L
+73.3522 202.403 L
+73.754 202.378 L
+74.1911 202.344 L
+74.9851 202.265 L
+76.4755 202.056 L
+78.214 201.713 L
+79.8229 201.3 L
+82.8116 200.296 L
+86.1094 198.835 L
+92.5448 194.961 L
+98.7385 190.061 L
+105.324 183.745 L
+111.667 176.778 L
+117.768 169.459 L
+124.261 161.237 L
+130.512 153.142 L
+137.154 144.614 L
+143.556 136.733 L
+149.713 129.693 L
+156.263 123.014 L
+162.571 117.574 L
+168.636 113.414 L
+172.011 111.598 L
+175.094 110.27 L
+176.62 109.732 L
+S
+176.62 109.732 m
+178.283 109.239 L
+179.842 108.862 L
+181.31 108.587 L
+182.106 108.469 L
+182.965 108.368 L
+183.346 108.331 L
+183.747 108.299 L
+184.123 108.273 L
+184.465 108.254 L
+184.866 108.236 L
+185.087 108.23 L
+185.295 108.225 L
+185.487 108.222 L
+185.664 108.22 L
+185.86 108.22 L
+186.068 108.22 L
+186.276 108.224 L
+186.393 108.225 L
+186.499 108.227 L
+186.695 108.233 L
+186.904 108.24 L
+187.344 108.26 L
+187.824 108.289 L
+188.674 108.363 L
+189.474 108.456 L
+190.97 108.69 L
+192.582 109.029 L
+194.327 109.5 L
+197.042 110.444 L
+199.914 111.715 L
+S
+0.5 g
+0.5 w
+123.683 155.333 m
+123.683 161.982 L
+S
+159.984 155.333 m
+159.984 119.678 L
+S
+141.833 155.333 m
+141.833 138.806 L
+S
+0 g
+123.683 161.982 2. dot
+159.984 119.678 2. dot
+126.683 163.482 m
+(a) show
+132.683 161.982 m
+F0 7.125 scalefont setfont
+(2) show
+162.984 121.178 m
+F0 10. scalefont setfont
+(b) show
+168.984 119.678 m
+F0 7.125 scalefont setfont
+(2) show
+grestore
+0 g
+0.25 w
+[ ] 0 d
+266.593 105.864 m
+266.593 106.865 L
+S
+263.593 92.8629 m
+F0 10. scalefont setfont
+(1) show
+302.892 105.864 m
+302.892 106.865 L
+S
+299.892 92.8629 m
+(2) show
+339.193 105.864 m
+339.193 106.865 L
+S
+336.193 92.8629 m
+(3) show
+375.494 105.864 m
+375.494 106.865 L
+S
+372.494 92.8629 m
+(4) show
+411.793 105.864 m
+411.793 106.865 L
+S
+408.793 92.8629 m
+(5) show
+0.125 w
+273.853 105.864 m
+273.853 106.464 L
+S
+281.113 105.864 m
+281.113 106.464 L
+S
+288.373 105.864 m
+288.373 106.464 L
+S
+295.632 105.864 m
+295.632 106.464 L
+S
+310.152 105.864 m
+310.152 106.464 L
+S
+317.414 105.864 m
+317.414 106.464 L
+S
+324.673 105.864 m
+324.673 106.464 L
+S
+331.933 105.864 m
+331.933 106.464 L
+S
+346.453 105.864 m
+346.453 106.464 L
+S
+353.713 105.864 m
+353.713 106.464 L
+S
+360.973 105.864 m
+360.973 106.464 L
+S
+368.234 105.864 m
+368.234 106.464 L
+S
+382.754 105.864 m
+382.754 106.464 L
+S
+390.014 105.864 m
+390.014 106.464 L
+S
+397.273 105.864 m
+397.273 106.464 L
+S
+404.533 105.864 m
+404.533 106.464 L
+S
+259.332 105.864 m
+259.332 106.464 L
+S
+419.055 105.864 m
+419.055 106.464 L
+S
+0.25 w
+259.151 105.864 m
+419.235 105.864 L
+S
+259.151 108.22 m
+260.151 108.22 L
+S
+242.15 104.72 m
+F1 10. scalefont setfont
+(-) show
+248.775 104.72 m
+F0 10. scalefont setfont
+(1) show
+259.151 131.777 m
+260.151 131.777 L
+S
+230.15 128.277 m
+F1 10. scalefont setfont
+(-) show
+236.775 128.277 m
+F0 10. scalefont setfont
+(0.5) show
+259.151 155.333 m
+260.151 155.333 L
+S
+249.15 151.833 m
+(0) show
+259.151 178.89 m
+260.151 178.89 L
+S
+237.15 175.39 m
+(0.5) show
+259.151 202.446 m
+260.151 202.446 L
+S
+249.15 198.946 m
+(1) show
+0.125 w
+259.151 112.932 m
+259.751 112.932 L
+S
+259.151 117.643 m
+259.751 117.643 L
+S
+259.151 122.354 m
+259.751 122.354 L
+S
+259.151 127.066 m
+259.751 127.066 L
+S
+259.151 136.488 m
+259.751 136.488 L
+S
+259.151 141.2 m
+259.751 141.2 L
+S
+259.151 145.911 m
+259.751 145.911 L
+S
+259.151 150.622 m
+259.751 150.622 L
+S
+259.151 160.045 m
+259.751 160.045 L
+S
+259.151 164.756 m
+259.751 164.756 L
+S
+259.151 169.467 m
+259.751 169.467 L
+S
+259.151 174.179 m
+259.751 174.179 L
+S
+259.151 183.601 m
+259.751 183.601 L
+S
+259.151 188.312 m
+259.751 188.312 L
+S
+259.151 193.024 m
+259.751 193.024 L
+S
+259.151 197.735 m
+259.751 197.735 L
+S
+0.25 w
+259.151 105.864 m
+259.151 204.801 L
+S
+266.593 203.801 m
+266.593 204.801 L
+S
+302.892 203.801 m
+302.892 204.801 L
+S
+339.193 203.801 m
+339.193 204.801 L
+S
+375.494 203.801 m
+375.494 204.801 L
+S
+411.793 203.801 m
+411.793 204.801 L
+S
+0.125 w
+273.853 204.201 m
+273.853 204.801 L
+S
+281.113 204.201 m
+281.113 204.801 L
+S
+288.373 204.201 m
+288.373 204.801 L
+S
+295.632 204.201 m
+295.632 204.801 L
+S
+310.152 204.201 m
+310.152 204.801 L
+S
+317.414 204.201 m
+317.414 204.801 L
+S
+324.673 204.201 m
+324.673 204.801 L
+S
+331.933 204.201 m
+331.933 204.801 L
+S
+346.453 204.201 m
+346.453 204.801 L
+S
+353.713 204.201 m
+353.713 204.801 L
+S
+360.973 204.201 m
+360.973 204.801 L
+S
+368.234 204.201 m
+368.234 204.801 L
+S
+382.754 204.201 m
+382.754 204.801 L
+S
+390.014 204.201 m
+390.014 204.801 L
+S
+397.273 204.201 m
+397.273 204.801 L
+S
+404.533 204.201 m
+404.533 204.801 L
+S
+259.332 204.201 m
+259.332 204.801 L
+S
+419.055 204.201 m
+419.055 204.801 L
+S
+0.25 w
+259.151 204.801 m
+419.235 204.801 L
+S
+418.235 108.22 m
+419.235 108.22 L
+S
+418.235 131.777 m
+419.235 131.777 L
+S
+418.235 155.333 m
+419.235 155.333 L
+S
+418.235 178.89 m
+419.235 178.89 L
+S
+418.235 202.446 m
+419.235 202.446 L
+S
+0.125 w
+418.635 112.932 m
+419.235 112.932 L
+S
+418.635 117.643 m
+419.235 117.643 L
+S
+418.635 122.354 m
+419.235 122.354 L
+S
+418.635 127.066 m
+419.235 127.066 L
+S
+418.635 136.488 m
+419.235 136.488 L
+S
+418.635 141.2 m
+419.235 141.2 L
+S
+418.635 145.911 m
+419.235 145.911 L
+S
+418.635 150.622 m
+419.235 150.622 L
+S
+418.635 160.045 m
+419.235 160.045 L
+S
+418.635 164.756 m
+419.235 164.756 L
+S
+418.635 169.467 m
+419.235 169.467 L
+S
+418.635 174.179 m
+419.235 174.179 L
+S
+418.635 183.601 m
+419.235 183.601 L
+S
+418.635 188.312 m
+419.235 188.312 L
+S
+418.635 193.024 m
+419.235 193.024 L
+S
+418.635 197.735 m
+419.235 197.735 L
+S
+0.25 w
+419.235 105.864 m
+419.235 204.801 L
+S
+259.151 155.333 m
+419.235 155.333 L
+S
+gsave
+259.151 105.864 m
+419.235 105.864 L
+419.235 204.801 L
+259.151 204.801 L
+259.151 105.864 L
+closepath clip newpath
+1.5 w
+262.962 192.238 m
+269.146 196.669 L
+272.366 198.508 L
+275.892 200.133 L
+277.477 200.727 L
+279.172 201.267 L
+280.761 201.681 L
+282.227 201.985 L
+283.863 202.233 L
+284.724 202.326 L
+285.164 202.363 L
+285.638 202.397 L
+286.051 202.418 L
+286.431 202.432 L
+286.612 202.437 L
+286.81 202.442 L
+286.997 202.445 L
+287.172 202.446 L
+287.278 202.446 L
+287.393 202.446 L
+287.601 202.445 L
+287.804 202.442 L
+287.99 202.438 L
+288.192 202.432 L
+288.414 202.424 L
+288.862 202.403 L
+289.264 202.378 L
+289.701 202.344 L
+290.495 202.265 L
+291.986 202.056 L
+293.724 201.713 L
+295.333 201.3 L
+298.322 200.296 L
+301.62 198.835 L
+308.055 194.961 L
+314.249 190.061 L
+320.835 183.745 L
+327.177 176.778 L
+333.278 169.459 L
+339.771 161.237 L
+346.022 153.142 L
+352.664 144.614 L
+359.066 136.733 L
+365.223 129.693 L
+371.773 123.014 L
+378.081 117.574 L
+384.146 113.414 L
+387.521 111.598 L
+390.604 110.27 L
+392.13 109.732 L
+S
+392.13 109.732 m
+393.793 109.239 L
+395.352 108.862 L
+396.82 108.587 L
+397.616 108.469 L
+398.476 108.368 L
+398.857 108.331 L
+399.257 108.299 L
+399.633 108.273 L
+399.976 108.254 L
+400.376 108.236 L
+400.597 108.23 L
+400.805 108.225 L
+400.997 108.222 L
+401.175 108.22 L
+401.37 108.22 L
+401.578 108.22 L
+401.786 108.224 L
+401.903 108.225 L
+402.009 108.227 L
+402.206 108.233 L
+402.414 108.24 L
+402.854 108.26 L
+403.334 108.289 L
+404.184 108.363 L
+404.985 108.456 L
+406.48 108.69 L
+408.092 109.029 L
+409.837 109.5 L
+412.552 110.444 L
+415.424 111.715 L
+S
+0.5 g
+0.5 w
+339.193 155.333 m
+339.193 161.982 L
+S
+357.343 155.333 m
+357.343 138.806 L
+S
+348.268 155.333 m
+348.268 150.236 L
+S
+0 g
+339.193 161.982 2. dot
+357.343 138.806 2. dot
+342.193 163.482 m
+(a) show
+348.193 161.982 m
+F0 7.125 scalefont setfont
+(3) show
+360.343 140.306 m
+F0 10. scalefont setfont
+(b) show
+366.343 138.806 m
+F0 7.125 scalefont setfont
+(3) show
+grestore
+0 g
+0.25 w
+[ ] 0 d
+51.0828 239.056 m
+51.0828 240.057 L
+S
+48.0828 226.055 m
+F0 10. scalefont setfont
+(1) show
+87.382 239.056 m
+87.382 240.057 L
+S
+84.382 226.055 m
+(2) show
+123.683 239.056 m
+123.683 240.057 L
+S
+120.683 226.055 m
+(3) show
+159.984 239.056 m
+159.984 240.057 L
+S
+156.984 226.055 m
+(4) show
+196.283 239.056 m
+196.283 240.057 L
+S
+193.283 226.055 m
+(5) show
+0.125 w
+58.3426 239.056 m
+58.3426 239.657 L
+S
+65.6025 239.056 m
+65.6025 239.657 L
+S
+72.8623 239.056 m
+72.8623 239.657 L
+S
+80.1222 239.056 m
+80.1222 239.657 L
+S
+94.6419 239.056 m
+94.6419 239.657 L
+S
+101.903 239.056 m
+101.903 239.657 L
+S
+109.163 239.056 m
+109.163 239.657 L
+S
+116.423 239.056 m
+116.423 239.657 L
+S
+130.943 239.056 m
+130.943 239.657 L
+S
+138.203 239.056 m
+138.203 239.657 L
+S
+145.462 239.056 m
+145.462 239.657 L
+S
+152.724 239.056 m
+152.724 239.657 L
+S
+167.244 239.056 m
+167.244 239.657 L
+S
+174.503 239.056 m
+174.503 239.657 L
+S
+181.763 239.056 m
+181.763 239.657 L
+S
+189.023 239.056 m
+189.023 239.657 L
+S
+43.8213 239.056 m
+43.8213 239.657 L
+S
+203.544 239.056 m
+203.544 239.657 L
+S
+0.25 w
+43.6404 239.056 m
+203.725 239.056 L
+S
+43.6404 241.413 m
+44.641 241.413 L
+S
+26.6394 237.913 m
+F1 10. scalefont setfont
+(-) show
+33.2644 237.913 m
+F0 10. scalefont setfont
+(1) show
+43.6404 264.969 m
+44.641 264.969 L
+S
+14.6394 261.469 m
+F1 10. scalefont setfont
+(-) show
+21.2644 261.469 m
+F0 10. scalefont setfont
+(0.5) show
+43.6404 288.526 m
+44.641 288.526 L
+S
+33.6394 285.026 m
+(0) show
+43.6404 312.082 m
+44.641 312.082 L
+S
+21.6394 308.582 m
+(0.5) show
+43.6404 335.639 m
+44.641 335.639 L
+S
+33.6394 332.139 m
+(1) show
+0.125 w
+43.6404 246.124 m
+44.2408 246.124 L
+S
+43.6404 250.835 m
+44.2408 250.835 L
+S
+43.6404 255.547 m
+44.2408 255.547 L
+S
+43.6404 260.258 m
+44.2408 260.258 L
+S
+43.6404 269.681 m
+44.2408 269.681 L
+S
+43.6404 274.392 m
+44.2408 274.392 L
+S
+43.6404 279.103 m
+44.2408 279.103 L
+S
+43.6404 283.815 m
+44.2408 283.815 L
+S
+43.6404 293.237 m
+44.2408 293.237 L
+S
+43.6404 297.948 m
+44.2408 297.948 L
+S
+43.6404 302.66 m
+44.2408 302.66 L
+S
+43.6404 307.371 m
+44.2408 307.371 L
+S
+43.6404 316.794 m
+44.2408 316.794 L
+S
+43.6404 321.505 m
+44.2408 321.505 L
+S
+43.6404 326.216 m
+44.2408 326.216 L
+S
+43.6404 330.928 m
+44.2408 330.928 L
+S
+0.25 w
+43.6404 239.056 m
+43.6404 337.994 L
+S
+51.0828 336.993 m
+51.0828 337.994 L
+S
+87.382 336.993 m
+87.382 337.994 L
+S
+123.683 336.993 m
+123.683 337.994 L
+S
+159.984 336.993 m
+159.984 337.994 L
+S
+196.283 336.993 m
+196.283 337.994 L
+S
+0.125 w
+58.3426 337.393 m
+58.3426 337.994 L
+S
+65.6025 337.393 m
+65.6025 337.994 L
+S
+72.8623 337.393 m
+72.8623 337.994 L
+S
+80.1222 337.393 m
+80.1222 337.994 L
+S
+94.6419 337.393 m
+94.6419 337.994 L
+S
+101.903 337.393 m
+101.903 337.994 L
+S
+109.163 337.393 m
+109.163 337.994 L
+S
+116.423 337.393 m
+116.423 337.994 L
+S
+130.943 337.393 m
+130.943 337.994 L
+S
+138.203 337.393 m
+138.203 337.994 L
+S
+145.462 337.393 m
+145.462 337.994 L
+S
+152.724 337.393 m
+152.724 337.994 L
+S
+167.244 337.393 m
+167.244 337.994 L
+S
+174.503 337.393 m
+174.503 337.994 L
+S
+181.763 337.393 m
+181.763 337.994 L
+S
+189.023 337.393 m
+189.023 337.994 L
+S
+43.8213 337.393 m
+43.8213 337.994 L
+S
+203.544 337.393 m
+203.544 337.994 L
+S
+0.25 w
+43.6404 337.994 m
+203.725 337.994 L
+S
+202.725 241.413 m
+203.725 241.413 L
+S
+202.725 264.969 m
+203.725 264.969 L
+S
+202.725 288.526 m
+203.725 288.526 L
+S
+202.725 312.082 m
+203.725 312.082 L
+S
+202.725 335.639 m
+203.725 335.639 L
+S
+0.125 w
+203.125 246.124 m
+203.725 246.124 L
+S
+203.125 250.835 m
+203.725 250.835 L
+S
+203.125 255.547 m
+203.725 255.547 L
+S
+203.125 260.258 m
+203.725 260.258 L
+S
+203.125 269.681 m
+203.725 269.681 L
+S
+203.125 274.392 m
+203.725 274.392 L
+S
+203.125 279.103 m
+203.725 279.103 L
+S
+203.125 283.815 m
+203.725 283.815 L
+S
+203.125 293.237 m
+203.725 293.237 L
+S
+203.125 297.948 m
+203.725 297.948 L
+S
+203.125 302.66 m
+203.725 302.66 L
+S
+203.125 307.371 m
+203.725 307.371 L
+S
+203.125 316.794 m
+203.725 316.794 L
+S
+203.125 321.505 m
+203.725 321.505 L
+S
+203.125 326.216 m
+203.725 326.216 L
+S
+203.125 330.928 m
+203.725 330.928 L
+S
+0.25 w
+203.725 239.056 m
+203.725 337.994 L
+S
+43.6404 288.526 m
+203.725 288.526 L
+S
+gsave
+43.6404 239.056 m
+203.725 239.056 L
+203.725 337.994 L
+43.6404 337.994 L
+43.6404 239.056 L
+closepath clip newpath
+1.5 w
+47.4521 325.43 m
+53.6361 329.861 L
+56.8555 331.701 L
+60.3821 333.326 L
+61.967 333.92 L
+63.6623 334.459 L
+65.2503 334.874 L
+66.7167 335.178 L
+68.3527 335.426 L
+69.214 335.519 L
+69.6542 335.556 L
+70.1281 335.589 L
+70.5411 335.61 L
+70.9205 335.624 L
+71.1014 335.629 L
+71.2999 335.634 L
+71.4872 335.637 L
+71.6617 335.639 L
+71.7674 335.639 L
+71.8826 335.639 L
+72.0907 335.637 L
+72.294 335.634 L
+72.4797 335.631 L
+72.6814 335.624 L
+72.904 335.616 L
+73.3522 335.596 L
+73.754 335.57 L
+74.191 335.536 L
+74.9851 335.458 L
+76.4754 335.248 L
+78.214 334.906 L
+79.8228 334.493 L
+82.8116 333.489 L
+86.1094 332.027 L
+92.5448 328.153 L
+98.7384 323.253 L
+105.324 316.938 L
+111.667 309.971 L
+117.768 302.652 L
+124.261 294.43 L
+130.512 286.334 L
+137.154 277.807 L
+143.556 269.926 L
+149.713 262.885 L
+156.263 256.206 L
+162.571 250.767 L
+168.636 246.606 L
+172.011 244.791 L
+175.094 243.462 L
+176.62 242.924 L
+S
+176.62 242.924 m
+178.283 242.431 L
+179.842 242.055 L
+181.31 241.779 L
+182.106 241.661 L
+182.965 241.56 L
+183.346 241.523 L
+183.747 241.491 L
+184.123 241.466 L
+184.465 241.447 L
+184.866 241.429 L
+185.087 241.423 L
+185.295 241.418 L
+185.487 241.415 L
+185.665 241.413 L
+185.86 241.413 L
+186.068 241.413 L
+186.276 241.416 L
+186.393 241.418 L
+186.499 241.419 L
+186.695 241.426 L
+186.904 241.432 L
+187.344 241.453 L
+187.824 241.482 L
+188.674 241.555 L
+189.475 241.648 L
+190.97 241.882 L
+192.582 242.221 L
+194.327 242.692 L
+197.042 243.636 L
+199.914 244.908 L
+S
+0.5 g
+0.5 w
+51.0828 288.526 m
+51.0828 328.169 L
+S
+196.283 288.526 m
+196.283 243.347 L
+S
+123.683 288.526 m
+123.683 295.174 L
+S
+0 g
+196.283 243.347 2. dot
+51.0828 328.169 2. dot
+53.0828 319.669 m
+(a) show
+59.0828 318.169 m
+F0 7.125 scalefont setfont
+(0) show
+184.283 245.847 m
+F0 10. scalefont setfont
+(b) show
+190.283 244.347 m
+F0 7.125 scalefont setfont
+(0) show
+grestore
+0 g
+0.25 w
+[ ] 0 d
+266.593 239.056 m
+266.593 240.057 L
+S
+263.593 226.055 m
+F0 10. scalefont setfont
+(1) show
+302.892 239.056 m
+302.892 240.057 L
+S
+299.892 226.055 m
+(2) show
+339.193 239.056 m
+339.193 240.057 L
+S
+336.193 226.055 m
+(3) show
+375.494 239.056 m
+375.494 240.057 L
+S
+372.494 226.055 m
+(4) show
+411.793 239.056 m
+411.793 240.057 L
+S
+408.793 226.055 m
+(5) show
+0.125 w
+273.853 239.056 m
+273.853 239.657 L
+S
+281.113 239.056 m
+281.113 239.657 L
+S
+288.373 239.056 m
+288.373 239.657 L
+S
+295.632 239.056 m
+295.632 239.657 L
+S
+310.152 239.056 m
+310.152 239.657 L
+S
+317.414 239.056 m
+317.414 239.657 L
+S
+324.673 239.056 m
+324.673 239.657 L
+S
+331.933 239.056 m
+331.933 239.657 L
+S
+346.453 239.056 m
+346.453 239.657 L
+S
+353.713 239.056 m
+353.713 239.657 L
+S
+360.973 239.056 m
+360.973 239.657 L
+S
+368.234 239.056 m
+368.234 239.657 L
+S
+382.754 239.056 m
+382.754 239.657 L
+S
+390.014 239.056 m
+390.014 239.657 L
+S
+397.273 239.056 m
+397.273 239.657 L
+S
+404.533 239.056 m
+404.533 239.657 L
+S
+259.332 239.056 m
+259.332 239.657 L
+S
+419.055 239.056 m
+419.055 239.657 L
+S
+0.25 w
+259.151 239.056 m
+419.236 239.056 L
+S
+259.151 241.413 m
+260.151 241.413 L
+S
+242.15 237.913 m
+F1 10. scalefont setfont
+(-) show
+248.775 237.913 m
+F0 10. scalefont setfont
+(1) show
+259.151 264.969 m
+260.151 264.969 L
+S
+230.15 261.469 m
+F1 10. scalefont setfont
+(-) show
+236.775 261.469 m
+F0 10. scalefont setfont
+(0.5) show
+259.151 288.526 m
+260.151 288.526 L
+S
+249.15 285.026 m
+(0) show
+259.151 312.082 m
+260.151 312.082 L
+S
+237.15 308.582 m
+(0.5) show
+259.151 335.639 m
+260.151 335.639 L
+S
+249.15 332.139 m
+(1) show
+0.125 w
+259.151 246.124 m
+259.751 246.124 L
+S
+259.151 250.835 m
+259.751 250.835 L
+S
+259.151 255.547 m
+259.751 255.547 L
+S
+259.151 260.258 m
+259.751 260.258 L
+S
+259.151 269.681 m
+259.751 269.681 L
+S
+259.151 274.392 m
+259.751 274.392 L
+S
+259.151 279.103 m
+259.751 279.103 L
+S
+259.151 283.815 m
+259.751 283.815 L
+S
+259.151 293.237 m
+259.751 293.237 L
+S
+259.151 297.948 m
+259.751 297.948 L
+S
+259.151 302.66 m
+259.751 302.66 L
+S
+259.151 307.371 m
+259.751 307.371 L
+S
+259.151 316.794 m
+259.751 316.794 L
+S
+259.151 321.505 m
+259.751 321.505 L
+S
+259.151 326.216 m
+259.751 326.216 L
+S
+259.151 330.928 m
+259.751 330.928 L
+S
+0.25 w
+259.151 239.056 m
+259.151 337.994 L
+S
+266.593 336.993 m
+266.593 337.994 L
+S
+302.892 336.993 m
+302.892 337.994 L
+S
+339.193 336.993 m
+339.193 337.994 L
+S
+375.494 336.993 m
+375.494 337.994 L
+S
+411.793 336.993 m
+411.793 337.994 L
+S
+0.125 w
+273.853 337.393 m
+273.853 337.994 L
+S
+281.113 337.393 m
+281.113 337.994 L
+S
+288.373 337.393 m
+288.373 337.994 L
+S
+295.632 337.393 m
+295.632 337.994 L
+S
+310.152 337.393 m
+310.152 337.994 L
+S
+317.414 337.393 m
+317.414 337.994 L
+S
+324.673 337.393 m
+324.673 337.994 L
+S
+331.933 337.393 m
+331.933 337.994 L
+S
+346.453 337.393 m
+346.453 337.994 L
+S
+353.713 337.393 m
+353.713 337.994 L
+S
+360.973 337.393 m
+360.973 337.994 L
+S
+368.234 337.393 m
+368.234 337.994 L
+S
+382.754 337.393 m
+382.754 337.994 L
+S
+390.014 337.393 m
+390.014 337.994 L
+S
+397.273 337.393 m
+397.273 337.994 L
+S
+404.533 337.393 m
+404.533 337.994 L
+S
+259.332 337.393 m
+259.332 337.994 L
+S
+419.055 337.393 m
+419.055 337.994 L
+S
+0.25 w
+259.151 337.994 m
+419.236 337.994 L
+S
+418.235 241.413 m
+419.236 241.413 L
+S
+418.235 264.969 m
+419.236 264.969 L
+S
+418.235 288.526 m
+419.236 288.526 L
+S
+418.235 312.082 m
+419.236 312.082 L
+S
+418.235 335.639 m
+419.236 335.639 L
+S
+0.125 w
+418.635 246.124 m
+419.236 246.124 L
+S
+418.635 250.835 m
+419.236 250.835 L
+S
+418.635 255.547 m
+419.236 255.547 L
+S
+418.635 260.258 m
+419.236 260.258 L
+S
+418.635 269.681 m
+419.236 269.681 L
+S
+418.635 274.392 m
+419.236 274.392 L
+S
+418.635 279.103 m
+419.236 279.103 L
+S
+418.635 283.815 m
+419.236 283.815 L
+S
+418.635 293.237 m
+419.236 293.237 L
+S
+418.635 297.948 m
+419.236 297.948 L
+S
+418.635 302.66 m
+419.236 302.66 L
+S
+418.635 307.371 m
+419.236 307.371 L
+S
+418.635 316.794 m
+419.236 316.794 L
+S
+418.635 321.505 m
+419.236 321.505 L
+S
+418.635 326.216 m
+419.236 326.216 L
+S
+418.635 330.928 m
+419.236 330.928 L
+S
+0.25 w
+419.236 239.056 m
+419.236 337.994 L
+S
+259.151 288.526 m
+419.236 288.526 L
+S
+gsave
+259.151 239.056 m
+419.236 239.056 L
+419.236 337.994 L
+259.151 337.994 L
+259.151 239.056 L
+closepath clip newpath
+1.5 w
+262.962 325.43 m
+269.146 329.861 L
+272.366 331.701 L
+275.892 333.326 L
+277.477 333.92 L
+279.172 334.459 L
+280.761 334.874 L
+282.227 335.178 L
+283.863 335.426 L
+284.724 335.519 L
+285.164 335.556 L
+285.638 335.589 L
+286.051 335.61 L
+286.431 335.624 L
+286.612 335.629 L
+286.81 335.634 L
+286.997 335.637 L
+287.172 335.639 L
+287.278 335.639 L
+287.393 335.639 L
+287.601 335.637 L
+287.804 335.634 L
+287.99 335.631 L
+288.192 335.624 L
+288.414 335.616 L
+288.862 335.596 L
+289.264 335.57 L
+289.701 335.536 L
+290.495 335.458 L
+291.986 335.248 L
+293.724 334.906 L
+295.333 334.493 L
+298.322 333.489 L
+301.62 332.027 L
+308.055 328.153 L
+314.249 323.253 L
+320.835 316.938 L
+327.177 309.971 L
+333.278 302.652 L
+339.771 294.43 L
+346.022 286.334 L
+352.664 277.807 L
+359.066 269.926 L
+365.223 262.885 L
+371.774 256.206 L
+378.081 250.767 L
+384.147 246.606 L
+387.521 244.791 L
+390.604 243.462 L
+392.13 242.924 L
+S
+392.13 242.924 m
+393.793 242.431 L
+395.352 242.055 L
+396.82 241.779 L
+397.616 241.661 L
+398.476 241.56 L
+398.857 241.523 L
+399.257 241.491 L
+399.633 241.466 L
+399.976 241.447 L
+400.376 241.429 L
+400.597 241.423 L
+400.805 241.418 L
+400.997 241.415 L
+401.175 241.413 L
+401.37 241.413 L
+401.578 241.413 L
+401.786 241.416 L
+401.903 241.418 L
+402.009 241.419 L
+402.206 241.426 L
+402.414 241.432 L
+402.854 241.453 L
+403.334 241.482 L
+404.184 241.555 L
+404.985 241.648 L
+406.48 241.882 L
+408.092 242.221 L
+409.837 242.692 L
+412.552 243.636 L
+415.424 244.908 L
+S
+0.5 g
+0.5 w
+411.793 288.526 m
+411.793 243.347 L
+S
+339.193 288.526 m
+339.193 295.174 L
+S
+375.494 288.526 m
+375.494 252.87 L
+S
+0 g
+339.193 295.174 2. dot
+411.793 243.347 2. dot
+342.193 296.674 m
+(a) show
+348.193 295.174 m
+F0 7.125 scalefont setfont
+(1) show
+399.793 245.847 m
+F0 10. scalefont setfont
+(b) show
+405.793 244.347 m
+F0 7.125 scalefont setfont
+(1) show
+grestore
+grestore
+showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/gsl-1.9/doc/roots-false-position.eps b/gsl-1.9/doc/roots-false-position.eps
new file mode 100644
index 0000000..4f6b47a
--- /dev/null
+++ b/gsl-1.9/doc/roots-false-position.eps
@@ -0,0 +1,633 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mathematica-PSRender
+%%BoundingBox: 0 79 432 353
+%%Pages: (atend)
+%%EndComments
+%%BeginProlog
+/setrgbcolor dup where
+{ pop pop }
+{ { .114 mul exch .587 mul add exch .299 mul add setgray } bind def }
+ifelse
+/C /curveto load def
+/f /fill load def
+/F { closepath fill } bind def
+/L /lineto load def
+/S /stroke load def
+/s { closepath stroke } bind def
+/d /setdash load def
+/g /setgray load def
+/m /moveto load def
+/r /setrgbcolor load def
+/w /setlinewidth load def
+/b { gsave gsave F grestore 0 g S grestore newpath } bind def
+/dot { newpath 0 360 arc fill } bind def
+%%EndProlog
+%%Page: 1 1
+0 g
+0.25 w
+[ ] 0 d
+31.8389 99.7849 m
+31.8389 102.339 L
+S
+25.3389 83.6772 m
+/F1 /Times-Roman findfont def
+F1 10. scalefont setfont
+(-) show
+31.9639 83.6772 m
+/F0 /Times-Roman findfont def
+F0 10. scalefont setfont
+(2) show
+87.4313 99.7849 m
+87.4313 102.339 L
+S
+74.9313 83.6772 m
+F1 10. scalefont setfont
+(-) show
+81.5563 83.6772 m
+F0 10. scalefont setfont
+(1.5) show
+143.028 99.7849 m
+143.028 102.339 L
+S
+136.528 83.6772 m
+F1 10. scalefont setfont
+(-) show
+143.153 83.6772 m
+F0 10. scalefont setfont
+(1) show
+198.62 99.7849 m
+198.62 102.339 L
+S
+186.12 83.6772 m
+F1 10. scalefont setfont
+(-) show
+192.745 83.6772 m
+F0 10. scalefont setfont
+(0.5) show
+254.217 99.7849 m
+254.217 102.339 L
+S
+251.217 83.6772 m
+(0) show
+309.809 99.7849 m
+309.809 102.339 L
+S
+300.809 83.6772 m
+(0.5) show
+365.406 99.7849 m
+365.406 102.339 L
+S
+362.406 83.6772 m
+(1) show
+420.998 99.7849 m
+420.998 102.339 L
+S
+411.998 83.6772 m
+(1.5) show
+0.125 w
+42.9574 99.7849 m
+42.9574 101.317 L
+S
+54.0759 99.7849 m
+54.0759 101.317 L
+S
+65.1944 99.7849 m
+65.1944 101.317 L
+S
+76.3128 99.7849 m
+76.3128 101.317 L
+S
+98.5498 99.7849 m
+98.5498 101.317 L
+S
+109.672 99.7849 m
+109.672 101.317 L
+S
+120.791 99.7849 m
+120.791 101.317 L
+S
+131.909 99.7849 m
+131.909 101.317 L
+S
+154.146 99.7849 m
+154.146 101.317 L
+S
+165.265 99.7849 m
+165.265 101.317 L
+S
+176.383 99.7849 m
+176.383 101.317 L
+S
+187.502 99.7849 m
+187.502 101.317 L
+S
+209.739 99.7849 m
+209.739 101.317 L
+S
+220.857 99.7849 m
+220.857 101.317 L
+S
+231.98 99.7849 m
+231.98 101.317 L
+S
+243.098 99.7849 m
+243.098 101.317 L
+S
+265.335 99.7849 m
+265.335 101.317 L
+S
+276.454 99.7849 m
+276.454 101.317 L
+S
+287.572 99.7849 m
+287.572 101.317 L
+S
+298.691 99.7849 m
+298.691 101.317 L
+S
+320.928 99.7849 m
+320.928 101.317 L
+S
+332.046 99.7849 m
+332.046 101.317 L
+S
+343.165 99.7849 m
+343.165 101.317 L
+S
+354.287 99.7849 m
+354.287 101.317 L
+S
+376.524 99.7849 m
+376.524 101.317 L
+S
+387.643 99.7849 m
+387.643 101.317 L
+S
+398.761 99.7849 m
+398.761 101.317 L
+S
+409.879 99.7849 m
+409.879 101.317 L
+S
+0.25 w
+22.1097 99.7849 m
+430.727 99.7849 L
+S
+22.1097 141.039 m
+24.6636 141.039 L
+S
+2.00202 137.539 m
+F1 10. scalefont setfont
+(-) show
+8.62702 137.539 m
+F0 10. scalefont setfont
+(4) show
+22.1097 183.327 m
+24.6636 183.327 L
+S
+2.00202 179.827 m
+F1 10. scalefont setfont
+(-) show
+8.62702 179.827 m
+F0 10. scalefont setfont
+(2) show
+22.1097 225.615 m
+24.6636 225.615 L
+S
+9.00202 222.115 m
+(0) show
+22.1097 267.902 m
+24.6636 267.902 L
+S
+9.00202 264.402 m
+(2) show
+22.1097 310.19 m
+24.6636 310.19 L
+S
+9.00202 306.69 m
+(4) show
+0.125 w
+22.1097 109.322 m
+23.6421 109.322 L
+S
+22.1097 119.893 m
+23.6421 119.893 L
+S
+22.1097 130.464 m
+23.6421 130.464 L
+S
+22.1097 151.61 m
+23.6421 151.61 L
+S
+22.1097 162.181 m
+23.6421 162.181 L
+S
+22.1097 172.756 m
+23.6421 172.756 L
+S
+22.1097 193.898 m
+23.6421 193.898 L
+S
+22.1097 204.469 m
+23.6421 204.469 L
+S
+22.1097 215.044 m
+23.6421 215.044 L
+S
+22.1097 236.186 m
+23.6421 236.186 L
+S
+22.1097 246.756 m
+23.6421 246.756 L
+S
+22.1097 257.331 m
+23.6421 257.331 L
+S
+22.1097 278.473 m
+23.6421 278.473 L
+S
+22.1097 289.048 m
+23.6421 289.048 L
+S
+22.1097 299.619 m
+23.6421 299.619 L
+S
+22.1097 320.761 m
+23.6421 320.761 L
+S
+22.1097 331.336 m
+23.6421 331.336 L
+S
+22.1097 341.907 m
+23.6421 341.907 L
+S
+0.25 w
+22.1097 99.7849 m
+22.1097 352.323 L
+S
+31.8389 349.769 m
+31.8389 352.323 L
+S
+87.4313 349.769 m
+87.4313 352.323 L
+S
+143.028 349.769 m
+143.028 352.323 L
+S
+198.62 349.769 m
+198.62 352.323 L
+S
+254.217 349.769 m
+254.217 352.323 L
+S
+309.809 349.769 m
+309.809 352.323 L
+S
+365.406 349.769 m
+365.406 352.323 L
+S
+420.998 349.769 m
+420.998 352.323 L
+S
+0.125 w
+42.9574 350.79 m
+42.9574 352.323 L
+S
+54.0759 350.79 m
+54.0759 352.323 L
+S
+65.1944 350.79 m
+65.1944 352.323 L
+S
+76.3128 350.79 m
+76.3128 352.323 L
+S
+98.5498 350.79 m
+98.5498 352.323 L
+S
+109.672 350.79 m
+109.672 352.323 L
+S
+120.791 350.79 m
+120.791 352.323 L
+S
+131.909 350.79 m
+131.909 352.323 L
+S
+154.146 350.79 m
+154.146 352.323 L
+S
+165.265 350.79 m
+165.265 352.323 L
+S
+176.383 350.79 m
+176.383 352.323 L
+S
+187.502 350.79 m
+187.502 352.323 L
+S
+209.739 350.79 m
+209.739 352.323 L
+S
+220.857 350.79 m
+220.857 352.323 L
+S
+231.98 350.79 m
+231.98 352.323 L
+S
+243.098 350.79 m
+243.098 352.323 L
+S
+265.335 350.79 m
+265.335 352.323 L
+S
+276.454 350.79 m
+276.454 352.323 L
+S
+287.572 350.79 m
+287.572 352.323 L
+S
+298.691 350.79 m
+298.691 352.323 L
+S
+320.928 350.79 m
+320.928 352.323 L
+S
+332.046 350.79 m
+332.046 352.323 L
+S
+343.165 350.79 m
+343.165 352.323 L
+S
+354.287 350.79 m
+354.287 352.323 L
+S
+376.524 350.79 m
+376.524 352.323 L
+S
+387.643 350.79 m
+387.643 352.323 L
+S
+398.761 350.79 m
+398.761 352.323 L
+S
+409.879 350.79 m
+409.879 352.323 L
+S
+0.25 w
+22.1097 352.323 m
+430.727 352.323 L
+S
+428.173 141.039 m
+430.727 141.039 L
+S
+428.173 183.327 m
+430.727 183.327 L
+S
+428.173 225.615 m
+430.727 225.615 L
+S
+428.173 267.902 m
+430.727 267.902 L
+S
+428.173 310.19 m
+430.727 310.19 L
+S
+0.125 w
+429.195 109.322 m
+430.727 109.322 L
+S
+429.195 119.893 m
+430.727 119.893 L
+S
+429.195 130.464 m
+430.727 130.464 L
+S
+429.195 151.61 m
+430.727 151.61 L
+S
+429.195 162.181 m
+430.727 162.181 L
+S
+429.195 172.756 m
+430.727 172.756 L
+S
+429.195 193.898 m
+430.727 193.898 L
+S
+429.195 204.469 m
+430.727 204.469 L
+S
+429.195 215.044 m
+430.727 215.044 L
+S
+429.195 236.186 m
+430.727 236.186 L
+S
+429.195 246.756 m
+430.727 246.756 L
+S
+429.195 257.331 m
+430.727 257.331 L
+S
+429.195 278.473 m
+430.727 278.473 L
+S
+429.195 289.048 m
+430.727 289.048 L
+S
+429.195 299.619 m
+430.727 299.619 L
+S
+429.195 320.761 m
+430.727 320.761 L
+S
+429.195 331.336 m
+430.727 331.336 L
+S
+429.195 341.907 m
+430.727 341.907 L
+S
+0.25 w
+430.727 99.7849 m
+430.727 352.323 L
+S
+22.1097 225.615 m
+430.727 225.615 L
+S
+1.5 w
+31.8389 105.8 m
+47.6238 139.327 L
+64.8429 170.488 L
+81.0119 195.025 L
+96.5639 214.68 L
+113.117 231.74 L
+129.049 244.787 L
+145.986 255.448 L
+162.302 263.007 L
+177.997 268.139 L
+186.104 270.089 L
+194.697 271.707 L
+202.678 272.847 L
+210.155 273.635 L
+214.397 273.979 L
+218.43 274.244 L
+222.398 274.457 L
+225.998 274.604 L
+229.916 274.73 L
+231.923 274.779 L
+234.092 274.824 L
+236.107 274.857 L
+237.962 274.886 L
+239.866 274.906 L
+241.607 274.918 L
+243.523 274.931 L
+244.581 274.935 L
+245.583 274.939 L
+246.445 274.943 L
+247.36 274.947 L
+248.365 274.947 L
+249.297 274.947 L
+249.816 274.951 L
+250.294 274.951 L
+250.817 274.951 L
+251.083 274.951 L
+251.369 274.951 L
+251.847 274.951 L
+252.296 274.951 L
+252.827 274.951 L
+253.31 274.951 L
+253.587 274.951 L
+253.878 274.951 L
+254.405 274.951 L
+254.695 274.951 L
+254.969 274.951 L
+255.267 274.951 L
+255.59 274.951 L
+255.863 274.951 L
+256.166 274.951 L
+S
+256.166 274.951 m
+256.448 274.951 L
+256.713 274.951 L
+257.212 274.951 L
+257.739 274.951 L
+258.25 274.951 L
+258.81 274.951 L
+259.394 274.951 L
+259.937 274.955 L
+260.91 274.955 L
+261.952 274.959 L
+263.178 274.963 L
+264.338 274.967 L
+266.508 274.98 L
+268.559 274.996 L
+270.459 275.016 L
+272.543 275.045 L
+274.754 275.082 L
+278.591 275.172 L
+282.726 275.307 L
+286.628 275.474 L
+290.2 275.666 L
+297.947 276.238 L
+302.335 276.663 L
+306.414 277.137 L
+314.786 278.367 L
+322.386 279.822 L
+330.906 281.889 L
+338.747 284.243 L
+354.487 290.458 L
+370.607 299.203 L
+386.11 310.243 L
+402.614 325.219 L
+418.501 343.153 L
+420.998 346.312 L
+S
+0.5 g
+0.5 w
+42.9574 129.925 m
+409.879 332.971 L
+S
+215.88 225.615 m
+215.88 274.085 L
+S
+42.9574 129.925 m
+215.88 274.085 L
+S
+157.738 225.615 m
+157.738 261.14 L
+S
+42.9574 129.925 m
+157.738 261.14 L
+S
+126.663 225.615 m
+126.663 243.03 L
+S
+42.9574 129.925 m
+126.663 243.03 L
+S
+113.775 225.615 m
+113.775 232.345 L
+S
+0 g
+42.9574 129.925 2. dot
+409.879 332.971 2. dot
+215.88 274.085 2. dot
+215.88 274.085 2. dot
+157.738 261.14 2. dot
+113.775 232.345 2. dot
+126.663 243.03 2. dot
+44.4574 121.425 m
+(a) show
+50.4574 119.925 m
+F0 7.125 scalefont setfont
+(0) show
+54.7074 119.925 m
+F1 7.125 scalefont setfont
+(-) show
+58.9574 119.925 m
+F0 7.125 scalefont setfont
+(4) show
+397.879 336.471 m
+F0 10. scalefont setfont
+(b) show
+403.879 334.971 m
+F0 7.125 scalefont setfont
+(0) show
+209.88 279.585 m
+F0 10. scalefont setfont
+(b) show
+215.88 278.085 m
+F0 7.125 scalefont setfont
+(1) show
+147.738 266.64 m
+F0 10. scalefont setfont
+(b) show
+153.738 265.14 m
+F0 7.125 scalefont setfont
+(2) show
+116.663 247.53 m
+F0 10. scalefont setfont
+(b) show
+122.663 246.03 m
+F0 7.125 scalefont setfont
+(3) show
+99.7749 232.845 m
+F0 10. scalefont setfont
+(b) show
+105.775 231.345 m
+F0 7.125 scalefont setfont
+(4) show
+gsave
+22.1097 99.7849 m
+430.727 99.7849 L
+430.727 352.323 L
+22.1097 352.323 L
+22.1097 99.7849 L
+closepath clip newpath
+grestore
+showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/gsl-1.9/doc/roots-newtons-method.eps b/gsl-1.9/doc/roots-newtons-method.eps
new file mode 100644
index 0000000..1effb85
--- /dev/null
+++ b/gsl-1.9/doc/roots-newtons-method.eps
@@ -0,0 +1,567 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mathematica-PSRender
+%%BoundingBox: 0 79 432 353
+%%Pages: (atend)
+%%EndComments
+%%BeginProlog
+/setrgbcolor dup where
+{ pop pop }
+{ { .114 mul exch .587 mul add exch .299 mul add setgray } bind def }
+ifelse
+/C /curveto load def
+/f /fill load def
+/F { closepath fill } bind def
+/L /lineto load def
+/S /stroke load def
+/s { closepath stroke } bind def
+/d /setdash load def
+/g /setgray load def
+/m /moveto load def
+/r /setrgbcolor load def
+/w /setlinewidth load def
+/b { gsave gsave F grestore 0 g S grestore newpath } bind def
+/dot { newpath 0 360 arc fill } bind def
+%%EndProlog
+%%Page: 1 1
+0 g
+0.25 w
+[ ] 0 d
+64.3977 99.4424 m
+64.3977 102.003 L
+S
+57.8977 83.3205 m
+/F1 /Times-Roman findfont def
+F1 10. scalefont setfont
+(-) show
+64.5227 83.3205 m
+/F0 /Times-Roman findfont def
+F0 10. scalefont setfont
+(3) show
+118.599 99.4424 m
+118.599 102.003 L
+S
+112.099 83.3205 m
+F1 10. scalefont setfont
+(-) show
+118.724 83.3205 m
+F0 10. scalefont setfont
+(2) show
+172.797 99.4424 m
+172.797 102.003 L
+S
+166.297 83.3205 m
+F1 10. scalefont setfont
+(-) show
+172.922 83.3205 m
+F0 10. scalefont setfont
+(1) show
+226.998 99.4424 m
+226.998 102.003 L
+S
+223.998 83.3205 m
+(0) show
+281.2 99.4424 m
+281.2 102.003 L
+S
+278.2 83.3205 m
+(1) show
+335.398 99.4424 m
+335.398 102.003 L
+S
+332.398 83.3205 m
+(2) show
+389.599 99.4424 m
+389.599 102.003 L
+S
+386.599 83.3205 m
+(3) show
+0.125 w
+75.2397 99.4424 m
+75.2397 100.979 L
+S
+86.0776 99.4424 m
+86.0776 100.979 L
+S
+96.9195 99.4424 m
+96.9195 100.979 L
+S
+107.757 99.4424 m
+107.757 100.979 L
+S
+129.437 99.4424 m
+129.437 100.979 L
+S
+140.279 99.4424 m
+140.279 100.979 L
+S
+151.117 99.4424 m
+151.117 100.979 L
+S
+161.959 99.4424 m
+161.959 100.979 L
+S
+183.639 99.4424 m
+183.639 100.979 L
+S
+194.477 99.4424 m
+194.477 100.979 L
+S
+205.319 99.4424 m
+205.319 100.979 L
+S
+216.156 99.4424 m
+216.156 100.979 L
+S
+237.84 99.4424 m
+237.84 100.979 L
+S
+248.678 99.4424 m
+248.678 100.979 L
+S
+259.52 99.4424 m
+259.52 100.979 L
+S
+270.358 99.4424 m
+270.358 100.979 L
+S
+292.038 99.4424 m
+292.038 100.979 L
+S
+302.88 99.4424 m
+302.88 100.979 L
+S
+313.718 99.4424 m
+313.718 100.979 L
+S
+324.56 99.4424 m
+324.56 100.979 L
+S
+346.24 99.4424 m
+346.24 100.979 L
+S
+357.077 99.4424 m
+357.077 100.979 L
+S
+367.919 99.4424 m
+367.919 100.979 L
+S
+378.757 99.4424 m
+378.757 100.979 L
+S
+53.5599 99.4424 m
+53.5599 100.979 L
+S
+42.7179 99.4424 m
+42.7179 100.979 L
+S
+31.8801 99.4424 m
+31.8801 100.979 L
+S
+400.437 99.4424 m
+400.437 100.979 L
+S
+411.279 99.4424 m
+411.279 100.979 L
+S
+422.117 99.4424 m
+422.117 100.979 L
+S
+0.25 w
+22.1239 99.4424 m
+431.873 99.4424 L
+S
+22.1239 121.122 m
+24.6849 121.122 L
+S
+2.00207 117.622 m
+F1 10. scalefont setfont
+(-) show
+8.62707 117.622 m
+F0 10. scalefont setfont
+(4) show
+22.1239 163.097 m
+24.6849 163.097 L
+S
+2.00207 159.597 m
+F1 10. scalefont setfont
+(-) show
+8.62707 159.597 m
+F0 10. scalefont setfont
+(2) show
+22.1239 205.072 m
+24.6849 205.072 L
+S
+9.00207 201.572 m
+(0) show
+22.1239 247.05 m
+24.6849 247.05 L
+S
+9.00207 243.55 m
+(2) show
+22.1239 289.025 m
+24.6849 289.025 L
+S
+9.00207 285.525 m
+(4) show
+22.1239 331.004 m
+24.6849 331.004 L
+S
+9.00207 327.504 m
+(6) show
+0.125 w
+22.1239 131.616 m
+23.6605 131.616 L
+S
+22.1239 142.11 m
+23.6605 142.11 L
+S
+22.1239 152.603 m
+23.6605 152.603 L
+S
+22.1239 173.591 m
+23.6605 173.591 L
+S
+22.1239 184.084 m
+23.6605 184.084 L
+S
+22.1239 194.578 m
+23.6605 194.578 L
+S
+22.1239 215.569 m
+23.6605 215.569 L
+S
+22.1239 226.063 m
+23.6605 226.063 L
+S
+22.1239 236.557 m
+23.6605 236.557 L
+S
+22.1239 257.544 m
+23.6605 257.544 L
+S
+22.1239 268.038 m
+23.6605 268.038 L
+S
+22.1239 278.531 m
+23.6605 278.531 L
+S
+22.1239 299.519 m
+23.6605 299.519 L
+S
+22.1239 310.016 m
+23.6605 310.016 L
+S
+22.1239 320.51 m
+23.6605 320.51 L
+S
+22.1239 110.629 m
+23.6605 110.629 L
+S
+22.1239 100.131 m
+23.6605 100.131 L
+S
+22.1239 341.497 m
+23.6605 341.497 L
+S
+22.1239 351.991 m
+23.6605 351.991 L
+S
+0.25 w
+22.1239 99.4424 m
+22.1239 352.68 L
+S
+64.3977 350.119 m
+64.3977 352.68 L
+S
+118.599 350.119 m
+118.599 352.68 L
+S
+172.797 350.119 m
+172.797 352.68 L
+S
+226.998 350.119 m
+226.998 352.68 L
+S
+281.2 350.119 m
+281.2 352.68 L
+S
+335.398 350.119 m
+335.398 352.68 L
+S
+389.599 350.119 m
+389.599 352.68 L
+S
+0.125 w
+75.2397 351.143 m
+75.2397 352.68 L
+S
+86.0776 351.143 m
+86.0776 352.68 L
+S
+96.9195 351.143 m
+96.9195 352.68 L
+S
+107.757 351.143 m
+107.757 352.68 L
+S
+129.437 351.143 m
+129.437 352.68 L
+S
+140.279 351.143 m
+140.279 352.68 L
+S
+151.117 351.143 m
+151.117 352.68 L
+S
+161.959 351.143 m
+161.959 352.68 L
+S
+183.639 351.143 m
+183.639 352.68 L
+S
+194.477 351.143 m
+194.477 352.68 L
+S
+205.319 351.143 m
+205.319 352.68 L
+S
+216.156 351.143 m
+216.156 352.68 L
+S
+237.84 351.143 m
+237.84 352.68 L
+S
+248.678 351.143 m
+248.678 352.68 L
+S
+259.52 351.143 m
+259.52 352.68 L
+S
+270.358 351.143 m
+270.358 352.68 L
+S
+292.038 351.143 m
+292.038 352.68 L
+S
+302.88 351.143 m
+302.88 352.68 L
+S
+313.718 351.143 m
+313.718 352.68 L
+S
+324.56 351.143 m
+324.56 352.68 L
+S
+346.24 351.143 m
+346.24 352.68 L
+S
+357.077 351.143 m
+357.077 352.68 L
+S
+367.919 351.143 m
+367.919 352.68 L
+S
+378.757 351.143 m
+378.757 352.68 L
+S
+53.5599 351.143 m
+53.5599 352.68 L
+S
+42.7179 351.143 m
+42.7179 352.68 L
+S
+31.8801 351.143 m
+31.8801 352.68 L
+S
+400.437 351.143 m
+400.437 352.68 L
+S
+411.279 351.143 m
+411.279 352.68 L
+S
+422.117 351.143 m
+422.117 352.68 L
+S
+0.25 w
+22.1239 352.68 m
+431.873 352.68 L
+S
+429.312 121.122 m
+431.873 121.122 L
+S
+429.312 163.097 m
+431.873 163.097 L
+S
+429.312 205.072 m
+431.873 205.072 L
+S
+429.312 247.05 m
+431.873 247.05 L
+S
+429.312 289.025 m
+431.873 289.025 L
+S
+429.312 331.004 m
+431.873 331.004 L
+S
+0.125 w
+430.336 131.616 m
+431.873 131.616 L
+S
+430.336 142.11 m
+431.873 142.11 L
+S
+430.336 152.603 m
+431.873 152.603 L
+S
+430.336 173.591 m
+431.873 173.591 L
+S
+430.336 184.084 m
+431.873 184.084 L
+S
+430.336 194.578 m
+431.873 194.578 L
+S
+430.336 215.569 m
+431.873 215.569 L
+S
+430.336 226.063 m
+431.873 226.063 L
+S
+430.336 236.557 m
+431.873 236.557 L
+S
+430.336 257.544 m
+431.873 257.544 L
+S
+430.336 268.038 m
+431.873 268.038 L
+S
+430.336 278.531 m
+431.873 278.531 L
+S
+430.336 299.519 m
+431.873 299.519 L
+S
+430.336 310.016 m
+431.873 310.016 L
+S
+430.336 320.51 m
+431.873 320.51 L
+S
+430.336 110.629 m
+431.873 110.629 L
+S
+430.336 100.131 m
+431.873 100.131 L
+S
+430.336 341.497 m
+431.873 341.497 L
+S
+430.336 351.991 m
+431.873 351.991 L
+S
+0.25 w
+431.873 99.4424 m
+431.873 352.68 L
+S
+22.1239 205.072 m
+431.873 205.072 L
+S
+gsave
+22.1239 99.4424 m
+431.873 99.4424 L
+431.873 352.68 L
+22.1239 352.68 L
+22.1239 99.4424 L
+closepath clip newpath
+1.5 w
+31.8801 105.474 m
+47.7087 129.264 L
+64.9755 151.169 L
+81.1892 168.26 L
+96.7843 181.831 L
+113.383 193.529 L
+129.359 202.449 L
+146.343 209.775 L
+162.705 215.09 L
+178.443 218.913 L
+195.19 221.941 L
+211.313 224.19 L
+226.814 226.038 L
+243.323 228.017 L
+259.209 230.242 L
+276.103 233.328 L
+292.37 237.339 L
+308.022 242.486 L
+324.674 249.693 L
+340.708 258.654 L
+357.745 270.717 L
+374.164 285.173 L
+389.96 302.043 L
+406.759 323.522 L
+422.117 346.652 L
+S
+0.5 g
+0.5 w
+389.599 301.621 m
+306.49 205.072 L
+306.49 241.92 L
+205.843 205.072 L
+205.843 223.477 L
+68.3559 205.072 L
+68.3559 155. L
+113.408 205.072 L
+113.408 193.545 L
+131.81 205.072 L
+131.81 203.633 L
+S
+0 g
+389.599 301.621 2. dot
+379.599 306.121 m
+(g) show
+385.599 304.621 m
+F0 7.125 scalefont setfont
+(0) show
+306.49 241.92 2. dot
+298.49 247.42 m
+F0 10. scalefont setfont
+(g) show
+304.49 245.92 m
+F0 7.125 scalefont setfont
+(1) show
+205.843 223.477 2. dot
+198.843 228.977 m
+F0 10. scalefont setfont
+(g) show
+204.843 227.477 m
+F0 7.125 scalefont setfont
+(2) show
+68.3559 155. 2. dot
+68.3559 146.5 m
+F0 10. scalefont setfont
+(g) show
+74.3559 145. m
+F0 7.125 scalefont setfont
+(3) show
+113.408 193.545 2. dot
+112.408 185.045 m
+F0 10. scalefont setfont
+(g) show
+118.408 183.545 m
+F0 7.125 scalefont setfont
+(4) show
+131.81 203.633 2. dot
+130.81 195.133 m
+F0 10. scalefont setfont
+(g) show
+136.81 193.633 m
+F0 7.125 scalefont setfont
+(5) show
+grestore
+showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/gsl-1.9/doc/roots-secant-method.eps b/gsl-1.9/doc/roots-secant-method.eps
new file mode 100644
index 0000000..79460d2
--- /dev/null
+++ b/gsl-1.9/doc/roots-secant-method.eps
@@ -0,0 +1,510 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: Mathematica-PSRender
+%%BoundingBox: 0 82 432 350
+%%Pages: (atend)
+%%EndComments
+%%BeginProlog
+/setrgbcolor dup where
+{ pop pop }
+{ { .114 mul exch .587 mul add exch .299 mul add setgray } bind def }
+ifelse
+/C /curveto load def
+/f /fill load def
+/F { closepath fill } bind def
+/L /lineto load def
+/S /stroke load def
+/s { closepath stroke } bind def
+/d /setdash load def
+/g /setgray load def
+/m /moveto load def
+/r /setrgbcolor load def
+/w /setlinewidth load def
+/b { gsave gsave F grestore 0 g S grestore newpath } bind def
+/dot { newpath 0 360 arc fill } bind def
+%%EndProlog
+%%Page: 1 1
+0 g
+0.25 w
+[ ] 0 d
+32.8442 96.7414 m
+32.8442 99.2961 L
+S
+29.9067 85.6943 m
+/F0 /Times-Roman findfont def
+F0 10. scalefont setfont
+(0) show
+88.4562 96.7414 m
+88.4562 99.2961 L
+S
+79.5187 85.6943 m
+(0.2) show
+144.072 96.7414 m
+144.072 99.2961 L
+S
+135.322 85.6943 m
+(0.4) show
+199.684 96.7414 m
+199.684 99.2961 L
+S
+190.747 85.6943 m
+(0.6) show
+255.3 96.7414 m
+255.3 99.2961 L
+S
+246.363 85.6943 m
+(0.8) show
+310.912 96.7414 m
+310.912 99.2961 L
+S
+307.537 85.6943 m
+(1) show
+366.528 96.7414 m
+366.528 99.2961 L
+S
+357.372 85.6943 m
+(1.2) show
+422.14 96.7414 m
+422.14 99.2961 L
+S
+413.172 85.6943 m
+(1.4) show
+0.125 w
+46.7462 96.7414 m
+46.7462 98.2742 L
+S
+60.6522 96.7414 m
+60.6522 98.2742 L
+S
+74.5542 96.7414 m
+74.5542 98.2742 L
+S
+102.362 96.7414 m
+102.362 98.2742 L
+S
+116.264 96.7414 m
+116.264 98.2742 L
+S
+130.166 96.7414 m
+130.166 98.2742 L
+S
+157.974 96.7414 m
+157.974 98.2742 L
+S
+171.88 96.7414 m
+171.88 98.2742 L
+S
+185.782 96.7414 m
+185.782 98.2742 L
+S
+213.59 96.7414 m
+213.59 98.2742 L
+S
+227.492 96.7414 m
+227.492 98.2742 L
+S
+241.394 96.7414 m
+241.394 98.2742 L
+S
+269.202 96.7414 m
+269.202 98.2742 L
+S
+283.104 96.7414 m
+283.104 98.2742 L
+S
+297.01 96.7414 m
+297.01 98.2742 L
+S
+324.818 96.7414 m
+324.818 98.2742 L
+S
+338.72 96.7414 m
+338.72 98.2742 L
+S
+352.622 96.7414 m
+352.622 98.2742 L
+S
+380.43 96.7414 m
+380.43 98.2742 L
+S
+394.332 96.7414 m
+394.332 98.2742 L
+S
+408.238 96.7414 m
+408.238 98.2742 L
+S
+0.25 w
+23.1116 96.7414 m
+431.873 96.7414 L
+S
+23.1116 137.389 m
+25.6663 137.389 L
+S
+1.18957 134.389 m
+(-10) show
+23.1116 188.88 m
+25.6663 188.88 L
+S
+13.1896 185.88 m
+(0) show
+23.1116 240.376 m
+25.6663 240.376 L
+S
+7.18957 237.376 m
+(10) show
+23.1116 291.868 m
+25.6663 291.868 L
+S
+7.18957 288.868 m
+(20) show
+23.1116 343.359 m
+25.6663 343.359 L
+S
+7.18957 340.359 m
+(30) show
+0.125 w
+23.1116 147.689 m
+24.6444 147.689 L
+S
+23.1116 157.986 m
+24.6444 157.986 L
+S
+23.1116 168.287 m
+24.6444 168.287 L
+S
+23.1116 178.584 m
+24.6444 178.584 L
+S
+23.1116 199.181 m
+24.6444 199.181 L
+S
+23.1116 209.478 m
+24.6444 209.478 L
+S
+23.1116 219.779 m
+24.6444 219.779 L
+S
+23.1116 230.075 m
+24.6444 230.075 L
+S
+23.1116 250.673 m
+24.6444 250.673 L
+S
+23.1116 260.974 m
+24.6444 260.974 L
+S
+23.1116 271.27 m
+24.6444 271.27 L
+S
+23.1116 281.571 m
+24.6444 281.571 L
+S
+23.1116 302.168 m
+24.6444 302.168 L
+S
+23.1116 312.465 m
+24.6444 312.465 L
+S
+23.1116 322.766 m
+24.6444 322.766 L
+S
+23.1116 333.063 m
+24.6444 333.063 L
+S
+23.1116 127.092 m
+24.6444 127.092 L
+S
+23.1116 116.791 m
+24.6444 116.791 L
+S
+23.1116 106.494 m
+24.6444 106.494 L
+S
+0.25 w
+23.1116 96.7414 m
+23.1116 349.368 L
+S
+32.8442 346.813 m
+32.8442 349.368 L
+S
+88.4562 346.813 m
+88.4562 349.368 L
+S
+144.072 346.813 m
+144.072 349.368 L
+S
+199.684 346.813 m
+199.684 349.368 L
+S
+255.3 346.813 m
+255.3 349.368 L
+S
+310.912 346.813 m
+310.912 349.368 L
+S
+366.528 346.813 m
+366.528 349.368 L
+S
+422.14 346.813 m
+422.14 349.368 L
+S
+0.125 w
+46.7462 347.835 m
+46.7462 349.368 L
+S
+60.6522 347.835 m
+60.6522 349.368 L
+S
+74.5542 347.835 m
+74.5542 349.368 L
+S
+102.362 347.835 m
+102.362 349.368 L
+S
+116.264 347.835 m
+116.264 349.368 L
+S
+130.166 347.835 m
+130.166 349.368 L
+S
+157.974 347.835 m
+157.974 349.368 L
+S
+171.88 347.835 m
+171.88 349.368 L
+S
+185.782 347.835 m
+185.782 349.368 L
+S
+213.59 347.835 m
+213.59 349.368 L
+S
+227.492 347.835 m
+227.492 349.368 L
+S
+241.394 347.835 m
+241.394 349.368 L
+S
+269.202 347.835 m
+269.202 349.368 L
+S
+283.104 347.835 m
+283.104 349.368 L
+S
+297.01 347.835 m
+297.01 349.368 L
+S
+324.818 347.835 m
+324.818 349.368 L
+S
+338.72 347.835 m
+338.72 349.368 L
+S
+352.622 347.835 m
+352.622 349.368 L
+S
+380.43 347.835 m
+380.43 349.368 L
+S
+394.332 347.835 m
+394.332 349.368 L
+S
+408.238 347.835 m
+408.238 349.368 L
+S
+0.25 w
+23.1116 349.368 m
+431.873 349.368 L
+S
+429.318 137.389 m
+431.873 137.389 L
+S
+429.318 188.88 m
+431.873 188.88 L
+S
+429.318 240.376 m
+431.873 240.376 L
+S
+429.318 291.868 m
+431.873 291.868 L
+S
+429.318 343.359 m
+431.873 343.359 L
+S
+0.125 w
+430.34 147.689 m
+431.873 147.689 L
+S
+430.34 157.986 m
+431.873 157.986 L
+S
+430.34 168.287 m
+431.873 168.287 L
+S
+430.34 178.584 m
+431.873 178.584 L
+S
+430.34 199.181 m
+431.873 199.181 L
+S
+430.34 209.478 m
+431.873 209.478 L
+S
+430.34 219.779 m
+431.873 219.779 L
+S
+430.34 230.075 m
+431.873 230.075 L
+S
+430.34 250.673 m
+431.873 250.673 L
+S
+430.34 260.974 m
+431.873 260.974 L
+S
+430.34 271.27 m
+431.873 271.27 L
+S
+430.34 281.571 m
+431.873 281.571 L
+S
+430.34 302.168 m
+431.873 302.168 L
+S
+430.34 312.465 m
+431.873 312.465 L
+S
+430.34 322.766 m
+431.873 322.766 L
+S
+430.34 333.063 m
+431.873 333.063 L
+S
+430.34 127.092 m
+431.873 127.092 L
+S
+430.34 116.791 m
+431.873 116.791 L
+S
+430.34 106.494 m
+431.873 106.494 L
+S
+0.25 w
+431.873 96.7414 m
+431.873 349.368 L
+S
+23.1116 188.88 m
+431.873 188.88 L
+S
+gsave
+23.1116 96.7414 m
+431.873 96.7414 L
+431.873 349.368 L
+23.1116 349.368 L
+23.1116 96.7414 L
+closepath clip newpath
+1.5 w
+46.7462 343.355 m
+48.5774 331.362 L
+50.286 322.459 L
+52.3135 313.896 L
+54.1611 307.523 L
+57.938 297.398 L
+61.9766 289.468 L
+66.0683 283.382 L
+70.5116 278.26 L
+78.5846 271.45 L
+86.4042 266.741 L
+94.6939 262.96 L
+109.605 257.945 L
+125.486 253.926 L
+140.769 250.632 L
+157.018 247.321 L
+172.669 244.067 L
+187.724 240.723 L
+203.743 236.799 L
+219.166 232.569 L
+235.557 227.488 L
+251.352 221.945 L
+266.545 215.932 L
+282.708 208.746 L
+298.273 200.984 L
+313.238 192.686 L
+329.172 182.888 L
+344.508 172.468 L
+360.81 160.255 L
+376.518 147.33 L
+391.626 133.759 L
+407.699 118.046 L
+422.14 102.758 L
+S
+0.5 g
+0.5 w
+60.6522 291.819 m
+170.286 188.88 L
+170.286 244.574 L
+S
+88.4562 265.711 m
+385.916 188.88 L
+385.916 139.02 L
+S
+170.286 244.574 m
+385.916 139.02 L
+S
+284.057 188.88 m
+284.057 208.108 L
+S
+385.916 139.02 m
+284.057 208.108 L
+S
+312.4 188.88 m
+312.4 193.172 L
+S
+0 g
+60.6522 291.819 2. dot
+62.6522 293.319 m
+F0 10. scalefont setfont
+(g) show
+68.6522 291.819 m
+F0 7.125 scalefont setfont
+(0) show
+88.4562 265.711 2. dot
+87.4562 270.211 m
+F0 10. scalefont setfont
+(g) show
+93.4562 268.711 m
+F0 7.125 scalefont setfont
+(1) show
+170.286 244.574 2. dot
+167.286 249.074 m
+F0 10. scalefont setfont
+(g) show
+173.286 247.574 m
+F0 7.125 scalefont setfont
+(2) show
+385.916 139.02 2. dot
+376.916 131.52 m
+F0 10. scalefont setfont
+(g) show
+382.916 130.02 m
+F0 7.125 scalefont setfont
+(3) show
+284.057 208.108 2. dot
+283.057 212.608 m
+F0 10. scalefont setfont
+(g) show
+289.057 211.108 m
+F0 7.125 scalefont setfont
+(4) show
+312.4 193.172 2. dot
+312.4 197.672 m
+F0 10. scalefont setfont
+(g) show
+318.4 196.172 m
+F0 7.125 scalefont setfont
+(5) show
+grestore
+showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
+%%EOF
diff --git a/gsl-1.9/doc/roots.texi b/gsl-1.9/doc/roots.texi
new file mode 100644
index 0000000..fdcefe1
--- /dev/null
+++ b/gsl-1.9/doc/roots.texi
@@ -0,0 +1,928 @@
+@cindex root finding
+@cindex zero finding
+@cindex finding roots
+@cindex finding zeros
+@cindex roots
+@cindex solving a nonlinear equation
+@cindex nonlinear equation, solutions of
+
+This chapter describes routines for finding roots of arbitrary
+one-dimensional functions. The library provides low level components
+for a variety of iterative solvers and convergence tests. These can be
+combined by the user to achieve the desired solution, with full access
+to the intermediate steps of the iteration. Each class of methods uses
+the same framework, so that you can switch between solvers at runtime
+without needing to recompile your program. Each instance of a solver
+keeps track of its own state, allowing the solvers to be used in
+multi-threaded programs.
+
+The header file @file{gsl_roots.h} contains prototypes for the root
+finding functions and related declarations.
+
+@menu
+* Root Finding Overview::
+* Root Finding Caveats::
+* Initializing the Solver::
+* Providing the function to solve::
+* Search Bounds and Guesses::
+* Root Finding Iteration::
+* Search Stopping Parameters::
+* Root Bracketing Algorithms::
+* Root Finding Algorithms using Derivatives::
+* Root Finding Examples::
+* Root Finding References and Further Reading::
+@end menu
+
+@node Root Finding Overview
+@section Overview
+@cindex root finding, overview
+
+One-dimensional root finding algorithms can be divided into two classes,
+@dfn{root bracketing} and @dfn{root polishing}. Algorithms which proceed
+by bracketing a root are guaranteed to converge. Bracketing algorithms
+begin with a bounded region known to contain a root. The size of this
+bounded region is reduced, iteratively, until it encloses the root to a
+desired tolerance. This provides a rigorous error estimate for the
+location of the root.
+
+The technique of @dfn{root polishing} attempts to improve an initial
+guess to the root. These algorithms converge only if started ``close
+enough'' to a root, and sacrifice a rigorous error bound for speed. By
+approximating the behavior of a function in the vicinity of a root they
+attempt to find a higher order improvement of an initial guess. When the
+behavior of the function is compatible with the algorithm and a good
+initial guess is available a polishing algorithm can provide rapid
+convergence.
+
+In GSL both types of algorithm are available in similar frameworks. The
+user provides a high-level driver for the algorithms, and the library
+provides the individual functions necessary for each of the steps.
+There are three main phases of the iteration. The steps are,
+
+@itemize @bullet
+@item
+initialize solver state, @var{s}, for algorithm @var{T}
+
+@item
+update @var{s} using the iteration @var{T}
+
+@item
+test @var{s} for convergence, and repeat iteration if necessary
+@end itemize
+
+@noindent
+The state for bracketing solvers is held in a @code{gsl_root_fsolver}
+struct. The updating procedure uses only function evaluations (not
+derivatives). The state for root polishing solvers is held in a
+@code{gsl_root_fdfsolver} struct. The updates require both the function
+and its derivative (hence the name @code{fdf}) to be supplied by the
+user.
+
+@node Root Finding Caveats
+@section Caveats
+@cindex root finding, caveats
+
+Note that root finding functions can only search for one root at a time.
+When there are several roots in the search area, the first root to be
+found will be returned; however it is difficult to predict which of the
+roots this will be. @emph{In most cases, no error will be reported if
+you try to find a root in an area where there is more than one.}
+
+Care must be taken when a function may have a multiple root (such as
+@c{$f(x) = (x-x_0)^2$}
+@math{f(x) = (x-x_0)^2} or
+@c{$f(x) = (x-x_0)^3$}
+@math{f(x) = (x-x_0)^3}).
+It is not possible to use root-bracketing algorithms on
+even-multiplicity roots. For these algorithms the initial interval must
+contain a zero-crossing, where the function is negative at one end of
+the interval and positive at the other end. Roots with even-multiplicity
+do not cross zero, but only touch it instantaneously. Algorithms based
+on root bracketing will still work for odd-multiplicity roots
+(e.g. cubic, quintic, @dots{}).
+Root polishing algorithms generally work with higher multiplicity roots,
+but at a reduced rate of convergence. In these cases the @dfn{Steffenson
+algorithm} can be used to accelerate the convergence of multiple roots.
+
+While it is not absolutely required that @math{f} have a root within the
+search region, numerical root finding functions should not be used
+haphazardly to check for the @emph{existence} of roots. There are better
+ways to do this. Because it is easy to create situations where numerical
+root finders can fail, it is a bad idea to throw a root finder at a
+function you do not know much about. In general it is best to examine
+the function visually by plotting before searching for a root.
+
+@node Initializing the Solver
+@section Initializing the Solver
+
+@deftypefun {gsl_root_fsolver *} gsl_root_fsolver_alloc (const gsl_root_fsolver_type * @var{T})
+This function returns a pointer to a newly allocated instance of a
+solver of type @var{T}. For example, the following code creates an
+instance of a bisection solver,
+
+@example
+const gsl_root_fsolver_type * T
+ = gsl_root_fsolver_bisection;
+gsl_root_fsolver * s
+ = gsl_root_fsolver_alloc (T);
+@end example
+
+If there is insufficient memory to create the solver then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+@deftypefun {gsl_root_fdfsolver *} gsl_root_fdfsolver_alloc (const gsl_root_fdfsolver_type * @var{T})
+This function returns a pointer to a newly allocated instance of a
+derivative-based solver of type @var{T}. For example, the following
+code creates an instance of a Newton-Raphson solver,
+
+@example
+const gsl_root_fdfsolver_type * T
+ = gsl_root_fdfsolver_newton;
+gsl_root_fdfsolver * s
+ = gsl_root_fdfsolver_alloc (T);
+@end example
+
+If there is insufficient memory to create the solver then the function
+returns a null pointer and the error handler is invoked with an error
+code of @code{GSL_ENOMEM}.
+@end deftypefun
+
+
+@deftypefun int gsl_root_fsolver_set (gsl_root_fsolver * @var{s}, gsl_function * @var{f}, double @var{x_lower}, double @var{x_upper})
+This function initializes, or reinitializes, an existing solver @var{s}
+to use the function @var{f} and the initial search interval
+[@var{x_lower}, @var{x_upper}].
+@end deftypefun
+
+@deftypefun int gsl_root_fdfsolver_set (gsl_root_fdfsolver * @var{s}, gsl_function_fdf * @var{fdf}, double @var{root})
+This function initializes, or reinitializes, an existing solver @var{s}
+to use the function and derivative @var{fdf} and the initial guess
+@var{root}.
+@end deftypefun
+
+@deftypefun void gsl_root_fsolver_free (gsl_root_fsolver * @var{s})
+@deftypefunx void gsl_root_fdfsolver_free (gsl_root_fdfsolver * @var{s})
+These functions free all the memory associated with the solver @var{s}.
+@end deftypefun
+
+@deftypefun {const char *} gsl_root_fsolver_name (const gsl_root_fsolver * @var{s})
+@deftypefunx {const char *} gsl_root_fdfsolver_name (const gsl_root_fdfsolver * @var{s})
+These functions return a pointer to the name of the solver. For example,
+
+@example
+printf ("s is a '%s' solver\n",
+ gsl_root_fsolver_name (s));
+@end example
+
+@noindent
+would print something like @code{s is a 'bisection' solver}.
+@end deftypefun
+
+@node Providing the function to solve
+@section Providing the function to solve
+@cindex root finding, providing a function to solve
+
+You must provide a continuous function of one variable for the root
+finders to operate on, and, sometimes, its first derivative. In order
+to allow for general parameters the functions are defined by the
+following data types:
+
+@deftp {Data Type} gsl_function
+This data type defines a general function with parameters.
+
+@table @code
+@item double (* function) (double @var{x}, void * @var{params})
+this function should return the value
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} for argument @var{x} and parameters @var{params}
+
+@item void * params
+a pointer to the parameters of the function
+@end table
+@end deftp
+
+Here is an example for the general quadratic function,
+@tex
+\beforedisplay
+$$
+f(x) = a x^2 + b x + c
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+f(x) = a x^2 + b x + c
+@end example
+
+@end ifinfo
+@noindent
+with @math{a = 3}, @math{b = 2}, @math{c = 1}. The following code
+defines a @code{gsl_function} @code{F} which you could pass to a root
+finder:
+
+@example
+struct my_f_params @{ double a; double b; double c; @};
+
+double
+my_f (double x, void * p) @{
+ struct my_f_params * params
+ = (struct my_f_params *)p;
+ double a = (params->a);
+ double b = (params->b);
+ double c = (params->c);
+
+ return (a * x + b) * x + c;
+@}
+
+gsl_function F;
+struct my_f_params params = @{ 3.0, 2.0, 1.0 @};
+
+F.function = &my_f;
+F.params = &params;
+@end example
+
+@noindent
+The function @math{f(x)} can be evaluated using the following macro,
+
+@example
+#define GSL_FN_EVAL(F,x)
+ (*((F)->function))(x,(F)->params)
+@end example
+
+@deftp {Data Type} gsl_function_fdf
+This data type defines a general function with parameters and its first
+derivative.
+
+@table @code
+@item double (* f) (double @var{x}, void * @var{params})
+this function should return the value of
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)} for argument @var{x} and parameters @var{params}
+
+@item double (* df) (double @var{x}, void * @var{params})
+this function should return the value of the derivative of @var{f} with
+respect to @var{x},
+@c{$f'(x,\hbox{\it params})$}
+@math{f'(x,params)}, for argument @var{x} and parameters @var{params}
+
+@item void (* fdf) (double @var{x}, void * @var{params}, double * @var{f}, double * @var{d}f)
+this function should set the values of the function @var{f} to
+@c{$f(x,\hbox{\it params})$}
+@math{f(x,params)}
+and its derivative @var{df} to
+@c{$f'(x,\hbox{\it params})$}
+@math{f'(x,params)}
+for argument @var{x} and parameters @var{params}. This function
+provides an optimization of the separate functions for @math{f(x)} and
+@math{f'(x)}---it is always faster to compute the function and its
+derivative at the same time.
+
+@item void * params
+a pointer to the parameters of the function
+@end table
+@end deftp
+
+Here is an example where
+@c{$f(x) = \exp(2x)$}
+@math{f(x) = 2\exp(2x)}:
+
+@example
+double
+my_f (double x, void * params)
+@{
+ return exp (2 * x);
+@}
+
+double
+my_df (double x, void * params)
+@{
+ return 2 * exp (2 * x);
+@}
+
+void
+my_fdf (double x, void * params,
+ double * f, double * df)
+@{
+ double t = exp (2 * x);
+
+ *f = t;
+ *df = 2 * t; /* uses existing value */
+@}
+
+gsl_function_fdf FDF;
+
+FDF.f = &my_f;
+FDF.df = &my_df;
+FDF.fdf = &my_fdf;
+FDF.params = 0;
+@end example
+
+@noindent
+The function @math{f(x)} can be evaluated using the following macro,
+
+@example
+#define GSL_FN_FDF_EVAL_F(FDF,x)
+ (*((FDF)->f))(x,(FDF)->params)
+@end example
+
+@noindent
+The derivative @math{f'(x)} can be evaluated using the following macro,
+
+@example
+#define GSL_FN_FDF_EVAL_DF(FDF,x)
+ (*((FDF)->df))(x,(FDF)->params)
+@end example
+
+@noindent
+and both the function @math{y = f(x)} and its derivative @math{dy = f'(x)}
+can be evaluated at the same time using the following macro,
+
+@example
+#define GSL_FN_FDF_EVAL_F_DF(FDF,x,y,dy)
+ (*((FDF)->fdf))(x,(FDF)->params,(y),(dy))
+@end example
+
+@noindent
+The macro stores @math{f(x)} in its @var{y} argument and @math{f'(x)} in
+its @var{dy} argument---both of these should be pointers to
+@code{double}.
+
+@node Search Bounds and Guesses
+@section Search Bounds and Guesses
+@cindex root finding, search bounds
+@cindex root finding, initial guess
+
+You provide either search bounds or an initial guess; this section
+explains how search bounds and guesses work and how function arguments
+control them.
+
+A guess is simply an @math{x} value which is iterated until it is within
+the desired precision of a root. It takes the form of a @code{double}.
+
+Search bounds are the endpoints of a interval which is iterated until
+the length of the interval is smaller than the requested precision. The
+interval is defined by two values, the lower limit and the upper limit.
+Whether the endpoints are intended to be included in the interval or not
+depends on the context in which the interval is used.
+
+@node Root Finding Iteration
+@section Iteration
+
+The following functions drive the iteration of each algorithm. Each
+function performs one iteration to update the state of any solver of the
+corresponding type. The same functions work for all solvers so that
+different methods can be substituted at runtime without modifications to
+the code.
+
+@deftypefun int gsl_root_fsolver_iterate (gsl_root_fsolver * @var{s})
+@deftypefunx int gsl_root_fdfsolver_iterate (gsl_root_fdfsolver * @var{s})
+These functions perform a single iteration of the solver @var{s}. If the
+iteration encounters an unexpected problem then an error code will be
+returned,
+
+@table @code
+@item GSL_EBADFUNC
+the iteration encountered a singular point where the function or its
+derivative evaluated to @code{Inf} or @code{NaN}.
+
+@item GSL_EZERODIV
+the derivative of the function vanished at the iteration point,
+preventing the algorithm from continuing without a division by zero.
+@end table
+@end deftypefun
+
+The solver maintains a current best estimate of the root at all
+times. The bracketing solvers also keep track of the current best
+interval bounding the root. This information can be accessed with the
+following auxiliary functions,
+
+@deftypefun double gsl_root_fsolver_root (const gsl_root_fsolver * @var{s})
+@deftypefunx double gsl_root_fdfsolver_root (const gsl_root_fdfsolver * @var{s})
+These functions return the current estimate of the root for the solver @var{s}.
+@end deftypefun
+
+@deftypefun double gsl_root_fsolver_x_lower (const gsl_root_fsolver * @var{s})
+@deftypefunx double gsl_root_fsolver_x_upper (const gsl_root_fsolver * @var{s})
+These functions return the current bracketing interval for the solver @var{s}.
+@end deftypefun
+
+@node Search Stopping Parameters
+@section Search Stopping Parameters
+@cindex root finding, stopping parameters
+
+A root finding procedure should stop when one of the following conditions is
+true:
+
+@itemize @bullet
+@item
+A root has been found to within the user-specified precision.
+
+@item
+A user-specified maximum number of iterations has been reached.
+
+@item
+An error has occurred.
+@end itemize
+
+@noindent
+The handling of these conditions is under user control. The functions
+below allow the user to test the precision of the current result in
+several standard ways.
+
+@deftypefun int gsl_root_test_interval (double @var{x_lower}, double @var{x_upper}, double @var{epsabs}, double @var{epsrel})
+This function tests for the convergence of the interval [@var{x_lower},
+@var{x_upper}] with absolute error @var{epsabs} and relative error
+@var{epsrel}. The test returns @code{GSL_SUCCESS} if the following
+condition is achieved,
+@tex
+\beforedisplay
+$$
+|a - b| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, \min(|a|,|b|)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|a - b| < epsabs + epsrel min(|a|,|b|)
+@end example
+
+@end ifinfo
+@noindent
+when the interval @math{x = [a,b]} does not include the origin. If the
+interval includes the origin then @math{\min(|a|,|b|)} is replaced by
+zero (which is the minimum value of @math{|x|} over the interval). This
+ensures that the relative error is accurately estimated for roots close
+to the origin.
+
+This condition on the interval also implies that any estimate of the
+root @math{r} in the interval satisfies the same condition with respect
+to the true root @math{r^*},
+@tex
+\beforedisplay
+$$
+|r - r^*| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, r^*
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|r - r^*| < epsabs + epsrel r^*
+@end example
+
+@end ifinfo
+@noindent
+assuming that the true root @math{r^*} is contained within the interval.
+@end deftypefun
+
+@deftypefun int gsl_root_test_delta (double @var{x1}, double @var{x0}, double @var{epsabs}, double @var{epsrel})
+
+This function tests for the convergence of the sequence @dots{}, @var{x0},
+@var{x1} with absolute error @var{epsabs} and relative error
+@var{epsrel}. The test returns @code{GSL_SUCCESS} if the following
+condition is achieved,
+@tex
+\beforedisplay
+$$
+|x_1 - x_0| < \hbox{\it epsabs} + \hbox{\it epsrel\/}\, |x_1|
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|x_1 - x_0| < epsabs + epsrel |x_1|
+@end example
+
+@end ifinfo
+@noindent
+and returns @code{GSL_CONTINUE} otherwise.
+@end deftypefun
+
+
+@deftypefun int gsl_root_test_residual (double @var{f}, double @var{epsabs})
+This function tests the residual value @var{f} against the absolute
+error bound @var{epsabs}. The test returns @code{GSL_SUCCESS} if the
+following condition is achieved,
+@tex
+\beforedisplay
+$$
+|f| < \hbox{\it epsabs}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+|f| < epsabs
+@end example
+
+@end ifinfo
+@noindent
+and returns @code{GSL_CONTINUE} otherwise. This criterion is suitable
+for situations where the precise location of the root, @math{x}, is
+unimportant provided a value can be found where the residual,
+@math{|f(x)|}, is small enough.
+@end deftypefun
+
+@comment ============================================================
+
+@node Root Bracketing Algorithms
+@section Root Bracketing Algorithms
+
+The root bracketing algorithms described in this section require an
+initial interval which is guaranteed to contain a root---if @math{a}
+and @math{b} are the endpoints of the interval then @math{f(a)} must
+differ in sign from @math{f(b)}. This ensures that the function crosses
+zero at least once in the interval. If a valid initial interval is used
+then these algorithm cannot fail, provided the function is well-behaved.
+
+Note that a bracketing algorithm cannot find roots of even degree, since
+these do not cross the @math{x}-axis.
+
+@deffn {Solver} gsl_root_fsolver_bisection
+
+@cindex bisection algorithm for finding roots
+@cindex root finding, bisection algorithm
+
+The @dfn{bisection algorithm} is the simplest method of bracketing the
+roots of a function. It is the slowest algorithm provided by
+the library, with linear convergence.
+
+On each iteration, the interval is bisected and the value of the
+function at the midpoint is calculated. The sign of this value is used
+to determine which half of the interval does not contain a root. That
+half is discarded to give a new, smaller interval containing the
+root. This procedure can be continued indefinitely until the interval is
+sufficiently small.
+
+At any time the current estimate of the root is taken as the midpoint of
+the interval.
+
+@comment eps file "roots-bisection.eps"
+@comment @iftex
+@comment @sp 1
+@comment @center @image{roots-bisection,3.4in}
+
+@comment @quotation
+@comment Four iterations of bisection, where @math{a_n} is @math{n}th position of
+@comment the beginning of the interval and @math{b_n} is the @math{n}th position
+@comment of the end. The midpoint of each interval is also indicated.
+@comment @end quotation
+@comment @end iftex
+@end deffn
+
+@comment ============================================================
+
+@deffn {Solver} gsl_root_fsolver_falsepos
+@cindex false position algorithm for finding roots
+@cindex root finding, false position algorithm
+
+The @dfn{false position algorithm} is a method of finding roots based on
+linear interpolation. Its convergence is linear, but it is usually
+faster than bisection.
+
+On each iteration a line is drawn between the endpoints @math{(a,f(a))}
+and @math{(b,f(b))} and the point where this line crosses the
+@math{x}-axis taken as a ``midpoint''. The value of the function at
+this point is calculated and its sign is used to determine which side of
+the interval does not contain a root. That side is discarded to give a
+new, smaller interval containing the root. This procedure can be
+continued indefinitely until the interval is sufficiently small.
+
+The best estimate of the root is taken from the linear interpolation of
+the interval on the current iteration.
+
+@comment eps file "roots-false-position.eps"
+@comment @iftex
+@comment @image{roots-false-position,4in}
+@comment @quotation
+@comment Several iterations of false position, where @math{a_n} is @math{n}th
+@comment position of the beginning of the interval and @math{b_n} is the
+@comment @math{n}th position of the end.
+@comment @end quotation
+@comment @end iftex
+@end deffn
+
+@comment ============================================================
+
+@deffn {Solver} gsl_root_fsolver_brent
+@cindex Brent's method for finding roots
+@cindex root finding, Brent's method
+
+The @dfn{Brent-Dekker method} (referred to here as @dfn{Brent's method})
+combines an interpolation strategy with the bisection algorithm. This
+produces a fast algorithm which is still robust.
+
+On each iteration Brent's method approximates the function using an
+interpolating curve. On the first iteration this is a linear
+interpolation of the two endpoints. For subsequent iterations the
+algorithm uses an inverse quadratic fit to the last three points, for
+higher accuracy. The intercept of the interpolating curve with the
+@math{x}-axis is taken as a guess for the root. If it lies within the
+bounds of the current interval then the interpolating point is accepted,
+and used to generate a smaller interval. If the interpolating point is
+not accepted then the algorithm falls back to an ordinary bisection
+step.
+
+The best estimate of the root is taken from the most recent
+interpolation or bisection.
+@end deffn
+
+@comment ============================================================
+
+@node Root Finding Algorithms using Derivatives
+@section Root Finding Algorithms using Derivatives
+
+The root polishing algorithms described in this section require an
+initial guess for the location of the root. There is no absolute
+guarantee of convergence---the function must be suitable for this
+technique and the initial guess must be sufficiently close to the root
+for it to work. When these conditions are satisfied then convergence is
+quadratic.
+
+These algorithms make use of both the function and its derivative.
+
+@deffn {Derivative Solver} gsl_root_fdfsolver_newton
+@cindex Newton's method for finding roots
+@cindex root finding, Newton's method
+
+Newton's Method is the standard root-polishing algorithm. The algorithm
+begins with an initial guess for the location of the root. On each
+iteration, a line tangent to the function @math{f} is drawn at that
+position. The point where this line crosses the @math{x}-axis becomes
+the new guess. The iteration is defined by the following sequence,
+@tex
+\beforedisplay
+$$
+x_{i+1} = x_i - {f(x_i) \over f'(x_i)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{i+1@} = x_i - f(x_i)/f'(x_i)
+@end example
+
+@end ifinfo
+@noindent
+Newton's method converges quadratically for single roots, and linearly
+for multiple roots.
+
+@comment eps file "roots-newtons-method.eps"
+@comment @iftex
+@comment @sp 1
+@comment @center @image{roots-newtons-method,3.4in}
+
+@comment @quotation
+@comment Several iterations of Newton's Method, where @math{g_n} is the
+@comment @math{n}th guess.
+@comment @end quotation
+@comment @end iftex
+@end deffn
+
+@comment ============================================================
+
+@deffn {Derivative Solver} gsl_root_fdfsolver_secant
+@cindex secant method for finding roots
+@cindex root finding, secant method
+
+The @dfn{secant method} is a simplified version of Newton's method which does
+not require the computation of the derivative on every step.
+
+On its first iteration the algorithm begins with Newton's method, using
+the derivative to compute a first step,
+@tex
+\beforedisplay
+$$
+x_1 = x_0 - {f(x_0) \over f'(x_0)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_1 = x_0 - f(x_0)/f'(x_0)
+@end example
+
+@end ifinfo
+@noindent
+Subsequent iterations avoid the evaluation of the derivative by
+replacing it with a numerical estimate, the slope of the line through
+the previous two points,
+@tex
+\beforedisplay
+$$
+x_{i+1} = x_i - {f(x_i) \over f'_{est}}
+ ~\hbox{where}~
+ f'_{est} = {f(x_{i}) - f(x_{i-1}) \over x_i - x_{i-1}}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x_@{i+1@} = x_i f(x_i) / f'_@{est@} where
+ f'_@{est@} = (f(x_i) - f(x_@{i-1@})/(x_i - x_@{i-1@})
+@end example
+
+@end ifinfo
+@noindent
+When the derivative does not change significantly in the vicinity of the
+root the secant method gives a useful saving. Asymptotically the secant
+method is faster than Newton's method whenever the cost of evaluating
+the derivative is more than 0.44 times the cost of evaluating the
+function itself. As with all methods of computing a numerical
+derivative the estimate can suffer from cancellation errors if the
+separation of the points becomes too small.
+
+On single roots, the method has a convergence of order @math{(1 + \sqrt
+5)/2} (approximately @math{1.62}). It converges linearly for multiple
+roots.
+
+@comment eps file "roots-secant-method.eps"
+@comment @iftex
+@comment @tex
+@comment \input epsf
+@comment \medskip
+@comment \centerline{\epsfxsize=5in\epsfbox{roots-secant-method.eps}}
+@comment @end tex
+@comment @quotation
+@comment Several iterations of Secant Method, where @math{g_n} is the @math{n}th
+@comment guess.
+@comment @end quotation
+@comment @end iftex
+@end deffn
+
+@comment ============================================================
+
+@deffn {Derivative Solver} gsl_root_fdfsolver_steffenson
+@cindex Steffenson's method for finding roots
+@cindex root finding, Steffenson's method
+
+The @dfn{Steffenson Method} provides the fastest convergence of all the
+routines. It combines the basic Newton algorithm with an Aitken
+``delta-squared'' acceleration. If the Newton iterates are @math{x_i}
+then the acceleration procedure generates a new sequence @math{R_i},
+@tex
+\beforedisplay
+$$
+R_i = x_i - {(x_{i+1} - x_i)^2 \over (x_{i+2} - 2 x_{i+1} + x_i)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+R_i = x_i - (x_@{i+1@} - x_i)^2 / (x_@{i+2@} - 2 x_@{i+1@} + x_@{i@})
+@end example
+
+@end ifinfo
+@noindent
+which converges faster than the original sequence under reasonable
+conditions. The new sequence requires three terms before it can produce
+its first value so the method returns accelerated values on the second
+and subsequent iterations. On the first iteration it returns the
+ordinary Newton estimate. The Newton iterate is also returned if the
+denominator of the acceleration term ever becomes zero.
+
+As with all acceleration procedures this method can become unstable if
+the function is not well-behaved.
+@end deffn
+
+@node Root Finding Examples
+@section Examples
+
+For any root finding algorithm we need to prepare the function to be
+solved. For this example we will use the general quadratic equation
+described earlier. We first need a header file (@file{demo_fn.h}) to
+define the function parameters,
+
+@example
+@verbatiminclude examples/demo_fn.h
+@end example
+
+@noindent
+We place the function definitions in a separate file (@file{demo_fn.c}),
+
+@example
+@verbatiminclude examples/demo_fn.c
+@end example
+
+@noindent
+The first program uses the function solver @code{gsl_root_fsolver_brent}
+for Brent's method and the general quadratic defined above to solve the
+following equation,
+@tex
+\beforedisplay
+$$
+x^2 - 5 = 0
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+x^2 - 5 = 0
+@end example
+
+@end ifinfo
+@noindent
+with solution @math{x = \sqrt 5 = 2.236068...}
+
+@example
+@verbatiminclude examples/roots.c
+@end example
+
+@noindent
+Here are the results of the iterations,
+
+@smallexample
+$ ./a.out
+using brent method
+ iter [ lower, upper] root err err(est)
+ 1 [1.0000000, 5.0000000] 1.0000000 -1.2360680 4.0000000
+ 2 [1.0000000, 3.0000000] 3.0000000 +0.7639320 2.0000000
+ 3 [2.0000000, 3.0000000] 2.0000000 -0.2360680 1.0000000
+ 4 [2.2000000, 3.0000000] 2.2000000 -0.0360680 0.8000000
+ 5 [2.2000000, 2.2366300] 2.2366300 +0.0005621 0.0366300
+Converged:
+ 6 [2.2360634, 2.2366300] 2.2360634 -0.0000046 0.0005666
+@end smallexample
+
+@noindent
+If the program is modified to use the bisection solver instead of
+Brent's method, by changing @code{gsl_root_fsolver_brent} to
+@code{gsl_root_fsolver_bisection} the slower convergence of the
+Bisection method can be observed,
+
+@smallexample
+$ ./a.out
+using bisection method
+ iter [ lower, upper] root err err(est)
+ 1 [0.0000000, 2.5000000] 1.2500000 -0.9860680 2.5000000
+ 2 [1.2500000, 2.5000000] 1.8750000 -0.3610680 1.2500000
+ 3 [1.8750000, 2.5000000] 2.1875000 -0.0485680 0.6250000
+ 4 [2.1875000, 2.5000000] 2.3437500 +0.1076820 0.3125000
+ 5 [2.1875000, 2.3437500] 2.2656250 +0.0295570 0.1562500
+ 6 [2.1875000, 2.2656250] 2.2265625 -0.0095055 0.0781250
+ 7 [2.2265625, 2.2656250] 2.2460938 +0.0100258 0.0390625
+ 8 [2.2265625, 2.2460938] 2.2363281 +0.0002601 0.0195312
+ 9 [2.2265625, 2.2363281] 2.2314453 -0.0046227 0.0097656
+ 10 [2.2314453, 2.2363281] 2.2338867 -0.0021813 0.0048828
+ 11 [2.2338867, 2.2363281] 2.2351074 -0.0009606 0.0024414
+Converged:
+ 12 [2.2351074, 2.2363281] 2.2357178 -0.0003502 0.0012207
+@end smallexample
+
+The next program solves the same function using a derivative solver
+instead.
+
+@example
+@verbatiminclude examples/rootnewt.c
+@end example
+
+@noindent
+Here are the results for Newton's method,
+
+@example
+$ ./a.out
+using newton method
+iter root err err(est)
+ 1 3.0000000 +0.7639320 -2.0000000
+ 2 2.3333333 +0.0972654 -0.6666667
+ 3 2.2380952 +0.0020273 -0.0952381
+Converged:
+ 4 2.2360689 +0.0000009 -0.0020263
+@end example
+
+@noindent
+Note that the error can be estimated more accurately by taking the
+difference between the current iterate and next iterate rather than the
+previous iterate. The other derivative solvers can be investigated by
+changing @code{gsl_root_fdfsolver_newton} to
+@code{gsl_root_fdfsolver_secant} or
+@code{gsl_root_fdfsolver_steffenson}.
+
+@node Root Finding References and Further Reading
+@section References and Further Reading
+
+For information on the Brent-Dekker algorithm see the following two
+papers,
+
+@itemize @asis
+@item
+R. P. Brent, ``An algorithm with guaranteed convergence for finding a
+zero of a function'', @cite{Computer Journal}, 14 (1971) 422--425
+
+@item
+J. C. P. Bus and T. J. Dekker, ``Two Efficient Algorithms with Guaranteed
+Convergence for Finding a Zero of a Function'', @cite{ACM Transactions of
+Mathematical Software}, Vol.@: 1 No.@: 4 (1975) 330--345
+@end itemize
+
diff --git a/gsl-1.9/doc/siman-energy.eps b/gsl-1.9/doc/siman-energy.eps
new file mode 100644
index 0000000..82a3392
--- /dev/null
+++ b/gsl-1.9/doc/siman-energy.eps
@@ -0,0 +1,11782 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Wed Dec 20 22:05:31 2006
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 49 177 500 576
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources:
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+/DrawDict 50 dict def
+DrawDict begin
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources:
+%%PageBoundingBox: 49 177 500 576
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2315 2151
+2348 2140
+2370 2107
+2381 2052
+2381 2019
+2370 1964
+2348 1931
+2315 1920
+2293 1920
+2260 1931
+2238 1964
+2227 2019
+2227 2052
+2238 2107
+2260 2140
+2293 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2293 2151
+2271 2140
+2260 2129
+2249 2107
+2238 2052
+2238 2019
+2249 1964
+2260 1942
+2271 1931
+2293 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2315 1920
+2337 1931
+2348 1942
+2359 1964
+2370 2019
+2370 2052
+2359 2107
+2348 2129
+2337 2140
+2315 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3181 2151
+3159 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+3159 2041
+3181 2063
+3214 2074
+3247 2074
+3280 2063
+3302 2041
+3313 2008
+3313 1986
+3302 1953
+3280 1931
+3247 1920
+3214 1920
+3181 1931
+3170 1942
+3159 1964
+3159 1975
+3170 1986
+3181 1975
+3170 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3247 2074
+3269 2063
+3291 2041
+3302 2008
+3302 1986
+3291 1953
+3269 1931
+3247 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3181 2151
+3291 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+3181 2140
+3236 2140
+3291 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3467 2151
+3500 2140
+3522 2107
+3533 2052
+3533 2019
+3522 1964
+3500 1931
+3467 1920
+3445 1920
+3412 1931
+3390 1964
+3379 2019
+3379 2052
+3390 2107
+3412 2140
+3445 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3445 2151
+3423 2140
+3412 2129
+3401 2107
+3390 2052
+3390 2019
+3401 1964
+3412 1942
+3423 1931
+3445 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3467 1920
+3489 1931
+3500 1942
+3511 1964
+3522 2019
+3522 2052
+3511 2107
+3500 2129
+3489 2140
+3467 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3687 2151
+3720 2140
+3742 2107
+3753 2052
+3753 2019
+3742 1964
+3720 1931
+3687 1920
+3665 1920
+3632 1931
+3610 1964
+3599 2019
+3599 2052
+3610 2107
+3632 2140
+3665 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3665 2151
+3643 2140
+3632 2129
+3621 2107
+3610 2052
+3610 2019
+3621 1964
+3632 1942
+3643 1931
+3665 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3687 1920
+3709 1931
+3720 1942
+3731 1964
+3742 2019
+3742 2052
+3731 2107
+3720 2129
+3709 2140
+3687 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 9216
+3456 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 2304
+3456 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4234 2107
+4256 2118
+4289 2151
+4289 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4278 2140
+4278 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4234 1920
+4333 1920
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4509 2151
+4542 2140
+4564 2107
+4575 2052
+4575 2019
+4564 1964
+4542 1931
+4509 1920
+4487 1920
+4454 1931
+4432 1964
+4421 2019
+4421 2052
+4432 2107
+4454 2140
+4487 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4487 2151
+4465 2140
+4454 2129
+4443 2107
+4432 2052
+4432 2019
+4443 1964
+4454 1942
+4465 1931
+4487 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4509 1920
+4531 1931
+4542 1942
+4553 1964
+4564 2019
+4564 2052
+4553 2107
+4542 2129
+4531 2140
+4509 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4729 2151
+4762 2140
+4784 2107
+4795 2052
+4795 2019
+4784 1964
+4762 1931
+4729 1920
+4707 1920
+4674 1931
+4652 1964
+4641 2019
+4641 2052
+4652 2107
+4674 2140
+4707 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4707 2151
+4685 2140
+4674 2129
+4663 2107
+4652 2052
+4652 2019
+4663 1964
+4674 1942
+4685 1931
+4707 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4729 1920
+4751 1931
+4762 1942
+4773 1964
+4784 2019
+4784 2052
+4773 2107
+4762 2129
+4751 2140
+4729 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4949 2151
+4982 2140
+5004 2107
+5015 2052
+5015 2019
+5004 1964
+4982 1931
+4949 1920
+4927 1920
+4894 1931
+4872 1964
+4861 2019
+4861 2052
+4872 2107
+4894 2140
+4927 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4927 2151
+4905 2140
+4894 2129
+4883 2107
+4872 2052
+4872 2019
+4883 1964
+4894 1942
+4905 1931
+4927 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4949 1920
+4971 1931
+4982 1942
+4993 1964
+5004 2019
+5004 2052
+4993 2107
+4982 2129
+4971 2140
+4949 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5386 2107
+5408 2118
+5441 2151
+5441 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5430 2140
+5430 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5386 1920
+5485 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5595 2151
+5573 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+5573 2041
+5595 2063
+5628 2074
+5661 2074
+5694 2063
+5716 2041
+5727 2008
+5727 1986
+5716 1953
+5694 1931
+5661 1920
+5628 1920
+5595 1931
+5584 1942
+5573 1964
+5573 1975
+5584 1986
+5595 1975
+5584 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5661 2074
+5683 2063
+5705 2041
+5716 2008
+5716 1986
+5705 1953
+5683 1931
+5661 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5595 2151
+5705 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5595 2140
+5650 2140
+5705 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5881 2151
+5914 2140
+5936 2107
+5947 2052
+5947 2019
+5936 1964
+5914 1931
+5881 1920
+5859 1920
+5826 1931
+5804 1964
+5793 2019
+5793 2052
+5804 2107
+5826 2140
+5859 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5859 2151
+5837 2140
+5826 2129
+5815 2107
+5804 2052
+5804 2019
+5815 1964
+5826 1942
+5837 1931
+5859 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5881 1920
+5903 1931
+5914 1942
+5925 1964
+5936 2019
+5936 2052
+5925 2107
+5914 2129
+5903 2140
+5881 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6101 2151
+6134 2140
+6156 2107
+6167 2052
+6167 2019
+6156 1964
+6134 1931
+6101 1920
+6079 1920
+6046 1931
+6024 1964
+6013 2019
+6013 2052
+6024 2107
+6046 2140
+6079 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6079 2151
+6057 2140
+6046 2129
+6035 2107
+6024 2052
+6024 2019
+6035 1964
+6046 1942
+6057 1931
+6079 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6101 1920
+6123 1931
+6134 1942
+6145 1964
+6156 2019
+6156 2052
+6145 2107
+6134 2129
+6123 2140
+6101 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+6516 2107
+6527 2096
+6516 2085
+6505 2096
+6505 2107
+6516 2129
+6527 2140
+6560 2151
+6604 2151
+6637 2140
+6648 2129
+6659 2107
+6659 2085
+6648 2063
+6615 2041
+6560 2019
+6538 2008
+6516 1986
+6505 1953
+6505 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6604 2151
+6626 2140
+6637 2129
+6648 2107
+6648 2085
+6637 2063
+6604 2041
+6560 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6505 1942
+6516 1953
+6538 1953
+6593 1931
+6626 1931
+6648 1942
+6659 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6538 1953
+6593 1920
+6637 1920
+6648 1931
+6659 1953
+6659 1975
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6813 2151
+6846 2140
+6868 2107
+6879 2052
+6879 2019
+6868 1964
+6846 1931
+6813 1920
+6791 1920
+6758 1931
+6736 1964
+6725 2019
+6725 2052
+6736 2107
+6758 2140
+6791 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6791 2151
+6769 2140
+6758 2129
+6747 2107
+6736 2052
+6736 2019
+6747 1964
+6758 1942
+6769 1931
+6791 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6813 1920
+6835 1931
+6846 1942
+6857 1964
+6868 2019
+6868 2052
+6857 2107
+6846 2129
+6835 2140
+6813 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7033 2151
+7066 2140
+7088 2107
+7099 2052
+7099 2019
+7088 1964
+7066 1931
+7033 1920
+7011 1920
+6978 1931
+6956 1964
+6945 2019
+6945 2052
+6956 2107
+6978 2140
+7011 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7011 2151
+6989 2140
+6978 2129
+6967 2107
+6956 2052
+6956 2019
+6967 1964
+6978 1942
+6989 1931
+7011 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7033 1920
+7055 1931
+7066 1942
+7077 1964
+7088 2019
+7088 2052
+7077 2107
+7066 2129
+7055 2140
+7033 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7253 2151
+7286 2140
+7308 2107
+7319 2052
+7319 2019
+7308 1964
+7286 1931
+7253 1920
+7231 1920
+7198 1931
+7176 1964
+7165 2019
+7165 2052
+7176 2107
+7198 2140
+7231 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7231 2151
+7209 2140
+7198 2129
+7187 2107
+7176 2052
+7176 2019
+7187 1964
+7198 1942
+7209 1931
+7231 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7253 1920
+7275 1931
+7286 1942
+7297 1964
+7308 2019
+7308 2052
+7297 2107
+7286 2129
+7275 2140
+7253 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+7668 2107
+7679 2096
+7668 2085
+7657 2096
+7657 2107
+7668 2129
+7679 2140
+7712 2151
+7756 2151
+7789 2140
+7800 2129
+7811 2107
+7811 2085
+7800 2063
+7767 2041
+7712 2019
+7690 2008
+7668 1986
+7657 1953
+7657 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7756 2151
+7778 2140
+7789 2129
+7800 2107
+7800 2085
+7789 2063
+7756 2041
+7712 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7657 1942
+7668 1953
+7690 1953
+7745 1931
+7778 1931
+7800 1942
+7811 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+7690 1953
+7745 1920
+7789 1920
+7800 1931
+7811 1953
+7811 1975
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7899 2151
+7877 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+7877 2041
+7899 2063
+7932 2074
+7965 2074
+7998 2063
+8020 2041
+8031 2008
+8031 1986
+8020 1953
+7998 1931
+7965 1920
+7932 1920
+7899 1931
+7888 1942
+7877 1964
+7877 1975
+7888 1986
+7899 1975
+7888 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7965 2074
+7987 2063
+8009 2041
+8020 2008
+8020 1986
+8009 1953
+7987 1931
+7965 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7899 2151
+8009 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+7899 2140
+7954 2140
+8009 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8185 2151
+8218 2140
+8240 2107
+8251 2052
+8251 2019
+8240 1964
+8218 1931
+8185 1920
+8163 1920
+8130 1931
+8108 1964
+8097 2019
+8097 2052
+8108 2107
+8130 2140
+8163 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8163 2151
+8141 2140
+8130 2129
+8119 2107
+8108 2052
+8108 2019
+8119 1964
+8130 1942
+8141 1931
+8163 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8185 1920
+8207 1931
+8218 1942
+8229 1964
+8240 2019
+8240 2052
+8229 2107
+8218 2129
+8207 2140
+8185 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8405 2151
+8438 2140
+8460 2107
+8471 2052
+8471 2019
+8460 1964
+8438 1931
+8405 1920
+8383 1920
+8350 1931
+8328 1964
+8317 2019
+8317 2052
+8328 2107
+8350 2140
+8383 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8383 2151
+8361 2140
+8350 2129
+8339 2107
+8328 2052
+8328 2019
+8339 1964
+8350 1942
+8361 1931
+8383 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8405 1920
+8427 1931
+8438 1942
+8449 1964
+8460 2019
+8460 2052
+8449 2107
+8438 2129
+8427 2140
+8405 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 9216
+8064 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 2304
+8064 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+8820 2107
+8831 2096
+8820 2085
+8809 2096
+8809 2107
+8820 2129
+8831 2140
+8864 2151
+8908 2151
+8941 2140
+8952 2118
+8952 2085
+8941 2063
+8908 2052
+8875 2052
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8908 2151
+8930 2140
+8941 2118
+8941 2085
+8930 2063
+8908 2052
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8908 2052
+8930 2041
+8952 2019
+8963 1997
+8963 1964
+8952 1942
+8941 1931
+8908 1920
+8864 1920
+8831 1931
+8820 1942
+8809 1964
+8809 1975
+8820 1986
+8831 1975
+8820 1964
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8941 2030
+8952 1997
+8952 1964
+8941 1942
+8930 1931
+8908 1920
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9117 2151
+9150 2140
+9172 2107
+9183 2052
+9183 2019
+9172 1964
+9150 1931
+9117 1920
+9095 1920
+9062 1931
+9040 1964
+9029 2019
+9029 2052
+9040 2107
+9062 2140
+9095 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9095 2151
+9073 2140
+9062 2129
+9051 2107
+9040 2052
+9040 2019
+9051 1964
+9062 1942
+9073 1931
+9095 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9117 1920
+9139 1931
+9150 1942
+9161 1964
+9172 2019
+9172 2052
+9161 2107
+9150 2129
+9139 2140
+9117 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9337 2151
+9370 2140
+9392 2107
+9403 2052
+9403 2019
+9392 1964
+9370 1931
+9337 1920
+9315 1920
+9282 1931
+9260 1964
+9249 2019
+9249 2052
+9260 2107
+9282 2140
+9315 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9315 2151
+9293 2140
+9282 2129
+9271 2107
+9260 2052
+9260 2019
+9271 1964
+9282 1942
+9293 1931
+9315 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9337 1920
+9359 1931
+9370 1942
+9381 1964
+9392 2019
+9392 2052
+9381 2107
+9370 2129
+9359 2140
+9337 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9557 2151
+9590 2140
+9612 2107
+9623 2052
+9623 2019
+9612 1964
+9590 1931
+9557 1920
+9535 1920
+9502 1931
+9480 1964
+9469 2019
+9469 2052
+9480 2107
+9502 2140
+9535 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9535 2151
+9513 2140
+9502 2129
+9491 2107
+9480 2052
+9480 2019
+9491 1964
+9502 1942
+9513 1931
+9535 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9557 1920
+9579 1931
+9590 1942
+9601 1964
+9612 2019
+9612 2052
+9601 2107
+9590 2129
+9579 2140
+9557 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1189 2304
+1387 2304
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1552 2436
+1585 2425
+1607 2392
+1618 2337
+1618 2304
+1607 2249
+1585 2216
+1552 2205
+1530 2205
+1497 2216
+1475 2249
+1464 2304
+1464 2337
+1475 2392
+1497 2425
+1530 2436
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1530 2436
+1508 2425
+1497 2414
+1486 2392
+1475 2337
+1475 2304
+1486 2249
+1497 2227
+1508 2216
+1530 2205
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1552 2205
+1574 2216
+1585 2227
+1596 2249
+1607 2304
+1607 2337
+1596 2392
+1585 2414
+1574 2425
+1552 2436
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 2216
+1705 2205
+1694 2216
+1705 2227
+4 Poly
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+1892 2436
+1925 2425
+1936 2403
+1936 2370
+1925 2348
+1892 2337
+1848 2337
+1815 2348
+1804 2370
+1804 2403
+1815 2425
+1848 2436
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1848 2436
+1826 2425
+1815 2403
+1815 2370
+1826 2348
+1848 2337
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 2337
+1914 2348
+1925 2370
+1925 2403
+1914 2425
+1892 2436
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1848 2337
+1815 2326
+1804 2315
+1793 2293
+1793 2249
+1804 2227
+1815 2216
+1848 2205
+1892 2205
+1925 2216
+1936 2227
+1947 2249
+1947 2293
+1936 2315
+1925 2326
+1892 2337
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1848 2337
+1826 2326
+1815 2315
+1804 2293
+1804 2249
+1815 2227
+1826 2216
+1848 2205
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 2205
+1914 2216
+1925 2227
+1936 2249
+1936 2293
+1925 2315
+1914 2326
+1892 2337
+8 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+2112 2436
+2145 2425
+2156 2403
+2156 2370
+2145 2348
+2112 2337
+2068 2337
+2035 2348
+2024 2370
+2024 2403
+2035 2425
+2068 2436
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2068 2436
+2046 2425
+2035 2403
+2035 2370
+2046 2348
+2068 2337
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2112 2337
+2134 2348
+2145 2370
+2145 2403
+2134 2425
+2112 2436
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2068 2337
+2035 2326
+2024 2315
+2013 2293
+2013 2249
+2024 2227
+2035 2216
+2068 2205
+2112 2205
+2145 2216
+2156 2227
+2167 2249
+2167 2293
+2156 2315
+2145 2326
+2112 2337
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2068 2337
+2046 2326
+2035 2315
+2024 2293
+2024 2249
+2035 2227
+2046 2216
+2068 2205
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2112 2205
+2134 2216
+2145 2227
+2156 2249
+2156 2293
+2145 2315
+2134 2326
+2112 2337
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1189 3686
+1387 3686
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1552 3818
+1585 3807
+1607 3774
+1618 3719
+1618 3686
+1607 3631
+1585 3598
+1552 3587
+1530 3587
+1497 3598
+1475 3631
+1464 3686
+1464 3719
+1475 3774
+1497 3807
+1530 3818
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1530 3818
+1508 3807
+1497 3796
+1486 3774
+1475 3719
+1475 3686
+1486 3631
+1497 3609
+1508 3598
+1530 3587
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1552 3587
+1574 3598
+1585 3609
+1596 3631
+1607 3686
+1607 3719
+1596 3774
+1585 3796
+1574 3807
+1552 3818
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 3598
+1705 3587
+1694 3598
+1705 3609
+4 Poly
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+1892 3818
+1925 3807
+1936 3785
+1936 3752
+1925 3730
+1892 3719
+1848 3719
+1815 3730
+1804 3752
+1804 3785
+1815 3807
+1848 3818
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1848 3818
+1826 3807
+1815 3785
+1815 3752
+1826 3730
+1848 3719
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 3719
+1914 3730
+1925 3752
+1925 3785
+1914 3807
+1892 3818
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1848 3719
+1815 3708
+1804 3697
+1793 3675
+1793 3631
+1804 3609
+1815 3598
+1848 3587
+1892 3587
+1925 3598
+1936 3609
+1947 3631
+1947 3675
+1936 3697
+1925 3708
+1892 3719
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1848 3719
+1826 3708
+1815 3697
+1804 3675
+1804 3631
+1815 3609
+1826 3598
+1848 3587
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 3587
+1914 3598
+1925 3609
+1936 3631
+1936 3675
+1925 3697
+1914 3708
+1892 3719
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2013 3818
+2013 3752
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2013 3774
+2024 3796
+2046 3818
+2068 3818
+2123 3785
+2145 3785
+2156 3796
+2167 3818
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2024 3796
+2046 3807
+2068 3807
+2123 3785
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2167 3818
+2167 3785
+2156 3752
+2112 3697
+2101 3675
+2090 3642
+2090 3587
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+2156 3752
+2101 3697
+2090 3675
+2079 3642
+2079 3587
+5 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3686
+9078 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2442 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1189 5069
+1387 5069
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1552 5201
+1585 5190
+1607 5157
+1618 5102
+1618 5069
+1607 5014
+1585 4981
+1552 4970
+1530 4970
+1497 4981
+1475 5014
+1464 5069
+1464 5102
+1475 5157
+1497 5190
+1530 5201
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1530 5201
+1508 5190
+1497 5179
+1486 5157
+1475 5102
+1475 5069
+1486 5014
+1497 4992
+1508 4981
+1530 4970
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1552 4970
+1574 4981
+1585 4992
+1596 5014
+1607 5069
+1607 5102
+1596 5157
+1585 5179
+1574 5190
+1552 5201
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 4981
+1705 4970
+1694 4981
+1705 4992
+4 Poly
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+1892 5201
+1925 5190
+1936 5168
+1936 5135
+1925 5113
+1892 5102
+1848 5102
+1815 5113
+1804 5135
+1804 5168
+1815 5190
+1848 5201
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1848 5201
+1826 5190
+1815 5168
+1815 5135
+1826 5113
+1848 5102
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 5102
+1914 5113
+1925 5135
+1925 5168
+1914 5190
+1892 5201
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1848 5102
+1815 5091
+1804 5080
+1793 5058
+1793 5014
+1804 4992
+1815 4981
+1848 4970
+1892 4970
+1925 4981
+1936 4992
+1947 5014
+1947 5058
+1936 5080
+1925 5091
+1892 5102
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1848 5102
+1826 5091
+1815 5080
+1804 5058
+1804 5014
+1815 4992
+1826 4981
+1848 4970
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 4970
+1914 4981
+1925 4992
+1936 5014
+1936 5058
+1925 5080
+1914 5091
+1892 5102
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2145 5168
+2134 5157
+2145 5146
+2156 5157
+2156 5168
+2145 5190
+2123 5201
+2090 5201
+2057 5190
+2035 5168
+2024 5146
+2013 5102
+2013 5036
+2024 5003
+2046 4981
+2079 4970
+2101 4970
+2134 4981
+2156 5003
+2167 5036
+2167 5047
+2156 5080
+2134 5102
+2101 5113
+2090 5113
+2057 5102
+2035 5080
+2024 5047
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2090 5201
+2068 5190
+2046 5168
+2035 5146
+2024 5102
+2024 5036
+2035 5003
+2057 4981
+2079 4970
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2101 4970
+2123 4981
+2145 5003
+2156 5036
+2156 5047
+2145 5080
+2123 5102
+2101 5113
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5069
+9078 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2442 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1189 6451
+1387 6451
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1552 6583
+1585 6572
+1607 6539
+1618 6484
+1618 6451
+1607 6396
+1585 6363
+1552 6352
+1530 6352
+1497 6363
+1475 6396
+1464 6451
+1464 6484
+1475 6539
+1497 6572
+1530 6583
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1530 6583
+1508 6572
+1497 6561
+1486 6539
+1475 6484
+1475 6451
+1486 6396
+1497 6374
+1508 6363
+1530 6352
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1552 6352
+1574 6363
+1585 6374
+1596 6396
+1607 6451
+1607 6484
+1596 6539
+1585 6561
+1574 6572
+1552 6583
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 6363
+1705 6352
+1694 6363
+1705 6374
+4 Poly
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+1892 6583
+1925 6572
+1936 6550
+1936 6517
+1925 6495
+1892 6484
+1848 6484
+1815 6495
+1804 6517
+1804 6550
+1815 6572
+1848 6583
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1848 6583
+1826 6572
+1815 6550
+1815 6517
+1826 6495
+1848 6484
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 6484
+1914 6495
+1925 6517
+1925 6550
+1914 6572
+1892 6583
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1848 6484
+1815 6473
+1804 6462
+1793 6440
+1793 6396
+1804 6374
+1815 6363
+1848 6352
+1892 6352
+1925 6363
+1936 6374
+1947 6396
+1947 6440
+1936 6462
+1925 6473
+1892 6484
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1848 6484
+1826 6473
+1815 6462
+1804 6440
+1804 6396
+1815 6374
+1826 6363
+1848 6352
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 6352
+1914 6363
+1925 6374
+1936 6396
+1936 6440
+1925 6462
+1914 6473
+1892 6484
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 6583
+2013 6473
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+2013 6473
+2035 6495
+2068 6506
+2101 6506
+2134 6495
+2156 6473
+2167 6440
+2167 6418
+2156 6385
+2134 6363
+2101 6352
+2068 6352
+2035 6363
+2024 6374
+2013 6396
+2013 6407
+2024 6418
+2035 6407
+2024 6396
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2101 6506
+2123 6495
+2145 6473
+2156 6440
+2156 6418
+2145 6385
+2123 6363
+2101 6352
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 6583
+2145 6583
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2035 6572
+2090 6572
+2145 6583
+3 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6451
+9078 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2442 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1189 7834
+1387 7834
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1552 7966
+1585 7955
+1607 7922
+1618 7867
+1618 7834
+1607 7779
+1585 7746
+1552 7735
+1530 7735
+1497 7746
+1475 7779
+1464 7834
+1464 7867
+1475 7922
+1497 7955
+1530 7966
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1530 7966
+1508 7955
+1497 7944
+1486 7922
+1475 7867
+1475 7834
+1486 7779
+1497 7757
+1508 7746
+1530 7735
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1552 7735
+1574 7746
+1585 7757
+1596 7779
+1607 7834
+1607 7867
+1596 7922
+1585 7944
+1574 7955
+1552 7966
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 7746
+1705 7735
+1694 7746
+1705 7757
+4 Poly
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+1892 7966
+1925 7955
+1936 7933
+1936 7900
+1925 7878
+1892 7867
+1848 7867
+1815 7878
+1804 7900
+1804 7933
+1815 7955
+1848 7966
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1848 7966
+1826 7955
+1815 7933
+1815 7900
+1826 7878
+1848 7867
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 7867
+1914 7878
+1925 7900
+1925 7933
+1914 7955
+1892 7966
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1848 7867
+1815 7856
+1804 7845
+1793 7823
+1793 7779
+1804 7757
+1815 7746
+1848 7735
+1892 7735
+1925 7746
+1936 7757
+1947 7779
+1947 7823
+1936 7845
+1925 7856
+1892 7867
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1848 7867
+1826 7856
+1815 7845
+1804 7823
+1804 7779
+1815 7757
+1826 7746
+1848 7735
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 7735
+1914 7746
+1925 7757
+1936 7779
+1936 7823
+1925 7845
+1914 7856
+1892 7867
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2112 7944
+2112 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2123 7966
+2123 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2123 7966
+2002 7801
+2178 7801
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2079 7735
+2156 7735
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7834
+9078 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2442 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1189 9216
+1387 9216
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1552 9348
+1585 9337
+1607 9304
+1618 9249
+1618 9216
+1607 9161
+1585 9128
+1552 9117
+1530 9117
+1497 9128
+1475 9161
+1464 9216
+1464 9249
+1475 9304
+1497 9337
+1530 9348
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1530 9348
+1508 9337
+1497 9326
+1486 9304
+1475 9249
+1475 9216
+1486 9161
+1497 9139
+1508 9128
+1530 9117
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+1552 9117
+1574 9128
+1585 9139
+1596 9161
+1607 9216
+1607 9249
+1596 9304
+1585 9326
+1574 9337
+1552 9348
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 9128
+1705 9117
+1694 9128
+1705 9139
+4 Poly
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+1892 9348
+1925 9337
+1936 9315
+1936 9282
+1925 9260
+1892 9249
+1848 9249
+1815 9260
+1804 9282
+1804 9315
+1815 9337
+1848 9348
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1848 9348
+1826 9337
+1815 9315
+1815 9282
+1826 9260
+1848 9249
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 9249
+1914 9260
+1925 9282
+1925 9315
+1914 9337
+1892 9348
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1848 9249
+1815 9238
+1804 9227
+1793 9205
+1793 9161
+1804 9139
+1815 9128
+1848 9117
+1892 9117
+1925 9128
+1936 9139
+1947 9161
+1947 9205
+1936 9227
+1925 9238
+1892 9249
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1848 9249
+1826 9238
+1815 9227
+1804 9205
+1804 9161
+1815 9139
+1826 9128
+1848 9117
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1892 9117
+1914 9128
+1925 9139
+1936 9161
+1936 9205
+1925 9227
+1914 9238
+1892 9249
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+2024 9304
+2035 9293
+2024 9282
+2013 9293
+2013 9304
+2024 9326
+2035 9337
+2068 9348
+2112 9348
+2145 9337
+2156 9315
+2156 9282
+2145 9260
+2112 9249
+2079 9249
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2112 9348
+2134 9337
+2145 9315
+2145 9282
+2134 9260
+2112 9249
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2112 9249
+2134 9238
+2156 9216
+2167 9194
+2167 9161
+2156 9139
+2145 9128
+2112 9117
+2068 9117
+2035 9128
+2024 9139
+2013 9161
+2013 9172
+2024 9183
+2035 9172
+2024 9161
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2145 9227
+2156 9194
+2156 9161
+2145 9139
+2134 9128
+2112 9117
+6 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2580
+9161 2580
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2580
+2359 2580
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2857
+9161 2857
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2857
+2359 2857
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3133
+9161 3133
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3133
+2359 3133
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3410
+9161 3410
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3410
+2359 3410
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3686
+9161 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3686
+2359 3686
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3963
+9161 3963
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3963
+2359 3963
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4239
+9161 4239
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4239
+2359 4239
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4516
+9161 4516
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4516
+2359 4516
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4792
+9161 4792
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4792
+2359 4792
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5069
+9161 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5069
+2359 5069
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5345
+9161 5345
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5345
+2359 5345
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5622
+9161 5622
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5622
+2359 5622
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5898
+9161 5898
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5898
+2359 5898
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6175
+9161 6175
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6175
+2359 6175
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6451
+9161 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6451
+2359 6451
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6728
+9161 6728
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6728
+2359 6728
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7004
+9161 7004
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7004
+2359 7004
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7281
+9161 7281
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7281
+2359 7281
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7557
+9161 7557
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7557
+2359 7557
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7834
+9161 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7834
+2359 7834
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8110
+9161 8110
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8110
+2359 8110
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8387
+9161 8387
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8387
+2359 8387
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8663
+9161 8663
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8663
+2359 8663
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8940
+9161 8940
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8940
+2359 8940
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4858 1621
+4880 1610
+4891 1599
+4902 1577
+4902 1555
+4891 1533
+4880 1522
+4858 1511
+4836 1511
+4814 1522
+4803 1533
+4792 1555
+4792 1577
+4803 1599
+4814 1610
+4836 1621
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4814 1610
+4803 1588
+4803 1544
+4814 1522
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4880 1522
+4891 1544
+4891 1588
+4880 1610
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+4891 1599
+4902 1610
+4924 1621
+4924 1610
+4902 1610
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+4803 1533
+4792 1522
+4781 1500
+4781 1489
+4792 1467
+4825 1456
+4880 1456
+4913 1445
+4924 1434
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+4781 1489
+4792 1478
+4825 1467
+4880 1467
+4913 1456
+4924 1434
+4924 1423
+4913 1401
+4880 1390
+4814 1390
+4781 1401
+4770 1423
+4770 1434
+4781 1456
+4814 1467
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5001 1555
+5133 1555
+5133 1577
+5122 1599
+5111 1610
+5089 1621
+5056 1621
+5023 1610
+5001 1588
+4990 1555
+4990 1533
+5001 1500
+5023 1478
+5056 1467
+5078 1467
+5111 1478
+5133 1500
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5122 1555
+5122 1588
+5111 1610
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5056 1621
+5034 1610
+5012 1588
+5001 1555
+5001 1533
+5012 1500
+5034 1478
+5056 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5221 1621
+5221 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5232 1621
+5232 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5232 1588
+5254 1610
+5287 1621
+5309 1621
+5342 1610
+5353 1588
+5353 1467
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5309 1621
+5331 1610
+5342 1588
+5342 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5188 1621
+5232 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5188 1467
+5265 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5309 1467
+5386 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5452 1555
+5584 1555
+5584 1577
+5573 1599
+5562 1610
+5540 1621
+5507 1621
+5474 1610
+5452 1588
+5441 1555
+5441 1533
+5452 1500
+5474 1478
+5507 1467
+5529 1467
+5562 1478
+5584 1500
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5573 1555
+5573 1588
+5562 1610
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5507 1621
+5485 1610
+5463 1588
+5452 1555
+5452 1533
+5463 1500
+5485 1478
+5507 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5672 1621
+5672 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5683 1621
+5683 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5683 1555
+5694 1588
+5716 1610
+5738 1621
+5771 1621
+5782 1610
+5782 1599
+5771 1588
+5760 1599
+5771 1610
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5639 1621
+5683 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5639 1467
+5716 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+5859 1599
+5859 1588
+5848 1588
+5848 1599
+5859 1610
+5881 1621
+5925 1621
+5947 1610
+5958 1599
+5969 1577
+5969 1500
+5980 1478
+5991 1467
+13 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+5958 1599
+5958 1500
+5969 1478
+5991 1467
+6002 1467
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+5958 1577
+5947 1566
+5881 1555
+5848 1544
+5837 1522
+5837 1500
+5848 1478
+5881 1467
+5914 1467
+5936 1478
+5958 1500
+11 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+5881 1555
+5859 1544
+5848 1522
+5848 1500
+5859 1478
+5881 1467
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6079 1698
+6079 1511
+6090 1478
+6112 1467
+6134 1467
+6156 1478
+6167 1500
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6090 1698
+6090 1511
+6101 1478
+6112 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6046 1621
+6134 1621
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6255 1687
+6244 1676
+6233 1687
+6244 1698
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6244 1621
+6244 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6255 1621
+6255 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6211 1621
+6255 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6211 1467
+6288 1467
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6431 1621
+6464 1610
+6486 1588
+6497 1555
+6497 1533
+6486 1500
+6464 1478
+6431 1467
+6409 1467
+6376 1478
+6354 1500
+6343 1533
+6343 1555
+6354 1588
+6376 1610
+6409 1621
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6409 1621
+6387 1610
+6365 1588
+6354 1555
+6354 1533
+6365 1500
+6387 1478
+6409 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6431 1467
+6453 1478
+6475 1500
+6486 1533
+6486 1555
+6475 1588
+6453 1610
+6431 1621
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6585 1621
+6585 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6596 1621
+6596 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6596 1588
+6618 1610
+6651 1621
+6673 1621
+6706 1610
+6717 1588
+6717 1467
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6673 1621
+6695 1610
+6706 1588
+6706 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 1621
+6596 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 1467
+6629 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6673 1467
+6750 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+711 5172
+711 5304
+689 5304
+667 5293
+656 5282
+645 5260
+645 5227
+656 5194
+678 5172
+711 5161
+733 5161
+766 5172
+788 5194
+799 5227
+799 5249
+788 5282
+766 5304
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+711 5293
+678 5293
+656 5282
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+645 5227
+656 5205
+678 5183
+711 5172
+733 5172
+766 5183
+788 5205
+799 5227
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 5392
+799 5392
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 5403
+799 5403
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+678 5403
+656 5425
+645 5458
+645 5480
+656 5513
+678 5524
+799 5524
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+645 5480
+656 5502
+678 5513
+799 5513
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 5359
+645 5403
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+799 5359
+799 5436
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+799 5480
+799 5557
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+711 5623
+711 5755
+689 5755
+667 5744
+656 5733
+645 5711
+645 5678
+656 5645
+678 5623
+711 5612
+733 5612
+766 5623
+788 5645
+799 5678
+799 5700
+788 5733
+766 5755
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+711 5744
+678 5744
+656 5733
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+645 5678
+656 5656
+678 5634
+711 5623
+733 5623
+766 5634
+788 5656
+799 5678
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 5842
+799 5842
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 5853
+799 5853
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+711 5853
+678 5864
+656 5886
+645 5908
+645 5941
+656 5952
+667 5952
+678 5941
+667 5930
+656 5941
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 5809
+645 5853
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+799 5809
+799 5886
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+645 6084
+656 6106
+667 6117
+689 6128
+711 6128
+733 6117
+744 6106
+755 6084
+755 6062
+744 6040
+733 6029
+711 6018
+689 6018
+667 6029
+656 6040
+645 6062
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+656 6040
+678 6029
+722 6029
+744 6040
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+744 6106
+722 6117
+678 6117
+656 6106
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+667 6117
+656 6128
+645 6150
+656 6150
+656 6128
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+733 6029
+744 6018
+766 6007
+777 6007
+799 6018
+810 6051
+810 6106
+821 6139
+832 6150
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+777 6007
+788 6018
+799 6051
+799 6106
+810 6139
+832 6150
+843 6150
+865 6139
+876 6106
+876 6040
+865 6007
+843 5996
+832 5996
+810 6007
+799 6040
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 6227
+799 6293
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 6238
+777 6293
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+645 6359
+799 6293
+843 6271
+865 6249
+876 6227
+876 6216
+865 6205
+854 6216
+865 6227
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 6205
+645 6271
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+645 6315
+645 6381
+2 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+2304 3913
+2306 3524
+2309 4474
+2311 3291
+2313 7013
+2316 9033
+2318 3717
+2320 3291
+2322 3448
+2325 5091
+2327 4710
+2329 6599
+2332 4035
+2334 3719
+2336 4855
+2339 4639
+2341 3552
+2343 3315
+2345 6618
+2348 4236
+2350 3461
+2352 3315
+2355 4468
+2357 3291
+2359 3290
+2362 7133
+2364 3407
+2366 3696
+2369 3303
+2371 3420
+2373 3547
+2375 4392
+2378 3882
+2380 4522
+2382 4110
+2385 3401
+2387 3305
+2389 4302
+2392 3348
+2394 3333
+2396 3612
+2398 6772
+2401 3641
+2403 3382
+2405 3291
+2408 3372
+2410 6432
+2412 4985
+2415 3597
+2417 3296
+2419 3333
+2422 4535
+2424 3727
+2426 3582
+2428 4334
+2431 4537
+2433 3596
+2435 3694
+2438 3670
+2440 3314
+2442 3422
+2445 3583
+2447 4524
+2449 6042
+2451 3508
+2454 5608
+2456 3589
+2458 4100
+2461 3564
+2463 3542
+2465 3358
+2468 3352
+2470 4227
+2472 3507
+2474 4068
+2477 3803
+2479 7461
+2481 3617
+2484 3290
+2486 3300
+2488 8524
+2491 4820
+2493 3837
+2495 3707
+2498 3437
+2500 3327
+2502 3611
+2504 3408
+2507 3612
+2509 3358
+2511 4195
+2514 4363
+2516 3475
+2518 4405
+2521 3567
+2523 4881
+2525 4280
+2527 3471
+2530 4632
+2532 3657
+2534 5213
+2537 3456
+2539 3871
+2541 3333
+2544 4181
+2546 3292
+2548 3431
+2551 3679
+2553 3438
+2555 3380
+2557 3949
+2560 4532
+2562 3297
+2564 3299
+2567 3928
+2569 3977
+2571 3713
+2574 3439
+2576 3399
+2578 3574
+2580 3476
+2583 3335
+2585 4452
+2587 4551
+2590 3425
+2592 4218
+2594 3802
+2597 5543
+2599 3419
+2601 3527
+2604 3591
+2606 4652
+2608 3292
+2610 3889
+2613 3290
+2615 3311
+2617 3466
+2620 3290
+2622 4131
+2624 3424
+2627 3579
+2629 3370
+2631 4303
+2633 3345
+2636 4516
+2638 3298
+2640 3295
+2643 3704
+2645 3527
+2647 3319
+2650 3422
+2652 3371
+2654 4250
+2657 3487
+2659 3350
+2661 3291
+2663 5719
+2666 3356
+2668 3791
+2670 3543
+2673 4164
+2675 3830
+2677 3444
+2680 3766
+2682 3478
+2684 3361
+2686 3699
+2689 6142
+2691 3290
+2693 4189
+2696 3300
+2698 4503
+2700 3360
+2703 4097
+2705 3483
+2707 4962
+2710 3476
+2712 4439
+2714 4188
+2716 5653
+2719 4309
+2721 3664
+2723 3400
+2726 4114
+2728 3937
+2730 3452
+2733 3402
+2735 4150
+2737 5020
+2739 3536
+2742 3608
+2744 3434
+2746 3295
+2749 3344
+2751 3983
+2753 3290
+2756 3329
+2758 3310
+2760 3415
+2762 3302
+2765 3848
+2767 3622
+2769 3606
+2772 3388
+2774 3577
+2776 3636
+2779 3513
+2781 3391
+2783 3715
+2786 3329
+2788 3290
+2790 4134
+2792 3314
+2795 3297
+2797 3290
+2799 3302
+2802 6602
+2804 3312
+2806 3412
+2809 3783
+2811 3685
+2813 6632
+2815 3365
+2818 3336
+2820 5241
+2822 3433
+2825 3311
+2827 3415
+2829 3297
+2832 4080
+2834 3578
+2836 3465
+2839 3290
+2841 4441
+2843 3290
+2845 3996
+2848 3377
+2850 3294
+2852 3465
+2855 3291
+2857 3408
+2859 3291
+2862 3319
+2864 3895
+2866 3833
+2868 3293
+2871 3323
+2873 3461
+2875 3294
+2878 3325
+2880 3295
+2882 3307
+2885 3317
+2887 3368
+2889 3378
+2892 3295
+2894 4232
+2896 3367
+2898 3290
+2901 3596
+2903 4308
+2905 3376
+2908 3510
+2910 3910
+2912 3295
+2915 3295
+2917 3335
+2919 3355
+2921 3365
+2924 3294
+2926 3405
+2928 3290
+2931 3308
+2933 3435
+2935 3355
+2938 3300
+2940 3404
+2942 3310
+2945 3294
+2947 3302
+2949 3291
+2951 4978
+2954 3340
+2956 3596
+2958 5354
+2961 3298
+2963 3772
+2965 3323
+2968 3370
+2970 3307
+2972 4018
+2974 3358
+2977 3868
+2979 3298
+2981 3297
+2984 3319
+2986 3293
+2988 3619
+2991 3410
+2993 3317
+2995 3414
+2998 3299
+3000 3347
+3002 3334
+3004 3313
+3007 3348
+3009 4841
+3011 3572
+3014 3489
+3016 3474
+3018 3386
+3021 4339
+3023 4032
+3025 3332
+3027 3309
+3030 3291
+3032 3290
+3034 3468
+3037 4515
+3039 3582
+3041 3292
+3044 3305
+3046 3649
+3048 3539
+3050 3689
+3053 3418
+3055 5165
+3057 3354
+3060 3372
+3062 3339
+3064 3438
+3067 3389
+3069 3505
+3071 3290
+3074 3363
+3076 3672
+3078 3394
+3080 3439
+3083 3311
+3085 3800
+3087 3378
+3090 3803
+3092 3518
+3094 3309
+3097 3290
+3099 4032
+3101 3295
+3103 3314
+3106 4187
+3108 3360
+3110 3539
+3113 3377
+3115 3460
+3117 3390
+3120 3290
+3122 3424
+3124 3417
+3127 3379
+3129 3355
+3131 3419
+3133 3618
+3136 3683
+3138 3338
+3140 3290
+3143 3825
+3145 3319
+3147 3369
+3150 3356
+3152 3760
+3154 3315
+3156 3290
+3159 3427
+3161 3373
+3163 3551
+3166 3394
+3168 3382
+3170 3567
+3173 3294
+3175 3290
+3177 3656
+3180 3349
+3182 3645
+3184 3290
+3186 3290
+3189 3313
+3191 3393
+3193 3290
+3196 3324
+3198 3330
+3200 3387
+3203 3435
+3205 3307
+3207 3475
+3209 3314
+3212 3589
+3214 3350
+3216 3309
+3219 3333
+3221 3304
+3223 3452
+3226 3291
+3228 3297
+3230 3290
+3233 3345
+3235 3375
+3237 3329
+3239 3461
+3242 3341
+3244 3477
+3246 3311
+3249 3580
+3251 3304
+3253 3334
+3256 3344
+3258 3342
+3260 3386
+3262 3449
+3265 3320
+3267 3300
+3269 3620
+3272 3420
+3274 3291
+3276 3430
+3279 3290
+3281 5045
+3283 3290
+3286 3364
+3288 3744
+3290 3315
+3292 3306
+3295 3330
+3297 3420
+3299 3292
+3302 3453
+3304 3437
+3306 3300
+3309 3361
+3311 3290
+3313 3906
+3315 3521
+3318 3426
+3320 3309
+3322 3450
+3325 3490
+3327 3693
+3329 3290
+3332 3435
+3334 4694
+3336 3654
+3338 3301
+3341 3770
+3343 3294
+3345 3317
+3348 3335
+3350 3451
+3352 3481
+3355 3303
+3357 3546
+3359 3430
+3362 3303
+3364 3466
+3366 3846
+3368 3461
+3371 3298
+3373 3304
+3375 3399
+3378 3350
+3380 3401
+3382 3291
+3385 3331
+3387 3706
+3389 3336
+3391 3450
+3394 3350
+3396 3539
+3398 3361
+3401 3695
+3403 3295
+3405 3565
+3408 3613
+3410 3325
+3412 3314
+3415 3575
+3417 3421
+3419 3330
+3421 3541
+3424 3477
+3426 3445
+3428 3294
+3431 3461
+3433 3332
+3435 3377
+3438 3429
+3440 3476
+3442 3311
+3444 3315
+3447 3372
+3449 3296
+3451 3383
+3454 3380
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+3454 3380
+3456 3576
+3458 3292
+3461 3706
+3463 3489
+3465 3316
+3468 3292
+3470 3366
+3472 3365
+3474 3312
+3477 3534
+3479 3372
+3481 3304
+3484 3903
+3486 3300
+3488 3296
+3491 3533
+3493 3295
+3495 3352
+3497 3494
+3500 3291
+3502 3303
+3504 3484
+3507 3298
+3509 3293
+3511 3296
+3514 3421
+3516 3378
+3518 3939
+3521 3295
+3523 3304
+3525 3296
+3527 3633
+3530 3325
+3532 3495
+3534 3307
+3537 3307
+3539 3558
+3541 3297
+3544 3307
+3546 3844
+3548 3924
+3550 3301
+3553 3296
+3555 3352
+3557 3320
+3560 3380
+3562 3295
+3564 3317
+3567 3290
+3569 3553
+3571 3325
+3574 3397
+3576 3377
+3578 3506
+3580 3309
+3583 3299
+3585 3417
+3587 3310
+3590 3354
+3592 3299
+3594 3637
+3597 3329
+3599 3308
+3601 3290
+3603 3582
+3606 3290
+3608 3305
+3610 3309
+3613 3294
+3615 3320
+3617 3290
+3620 3298
+3622 3529
+3624 3293
+3626 3292
+3629 3291
+3631 3308
+3633 3291
+3636 3313
+3638 3299
+3640 3291
+3643 3306
+3645 3296
+3647 3563
+3650 3740
+3652 3290
+3654 3291
+3656 3493
+3659 3338
+3661 3362
+3663 3386
+3666 3377
+3668 3324
+3670 3304
+3673 3380
+3675 3291
+3677 3544
+3679 3291
+3682 3773
+3684 3357
+3686 3309
+3689 3693
+3691 3330
+3693 3448
+3696 3631
+3698 3587
+3700 3391
+3703 3391
+3705 3293
+3707 3290
+3709 3359
+3712 3304
+3714 3290
+3716 3355
+3719 3290
+3721 3519
+3723 3290
+3726 3290
+3728 3439
+3730 3465
+3732 3294
+3735 3371
+3737 3553
+3739 3290
+3742 3321
+3744 3309
+3746 3336
+3749 3298
+3751 3298
+3753 3320
+3756 3388
+3758 3527
+3760 3616
+3762 3346
+3765 3348
+3767 3363
+3769 3479
+3772 3369
+3774 3419
+3776 3364
+3779 3343
+3781 3404
+3783 3302
+3785 3360
+3788 3637
+3790 3295
+3792 3369
+3795 3312
+3797 3297
+3799 3352
+3802 3393
+3804 3290
+3806 3462
+3809 3296
+3811 3335
+3813 3293
+3815 3298
+3818 3290
+3820 3391
+3822 3423
+3825 3330
+3827 3292
+3829 3290
+3832 3348
+3834 3302
+3836 3319
+3838 3394
+3841 3291
+3843 3291
+3845 3298
+3848 3310
+3850 3343
+3852 3355
+3855 3314
+3857 3637
+3859 3291
+3862 3387
+3864 3290
+3866 3358
+3868 3293
+3871 3318
+3873 3314
+3875 3297
+3878 3331
+3880 3347
+3882 3291
+3885 3394
+3887 3415
+3889 3293
+3891 3292
+3894 3298
+3896 3534
+3898 3309
+3901 3299
+3903 3293
+3905 3388
+3908 3290
+3910 3296
+3912 3291
+3914 3301
+3917 3551
+3919 3307
+3921 3353
+3924 3304
+3926 3290
+3928 3307
+3931 3290
+3933 3660
+3935 3305
+3938 3291
+3940 3533
+3942 3476
+3944 3326
+3947 3314
+3949 3306
+3951 3537
+3954 3290
+3956 3420
+3958 3328
+3961 3298
+3963 3442
+3965 3325
+3967 3368
+3970 3291
+3972 3375
+3974 3432
+3977 3345
+3979 3696
+3981 3515
+3984 3333
+3986 3362
+3988 3293
+3991 3300
+3993 3383
+3995 3405
+3997 3317
+4000 3385
+4002 3390
+4004 3290
+4007 3398
+4009 3353
+4011 3343
+4014 3384
+4016 3290
+4018 3294
+4020 3300
+4023 3502
+4025 3296
+4027 3297
+4030 3307
+4032 3290
+4034 3291
+4037 3298
+4039 3300
+4041 3396
+4044 3307
+4046 3398
+4048 3290
+4050 3290
+4053 3301
+4055 3611
+4057 3329
+4060 3370
+4062 3402
+4064 3333
+4067 3302
+4069 3401
+4071 3339
+4073 3301
+4076 3291
+4078 3319
+4080 3300
+4083 3297
+4085 3291
+4087 3434
+4090 3508
+4092 3313
+4094 3295
+4097 3316
+4099 3299
+4101 3434
+4103 3354
+4106 3517
+4108 3290
+4110 3610
+4113 3290
+4115 3290
+4117 3328
+4120 3321
+4122 3290
+4124 3430
+4126 3376
+4129 3303
+4131 3355
+4133 3290
+4136 3448
+4138 3419
+4140 3372
+4143 3339
+4145 3434
+4147 3351
+4150 3311
+4152 3320
+4154 3356
+4156 3290
+4159 3323
+4161 3375
+4163 3290
+4166 3300
+4168 3294
+4170 3290
+4173 3290
+4175 3301
+4177 3335
+4179 3298
+4182 3307
+4184 3435
+4186 3290
+4189 3291
+4191 3368
+4193 3290
+4196 3341
+4198 3374
+4200 3329
+4202 3365
+4205 3333
+4207 3328
+4209 3294
+4212 3318
+4214 3461
+4216 3354
+4219 3331
+4221 3290
+4223 3360
+4226 3290
+4228 3290
+4230 3344
+4232 3324
+4235 3293
+4237 3291
+4239 3318
+4242 3367
+4244 3331
+4246 3290
+4249 3316
+4251 3418
+4253 3428
+4255 3291
+4258 3485
+4260 3368
+4262 3300
+4265 3303
+4267 3322
+4269 3434
+4272 3319
+4274 3387
+4276 3308
+4279 3556
+4281 3291
+4283 3418
+4285 3301
+4288 3340
+4290 3340
+4292 3294
+4295 3294
+4297 3342
+4299 3347
+4302 3291
+4304 3290
+4306 3311
+4308 3295
+4311 3314
+4313 3322
+4315 3486
+4318 3291
+4320 3309
+4322 3316
+4325 3329
+4327 3290
+4329 3338
+4332 3350
+4334 3290
+4336 3298
+4338 3290
+4341 3297
+4343 3363
+4345 3439
+4348 3304
+4350 3295
+4352 3307
+4355 3454
+4357 3290
+4359 3291
+4361 3301
+4364 3327
+4366 3295
+4368 3301
+4371 3296
+4373 3485
+4375 3380
+4378 3291
+4380 3290
+4382 3294
+4385 3371
+4387 3333
+4389 3295
+4391 3290
+4394 3399
+4396 3327
+4398 3407
+4401 3359
+4403 3290
+4405 3293
+4408 3305
+4410 3296
+4412 3319
+4414 3338
+4417 3290
+4419 3303
+4421 3290
+4424 3290
+4426 3381
+4428 3296
+4431 3290
+4433 3293
+4435 3293
+4438 3293
+4440 3376
+4442 3290
+4444 3291
+4447 3290
+4449 3351
+4451 3302
+4454 3304
+4456 3321
+4458 3320
+4461 3290
+4463 3291
+4465 3290
+4467 3321
+4470 3433
+4472 3290
+4474 3303
+4477 3347
+4479 3345
+4481 3346
+4484 3290
+4486 3301
+4488 3295
+4490 3311
+4493 3341
+4495 3295
+4497 3294
+4500 3303
+4502 3322
+4504 3302
+4507 3295
+4509 3290
+4511 3299
+4514 3337
+4516 3396
+4518 3290
+4520 3294
+4523 3294
+4525 3319
+4527 3359
+4530 3570
+4532 3309
+4534 3309
+4537 3290
+4539 3321
+4541 3290
+4543 3294
+4546 3291
+4548 3290
+4550 3426
+4553 3290
+4555 3290
+4557 3290
+4560 3305
+4562 3304
+4564 3299
+4567 3291
+4569 3347
+4571 3293
+4573 3303
+4576 3295
+4578 3324
+4580 3321
+4583 3330
+4585 3291
+4587 3294
+4590 3319
+4592 3331
+4594 3380
+4596 3291
+4599 3290
+4601 3290
+4603 3391
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+4603 3391
+4606 3290
+4608 3326
+4610 3365
+4613 3359
+4615 3319
+4617 3290
+4620 3293
+4622 3295
+4624 3290
+4626 3292
+4629 3311
+4631 3292
+4633 3385
+4636 3309
+4638 3318
+4640 3290
+4643 3305
+4645 3309
+4647 3332
+4649 3294
+4652 3297
+4654 3331
+4656 3320
+4659 3294
+4661 3299
+4663 3352
+4666 3334
+4668 3290
+4670 3291
+4673 3307
+4675 3306
+4677 3326
+4679 3291
+4682 3312
+4684 3316
+4686 3322
+4689 3337
+4691 3307
+4693 3292
+4696 3376
+4698 3373
+4700 3291
+4702 3395
+4705 3290
+4707 3417
+4709 3306
+4712 3367
+4714 3300
+4716 3297
+4719 3299
+4721 3295
+4723 3304
+4726 3292
+4728 3305
+4730 3294
+4732 3293
+4735 3290
+4737 3294
+4739 3305
+4742 3290
+4744 3290
+4746 3290
+4749 3292
+4751 3307
+4753 3304
+4755 3290
+4758 3290
+4760 3290
+4762 3290
+4765 3290
+4767 3290
+4769 3290
+4772 3312
+4774 3296
+4776 3292
+4778 3350
+4781 3310
+4783 3301
+4785 3304
+4788 3338
+4790 3305
+4792 3306
+4795 3332
+4797 3290
+4799 3322
+4802 3295
+4804 3293
+4806 3291
+4808 3304
+4811 3290
+4813 3291
+4815 3302
+4818 3318
+4820 3310
+4822 3458
+4825 3317
+4827 3290
+4829 3290
+4831 3316
+4834 3305
+4836 3311
+4838 3290
+4841 3294
+4843 3294
+4845 3294
+4848 3292
+4850 3290
+4852 3290
+4855 3290
+4857 3293
+4859 3340
+4861 3295
+4864 3295
+4866 3296
+4868 3306
+4871 3344
+4873 3301
+4875 3292
+4878 3326
+4880 3290
+4882 3337
+4884 3301
+4887 3339
+4889 3295
+4891 3311
+4894 3300
+4896 3290
+4898 3290
+4901 3290
+4903 3311
+4905 3293
+4908 3316
+4910 3295
+4912 3302
+4914 3291
+4917 3301
+4919 3314
+4921 3306
+4924 3291
+4926 3292
+4928 3290
+4931 3293
+4933 3309
+4935 3290
+4937 3322
+4940 3316
+4942 3295
+4944 3290
+4947 3294
+4949 3403
+4951 3290
+4954 3322
+4956 3291
+4958 3307
+4961 3290
+4963 3295
+4965 3314
+4967 3367
+4970 3291
+4972 3294
+4974 3290
+4977 3290
+4979 3290
+4981 3294
+4984 3294
+4986 3314
+4988 3300
+4990 3294
+4993 3305
+4995 3299
+4997 3295
+5000 3342
+5002 3309
+5004 3328
+5007 3293
+5009 3295
+5011 3310
+5014 3310
+5016 3290
+5018 3290
+5020 3325
+5023 3292
+5025 3290
+5027 3291
+5030 3294
+5032 3312
+5034 3291
+5037 3293
+5039 3317
+5041 3290
+5043 3290
+5046 3294
+5048 3304
+5050 3290
+5053 3290
+5055 3290
+5057 3290
+5060 3290
+5062 3388
+5064 3308
+5066 3305
+5069 3290
+5071 3290
+5073 3292
+5076 3292
+5078 3290
+5080 3290
+5083 3297
+5085 3292
+5087 3406
+5090 3307
+5092 3317
+5094 3309
+5096 3313
+5099 3290
+5101 3290
+5103 3320
+5106 3292
+5108 3290
+5110 3304
+5113 3327
+5115 3290
+5117 3345
+5119 3291
+5122 3291
+5124 3290
+5126 3300
+5129 3292
+5131 3298
+5133 3298
+5136 3291
+5138 3310
+5140 3295
+5143 3297
+5145 3310
+5147 3353
+5149 3290
+5152 3307
+5154 3291
+5156 3297
+5159 3291
+5161 3295
+5163 3306
+5166 3291
+5168 3291
+5170 3290
+5172 3290
+5175 3303
+5177 3290
+5179 3291
+5182 3296
+5184 3317
+5186 3309
+5189 3306
+5191 3332
+5193 3320
+5196 3293
+5198 3292
+5200 3292
+5202 3296
+5205 3296
+5207 3309
+5209 3326
+5212 3299
+5214 3328
+5216 3303
+5219 3296
+5221 3314
+5223 3290
+5225 3292
+5228 3302
+5230 3307
+5232 3296
+5235 3318
+5237 3323
+5239 3313
+5242 3321
+5244 3292
+5246 3295
+5249 3290
+5251 3301
+5253 3301
+5255 3295
+5258 3292
+5260 3311
+5262 3290
+5265 3295
+5267 3290
+5269 3290
+5272 3291
+5274 3295
+5276 3306
+5278 3299
+5281 3290
+5283 3296
+5285 3302
+5288 3303
+5290 3328
+5292 3323
+5295 3300
+5297 3297
+5299 3290
+5302 3290
+5304 3290
+5306 3290
+5308 3290
+5311 3318
+5313 3292
+5315 3296
+5318 3324
+5320 3318
+5322 3299
+5325 3291
+5327 3291
+5329 3296
+5331 3296
+5334 3290
+5336 3312
+5338 3312
+5341 3310
+5343 3306
+5345 3290
+5348 3301
+5350 3294
+5352 3290
+5354 3311
+5357 3306
+5359 3312
+5361 3290
+5364 3295
+5366 3290
+5368 3290
+5371 3290
+5373 3319
+5375 3292
+5378 3297
+5380 3295
+5382 3295
+5384 3308
+5387 3292
+5389 3335
+5391 3290
+5394 3290
+5396 3290
+5398 3290
+5401 3290
+5403 3316
+5405 3294
+5407 3290
+5410 3290
+5412 3294
+5414 3320
+5417 3299
+5419 3307
+5421 3290
+5424 3290
+5426 3290
+5428 3294
+5431 3301
+5433 3290
+5435 3290
+5437 3290
+5440 3298
+5442 3296
+5444 3291
+5447 3306
+5449 3303
+5451 3303
+5454 3312
+5456 3312
+5458 3333
+5460 3318
+5463 3295
+5465 3308
+5467 3292
+5470 3293
+5472 3293
+5474 3292
+5477 3367
+5479 3306
+5481 3290
+5484 3290
+5486 3292
+5488 3295
+5490 3291
+5493 3291
+5495 3293
+5497 3290
+5500 3295
+5502 3290
+5504 3292
+5507 3290
+5509 3294
+5511 3344
+5513 3301
+5516 3290
+5518 3290
+5520 3297
+5523 3295
+5525 3290
+5527 3290
+5530 3294
+5532 3332
+5534 3290
+5537 3292
+5539 3342
+5541 3303
+5543 3290
+5546 3295
+5548 3292
+5550 3290
+5553 3290
+5555 3290
+5557 3290
+5560 3299
+5562 3332
+5564 3301
+5566 3301
+5569 3304
+5571 3300
+5573 3290
+5576 3290
+5578 3307
+5580 3302
+5583 3299
+5585 3299
+5587 3299
+5590 3290
+5592 3290
+5594 3290
+5596 3296
+5599 3296
+5601 3292
+5603 3290
+5606 3310
+5608 3290
+5610 3293
+5613 3292
+5615 3306
+5617 3297
+5619 3290
+5622 3296
+5624 3295
+5626 3292
+5629 3291
+5631 3305
+5633 3290
+5636 3293
+5638 3291
+5640 3295
+5642 3292
+5645 3295
+5647 3294
+5649 3298
+5652 3344
+5654 3298
+5656 3290
+5659 3290
+5661 3290
+5663 3290
+5666 3298
+5668 3291
+5670 3298
+5672 3292
+5675 3298
+5677 3294
+5679 3290
+5682 3294
+5684 3294
+5686 3294
+5689 3291
+5691 3291
+5693 3291
+5695 3290
+5698 3299
+5700 3298
+5702 3298
+5705 3292
+5707 3293
+5709 3290
+5712 3297
+5714 3295
+5716 3291
+5719 3290
+5721 3305
+5723 3300
+5725 3290
+5728 3290
+5730 3292
+5732 3291
+5735 3304
+5737 3311
+5739 3309
+5742 3291
+5744 3290
+5746 3290
+5748 3292
+5751 3294
+5753 3294
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+5753 3294
+5755 3296
+5758 3346
+5760 3290
+5762 3292
+5765 3292
+5767 3291
+5769 3291
+5772 3290
+5774 3290
+5776 3290
+5778 3290
+5781 3291
+5783 3290
+5785 3293
+5788 3298
+5790 3312
+5792 3302
+5795 3296
+5797 3290
+5799 3291
+5801 3290
+5804 3293
+5806 3291
+5808 3290
+5811 3296
+5813 3296
+5815 3292
+5818 3296
+5820 3291
+5822 3290
+5825 3291
+5827 3301
+5829 3292
+5831 3312
+5834 3296
+5836 3290
+5838 3290
+5841 3290
+5843 3290
+5845 3294
+5848 3290
+5850 3290
+5852 3291
+5854 3294
+5857 3296
+5859 3290
+5861 3303
+5864 3293
+5866 3302
+5868 3290
+5871 3309
+5873 3305
+5875 3300
+5878 3303
+5880 3300
+5882 3295
+5884 3291
+5887 3291
+5889 3290
+5891 3290
+5894 3310
+5896 3314
+5898 3291
+5901 3291
+5903 3298
+5905 3293
+5907 3290
+5910 3294
+5912 3296
+5914 3290
+5917 3292
+5919 3291
+5921 3290
+5924 3290
+5926 3292
+5928 3295
+5930 3290
+5933 3298
+5935 3298
+5937 3291
+5940 3290
+5942 3290
+5944 3290
+5947 3305
+5949 3305
+5951 3305
+5954 3294
+5956 3290
+5958 3294
+5960 3298
+5963 3293
+5965 3305
+5967 3292
+5970 3292
+5972 3306
+5974 3293
+5977 3292
+5979 3295
+5981 3290
+5983 3290
+5986 3290
+5988 3305
+5990 3293
+5993 3298
+5995 3298
+5997 3290
+6000 3290
+6002 3296
+6004 3290
+6007 3307
+6009 3300
+6011 3300
+6013 3290
+6016 3300
+6018 3299
+6020 3294
+6023 3297
+6025 3292
+6027 3297
+6030 3290
+6032 3290
+6034 3301
+6036 3305
+6039 3295
+6041 3297
+6043 3297
+6046 3297
+6048 3290
+6050 3293
+6053 3293
+6055 3290
+6057 3292
+6060 3291
+6062 3314
+6064 3304
+6066 3290
+6069 3290
+6071 3302
+6073 3291
+6076 3291
+6078 3303
+6080 3303
+6083 3290
+6085 3292
+6087 3292
+6089 3290
+6092 3290
+6094 3291
+6096 3291
+6099 3290
+6101 3290
+6103 3290
+6106 3290
+6108 3290
+6110 3290
+6113 3292
+6115 3292
+6117 3291
+6119 3291
+6122 3296
+6124 3298
+6126 3307
+6129 3307
+6131 3291
+6133 3290
+6136 3294
+6138 3294
+6140 3290
+6142 3297
+6145 3293
+6147 3296
+6149 3290
+6152 3290
+6154 3292
+6156 3290
+6159 3290
+6161 3290
+6163 3299
+6166 3290
+6168 3290
+6170 3292
+6172 3290
+6175 3308
+6177 3290
+6179 3290
+6182 3290
+6184 3290
+6186 3290
+6189 3290
+6191 3290
+6193 3316
+6195 3293
+6198 3290
+6200 3295
+6202 3295
+6205 3297
+6207 3298
+6209 3294
+6212 3294
+6214 3294
+6216 3294
+6218 3294
+6221 3291
+6223 3290
+6225 3291
+6228 3299
+6230 3295
+6232 3290
+6235 3291
+6237 3290
+6239 3290
+6242 3291
+6244 3291
+6246 3292
+6248 3290
+6251 3290
+6253 3290
+6255 3290
+6258 3290
+6260 3290
+6262 3306
+6265 3295
+6267 3290
+6269 3298
+6271 3291
+6274 3290
+6276 3290
+6278 3290
+6281 3290
+6283 3291
+6285 3290
+6288 3290
+6290 3290
+6292 3290
+6295 3290
+6297 3291
+6299 3291
+6301 3301
+6304 3290
+6306 3296
+6308 3290
+6311 3290
+6313 3293
+6315 3293
+6318 3293
+6320 3294
+6322 3290
+6324 3290
+6327 3290
+6329 3290
+6331 3290
+6334 3290
+6336 3290
+6338 3290
+6341 3290
+6343 3290
+6345 3290
+6348 3294
+6350 3290
+6352 3290
+6354 3290
+6357 3292
+6359 3290
+6361 3290
+6364 3290
+6366 3290
+6368 3290
+6371 3298
+6373 3294
+6375 3293
+6377 3293
+6380 3295
+6382 3295
+6384 3290
+6387 3290
+6389 3291
+6391 3293
+6394 3290
+6396 3290
+6398 3308
+6401 3290
+6403 3292
+6405 3292
+6407 3292
+6410 3290
+6412 3292
+6414 3292
+6417 3292
+6419 3292
+6421 3293
+6424 3290
+6426 3290
+6428 3293
+6430 3293
+6433 3290
+6435 3290
+6437 3290
+6440 3290
+6442 3290
+6444 3290
+6447 3297
+6449 3290
+6451 3290
+6454 3294
+6456 3291
+6458 3290
+6460 3293
+6463 3294
+6465 3290
+6467 3290
+6470 3291
+6472 3291
+6474 3291
+6477 3294
+6479 3290
+6481 3291
+6483 3290
+6486 3291
+6488 3291
+6490 3291
+6493 3297
+6495 3291
+6497 3292
+6500 3292
+6502 3290
+6504 3290
+6506 3291
+6509 3290
+6511 3292
+6513 3292
+6516 3290
+6518 3290
+6520 3290
+6523 3290
+6525 3292
+6527 3290
+6530 3290
+6532 3291
+6534 3290
+6536 3290
+6539 3293
+6541 3290
+6543 3298
+6546 3294
+6548 3293
+6550 3294
+6553 3291
+6555 3290
+6557 3290
+6559 3290
+6562 3296
+6564 3296
+6566 3290
+6569 3290
+6571 3290
+6573 3290
+6576 3290
+6578 3291
+6580 3290
+6583 3295
+6585 3290
+6587 3290
+6589 3290
+6592 3290
+6594 3291
+6596 3290
+6599 3290
+6601 3290
+6603 3290
+6606 3301
+6608 3300
+6610 3300
+6612 3290
+6615 3290
+6617 3290
+6619 3290
+6622 3290
+6624 3292
+6626 3290
+6629 3298
+6631 3290
+6633 3293
+6636 3293
+6638 3293
+6640 3293
+6642 3290
+6645 3290
+6647 3290
+6649 3291
+6652 3291
+6654 3290
+6656 3290
+6659 3290
+6661 3290
+6663 3290
+6665 3290
+6668 3290
+6670 3290
+6672 3290
+6675 3297
+6677 3292
+6679 3292
+6682 3292
+6684 3290
+6686 3290
+6689 3291
+6691 3291
+6693 3295
+6695 3295
+6698 3290
+6700 3290
+6702 3290
+6705 3290
+6707 3290
+6709 3290
+6712 3298
+6714 3291
+6716 3290
+6718 3290
+6721 3290
+6723 3290
+6725 3290
+6728 3290
+6730 3291
+6732 3291
+6735 3291
+6737 3291
+6739 3290
+6742 3290
+6744 3290
+6746 3290
+6748 3290
+6751 3290
+6753 3290
+6755 3290
+6758 3290
+6760 3290
+6762 3291
+6765 3290
+6767 3290
+6769 3290
+6771 3290
+6774 3290
+6776 3290
+6778 3290
+6781 3290
+6783 3290
+6785 3293
+6788 3293
+6790 3294
+6792 3297
+6794 3297
+6797 3290
+6799 3290
+6801 3290
+6804 3290
+6806 3290
+6808 3292
+6811 3291
+6813 3291
+6815 3291
+6818 3291
+6820 3290
+6822 3290
+6824 3290
+6827 3291
+6829 3291
+6831 3290
+6834 3290
+6836 3290
+6838 3290
+6841 3290
+6843 3290
+6845 3295
+6847 3290
+6850 3290
+6852 3290
+6854 3290
+6857 3290
+6859 3291
+6861 3290
+6864 3290
+6866 3290
+6868 3290
+6871 3290
+6873 3290
+6875 3290
+6877 3291
+6880 3291
+6882 3291
+6884 3291
+6887 3291
+6889 3292
+6891 3290
+6894 3292
+6896 3290
+6898 3290
+6900 3290
+6903 3290
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+6903 3290
+6905 3290
+6907 3293
+6910 3290
+6912 3290
+6914 3290
+6917 3290
+6919 3290
+6921 3290
+6924 3291
+6926 3290
+6928 3290
+6930 3290
+6933 3290
+6935 3290
+6937 3290
+6940 3290
+6942 3290
+6944 3290
+6947 3290
+6949 3292
+6951 3292
+6953 3290
+6956 3290
+6958 3290
+6960 3290
+6963 3290
+6965 3290
+6967 3295
+6970 3290
+6972 3292
+6974 3291
+6977 3293
+6979 3291
+6981 3290
+6983 3290
+6986 3291
+6988 3292
+6990 3292
+6993 3291
+6995 3291
+6997 3290
+7000 3290
+7002 3290
+7004 3290
+7006 3290
+7009 3290
+7011 3290
+7013 3290
+7016 3291
+7018 3291
+7020 3291
+7023 3291
+7025 3292
+7027 3291
+7030 3290
+7032 3290
+7034 3290
+7036 3290
+7039 3290
+7041 3290
+7043 3290
+7046 3290
+7048 3290
+7050 3290
+7053 3290
+7055 3290
+7057 3291
+7059 3292
+7062 3290
+7064 3290
+7066 3290
+7069 3290
+7071 3291
+7073 3290
+7076 3293
+7078 3290
+7080 3291
+7082 3290
+7085 3290
+7087 3290
+7089 3290
+7092 3294
+7094 3294
+7096 3291
+7099 3291
+7101 3291
+7103 3291
+7106 3291
+7108 3291
+7110 3290
+7112 3292
+7115 3292
+7117 3290
+7119 3290
+7122 3290
+7124 3290
+7126 3290
+7129 3290
+7131 3290
+7133 3290
+7135 3290
+7138 3291
+7140 3290
+7142 3290
+7145 3290
+7147 3290
+7149 3290
+7152 3290
+7154 3290
+7156 3290
+7159 3290
+7161 3290
+7163 3290
+7165 3290
+7168 3290
+7170 3292
+7172 3290
+7175 3290
+7177 3290
+7179 3290
+7182 3290
+7184 3291
+7186 3292
+7188 3292
+7191 3292
+7193 3292
+7195 3290
+7198 3290
+7200 3290
+7202 3292
+7205 3291
+7207 3290
+7209 3290
+7212 3290
+7214 3291
+7216 3291
+7218 3291
+7221 3291
+7223 3291
+7225 3290
+7228 3290
+7230 3290
+7232 3290
+7235 3292
+7237 3292
+7239 3290
+7241 3290
+7244 3290
+7246 3290
+7248 3290
+7251 3290
+7253 3290
+7255 3290
+7258 3290
+7260 3290
+7262 3290
+7265 3290
+7267 3290
+7269 3290
+7271 3290
+7274 3290
+7276 3292
+7278 3292
+7281 3291
+7283 3296
+7285 3292
+7288 3292
+7290 3292
+7292 3292
+7294 3290
+7297 3290
+7299 3290
+7301 3290
+7304 3290
+7306 3290
+7308 3290
+7311 3290
+7313 3292
+7315 3290
+7318 3290
+7320 3290
+7322 3290
+7324 3290
+7327 3290
+7329 3290
+7331 3290
+7334 3290
+7336 3290
+7338 3291
+7341 3291
+7343 3292
+7345 3290
+7347 3290
+7350 3290
+7352 3290
+7354 3290
+7357 3290
+7359 3290
+7361 3290
+7364 3290
+7366 3290
+7368 3290
+7370 3290
+7373 3290
+7375 3290
+7377 3290
+7380 3290
+7382 3290
+7384 3290
+7387 3290
+7389 3293
+7391 3294
+7394 3290
+7396 3290
+7398 3290
+7400 3290
+7403 3290
+7405 3290
+7407 3290
+7410 3290
+7412 3290
+7414 3291
+7417 3291
+7419 3291
+7421 3290
+7423 3290
+7426 3290
+7428 3291
+7430 3291
+7433 3291
+7435 3293
+7437 3291
+7440 3291
+7442 3291
+7444 3291
+7447 3291
+7449 3290
+7451 3290
+7453 3290
+7456 3290
+7458 3290
+7460 3290
+7463 3290
+7465 3290
+7467 3290
+7470 3290
+7472 3290
+7474 3290
+7476 3290
+7479 3290
+7481 3290
+7483 3290
+7486 3290
+7488 3290
+7490 3290
+7493 3290
+7495 3290
+7497 3292
+7500 3295
+7502 3292
+7504 3292
+7506 3292
+7509 3291
+7511 3291
+7513 3291
+7516 3290
+7518 3290
+7520 3290
+7523 3290
+7525 3290
+7527 3290
+7529 3290
+7532 3290
+7534 3290
+7536 3291
+7539 3291
+7541 3291
+7543 3290
+7546 3290
+7548 3290
+7550 3290
+7553 3291
+7555 3290
+7557 3290
+7559 3290
+7562 3290
+7564 3290
+7566 3290
+7569 3290
+7571 3290
+7573 3291
+7576 3291
+7578 3291
+7580 3291
+7582 3290
+7585 3290
+7587 3290
+7589 3291
+7592 3290
+7594 3290
+7596 3290
+7599 3290
+7601 3290
+7603 3290
+7606 3290
+7608 3290
+7610 3290
+7612 3290
+7615 3290
+7617 3290
+7619 3290
+7622 3290
+7624 3290
+7626 3290
+7629 3290
+7631 3290
+7633 3290
+7635 3290
+7638 3290
+7640 3290
+7642 3290
+7645 3290
+7647 3290
+7649 3290
+7652 3290
+7654 3290
+7656 3290
+7658 3290
+7661 3290
+7663 3290
+7665 3290
+7668 3290
+7670 3290
+7672 3290
+7675 3291
+7677 3291
+7679 3291
+7682 3290
+7684 3290
+7686 3290
+7688 3292
+7691 3294
+7693 3294
+7695 3290
+7698 3290
+7700 3290
+7702 3290
+7705 3290
+7707 3290
+7709 3290
+7711 3291
+7714 3290
+7716 3290
+7718 3290
+7721 3290
+7723 3290
+7725 3290
+7728 3290
+7730 3290
+7732 3290
+7735 3290
+7737 3290
+7739 3290
+7741 3290
+7744 3290
+7746 3290
+7748 3290
+7751 3290
+7753 3290
+7755 3290
+7758 3290
+7760 3290
+7762 3290
+7764 3290
+7767 3290
+7769 3290
+7771 3290
+7774 3290
+7776 3290
+7778 3290
+7781 3290
+7783 3290
+7785 3290
+7788 3290
+7790 3290
+7792 3290
+7794 3290
+7797 3290
+7799 3290
+7801 3290
+7804 3291
+7806 3291
+7808 3290
+7811 3290
+7813 3290
+7815 3290
+7817 3290
+7820 3290
+7822 3290
+7824 3290
+7827 3290
+7829 3290
+7831 3290
+7834 3290
+7836 3290
+7838 3290
+7841 3290
+7843 3290
+7845 3290
+7847 3290
+7850 3290
+7852 3290
+7854 3290
+7857 3290
+7859 3290
+7861 3290
+7864 3290
+7866 3290
+7868 3290
+7870 3290
+7873 3290
+7875 3290
+7877 3290
+7880 3291
+7882 3291
+7884 3291
+7887 3290
+7889 3290
+7891 3290
+7894 3290
+7896 3291
+7898 3290
+7900 3290
+7903 3290
+7905 3290
+7907 3290
+7910 3290
+7912 3291
+7914 3290
+7917 3290
+7919 3290
+7921 3291
+7923 3291
+7926 3291
+7928 3290
+7930 3290
+7933 3290
+7935 3290
+7937 3290
+7940 3290
+7942 3290
+7944 3290
+7946 3290
+7949 3290
+7951 3290
+7953 3290
+7956 3290
+7958 3290
+7960 3290
+7963 3290
+7965 3290
+7967 3290
+7970 3290
+7972 3290
+7974 3290
+7976 3290
+7979 3290
+7981 3290
+7983 3290
+7986 3290
+7988 3290
+7990 3290
+7993 3290
+7995 3290
+7997 3290
+7999 3290
+8002 3290
+8004 3290
+8006 3290
+8009 3290
+8011 3290
+8013 3290
+8016 3290
+8018 3290
+8020 3290
+8023 3290
+8025 3290
+8027 3290
+8029 3290
+8032 3290
+8034 3290
+8036 3290
+8039 3290
+8041 3290
+8043 3290
+8046 3290
+8048 3290
+8050 3290
+8052 3290
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 274
+8052 3290
+8055 3290
+8057 3290
+8059 3290
+8062 3290
+8064 3290
+8066 3290
+8069 3290
+8071 3290
+8073 3290
+8076 3290
+8078 3290
+8080 3290
+8082 3290
+8085 3290
+8087 3290
+8089 3290
+8092 3290
+8094 3290
+8096 3290
+8099 3290
+8101 3290
+8103 3290
+8105 3290
+8108 3290
+8110 3290
+8112 3290
+8115 3290
+8117 3290
+8119 3290
+8122 3290
+8124 3290
+8126 3290
+8129 3290
+8131 3290
+8133 3290
+8135 3290
+8138 3290
+8140 3290
+8142 3290
+8145 3290
+8147 3290
+8149 3290
+8152 3290
+8154 3290
+8156 3290
+8158 3290
+8161 3290
+8163 3290
+8165 3290
+8168 3290
+8170 3290
+8172 3290
+8175 3290
+8177 3290
+8179 3290
+8182 3290
+8184 3290
+8186 3290
+8188 3290
+8191 3290
+8193 3290
+8195 3290
+8198 3290
+8200 3290
+8202 3290
+8205 3290
+8207 3290
+8209 3290
+8211 3290
+8214 3290
+8216 3290
+8218 3290
+8221 3290
+8223 3290
+8225 3290
+8228 3290
+8230 3290
+8232 3290
+8234 3290
+8237 3290
+8239 3290
+8241 3290
+8244 3290
+8246 3290
+8248 3290
+8251 3290
+8253 3290
+8255 3290
+8258 3290
+8260 3290
+8262 3290
+8264 3290
+8267 3290
+8269 3290
+8271 3290
+8274 3290
+8276 3290
+8278 3290
+8281 3290
+8283 3290
+8285 3290
+8287 3290
+8290 3290
+8292 3290
+8294 3290
+8297 3290
+8299 3290
+8301 3290
+8304 3290
+8306 3290
+8308 3290
+8311 3290
+8313 3290
+8315 3290
+8317 3290
+8320 3290
+8322 3290
+8324 3290
+8327 3290
+8329 3290
+8331 3290
+8334 3290
+8336 3290
+8338 3290
+8340 3290
+8343 3290
+8345 3290
+8347 3290
+8350 3290
+8352 3290
+8354 3290
+8357 3290
+8359 3290
+8361 3290
+8364 3290
+8366 3290
+8368 3290
+8370 3290
+8373 3290
+8375 3290
+8377 3290
+8380 3290
+8382 3290
+8384 3290
+8387 3290
+8389 3290
+8391 3290
+8393 3290
+8396 3290
+8398 3290
+8400 3290
+8403 3290
+8405 3290
+8407 3290
+8410 3290
+8412 3290
+8414 3290
+8417 3290
+8419 3290
+8421 3290
+8423 3290
+8426 3290
+8428 3290
+8430 3290
+8433 3290
+8435 3290
+8437 3290
+8440 3290
+8442 3290
+8444 3290
+8446 3290
+8449 3290
+8451 3290
+8453 3290
+8456 3290
+8458 3290
+8460 3290
+8463 3290
+8465 3290
+8467 3290
+8470 3290
+8472 3290
+8474 3290
+8476 3290
+8479 3290
+8481 3290
+8483 3290
+8486 3290
+8488 3290
+8490 3290
+8493 3290
+8495 3290
+8497 3290
+8499 3290
+8502 3290
+8504 3290
+8506 3290
+8509 3290
+8511 3290
+8513 3290
+8516 3290
+8518 3290
+8520 3290
+8522 3290
+8525 3290
+8527 3290
+8529 3290
+8532 3290
+8534 3290
+8536 3290
+8539 3290
+8541 3290
+8543 3290
+8546 3290
+8548 3290
+8550 3290
+8552 3290
+8555 3290
+8557 3290
+8559 3290
+8562 3290
+8564 3290
+8566 3290
+8569 3290
+8571 3290
+8573 3290
+8575 3290
+8578 3290
+8580 3290
+8582 3290
+8585 3290
+8587 3290
+8589 3290
+8592 3290
+8594 3290
+8596 3290
+8599 3290
+8601 3290
+8603 3290
+8605 3290
+8608 3290
+8610 3290
+8612 3290
+8615 3290
+8617 3290
+8619 3290
+8622 3290
+8624 3290
+8626 3290
+8628 3290
+8631 3290
+8633 3290
+8635 3290
+8638 3290
+8640 3290
+8642 3290
+8645 3290
+8647 3290
+8649 3290
+8652 3290
+8654 3290
+8656 3290
+8658 3290
+8661 3290
+8663 3290
+8665 3290
+8668 3290
+8670 3290
+8672 3290
+8675 3290
+8677 3290
+8679 3290
+8681 3290
+274 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/siman-test.eps b/gsl-1.9/doc/siman-test.eps
new file mode 100644
index 0000000..0b12a31
--- /dev/null
+++ b/gsl-1.9/doc/siman-test.eps
@@ -0,0 +1,11278 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: GNU libplot drawing library 4.1
+%%Title: PostScript plot
+%%CreationDate: Wed Dec 20 22:05:02 2006
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 1
+%%Pages: 1
+%%PageOrder: Ascend
+%%Orientation: Portrait
+%%BoundingBox: 62 177 500 576
+%%DocumentNeededResources:
+%%DocumentSuppliedResources: procset GNU_libplot 1.0 0
+%%EndComments
+
+%%BeginDefaults
+%%PageResources:
+%%EndDefaults
+
+%%BeginProlog
+%%EndProlog
+
+%%BeginSetup
+/DrawDict 50 dict def
+DrawDict begin
+%%BeginResource procset GNU_libplot 1.0 0
+/none null def
+/numGraphicParameters 17 def
+/stringLimit 65535 def
+/arrowHeight 8 def
+/eoFillRule true def
+
+/Begin { save numGraphicParameters dict begin } def
+/End { end restore } def
+
+/SetB {
+dup type /nulltype eq {
+pop
+false /brushRightArrow idef
+false /brushLeftArrow idef
+true /brushNone idef
+} {
+/brushDashOffset idef
+/brushDashArray idef
+0 ne /brushRightArrow idef
+0 ne /brushLeftArrow idef
+/brushWidth idef
+false /brushNone idef
+} ifelse
+} def
+
+/SetCFg {
+/fgblue idef
+/fggreen idef
+/fgred idef
+} def
+
+/SetCBg {
+/bgblue idef
+/bggreen idef
+/bgred idef
+} def
+
+/SetF {
+/printSize idef
+/printFont idef
+} def
+
+/SetP {
+dup type /nulltype eq {
+pop true /patternNone idef
+} {
+/patternGrayLevel idef
+patternGrayLevel -1 eq {
+/patternString idef
+} if
+false /patternNone idef
+} ifelse
+} def
+
+/BSpl {
+0 begin
+storexyn
+newpath
+n 1 gt {
+0 0 0 0 0 0 1 1 true subspline
+n 2 gt {
+0 0 0 0 1 1 2 2 false subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 2 copy false subspline
+} if
+n 2 sub dup n 1 sub dup 2 copy 2 copy false subspline
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Circ {
+newpath
+0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/CBSpl {
+0 begin
+dup 2 gt {
+storexyn
+newpath
+n 1 sub dup 0 0 1 1 2 2 true subspline
+1 1 n 3 sub {
+/i exch def
+i 1 sub dup i dup i 1 add dup i 2 add dup false subspline
+} for
+n 3 sub dup n 2 sub dup n 1 sub dup 0 0 false subspline
+n 2 sub dup n 1 sub dup 0 0 1 1 false subspline
+patternNone not { ifill } if
+brushNone not { istroke } if
+} {
+Poly
+} ifelse
+end
+} dup 0 4 dict put def
+
+/Elli {
+0 begin
+newpath
+4 2 roll
+translate
+scale
+0 0 1 0 360 arc
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 1 dict put def
+
+/Line {
+0 begin
+2 storexyn
+newpath
+x 0 get y 0 get moveto
+x 1 get y 1 get lineto
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+0 0 1 1 rightarrow
+end
+} dup 0 4 dict put def
+
+/MLine {
+0 begin
+storexyn
+newpath
+n 1 gt {
+x 0 get y 0 get moveto
+1 1 n 1 sub {
+/i exch def
+x i get y i get lineto
+} for
+patternNone not brushLeftArrow not brushRightArrow not and and { ifill } if
+brushNone not { istroke } if
+0 0 1 1 leftarrow
+n 2 sub dup n 1 sub dup rightarrow
+} if
+end
+} dup 0 4 dict put def
+
+/Poly {
+3 1 roll
+newpath
+moveto
+-1 add
+{ lineto } repeat
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+} def
+
+/Rect {
+0 begin
+/t exch def
+/r exch def
+/b exch def
+/l exch def
+newpath
+l b moveto
+l t lineto
+r t lineto
+r b lineto
+closepath
+patternNone not { ifill } if
+brushNone not { istroke } if
+end
+} dup 0 4 dict put def
+
+/Text {
+ishow
+} def
+
+/idef {
+dup where { pop pop pop } { exch def } ifelse
+} def
+
+/ifill {
+0 begin
+gsave
+patternGrayLevel -1 ne {
+fgred bgred fgred sub patternGrayLevel mul add
+fggreen bggreen fggreen sub patternGrayLevel mul add
+fgblue bgblue fgblue sub patternGrayLevel mul add setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+} {
+eoFillRule { eoclip } { clip } ifelse
+originalCTM setmatrix
+pathbbox /t exch def /r exch def /b exch def /l exch def
+/w r l sub ceiling cvi def
+/h t b sub ceiling cvi def
+/imageByteWidth w 8 div ceiling cvi def
+/imageHeight h def
+bgred bggreen bgblue setrgbcolor
+eoFillRule { eofill } { fill } ifelse
+fgred fggreen fgblue setrgbcolor
+w 0 gt h 0 gt and {
+l b translate w h scale
+w h true [w 0 0 h neg 0 h] { patternproc } imagemask
+} if
+} ifelse
+grestore
+end
+} dup 0 8 dict put def
+
+/istroke {
+gsave
+brushDashOffset -1 eq {
+[] 0 setdash
+1 setgray
+} {
+brushDashArray brushDashOffset setdash
+fgred fggreen fgblue setrgbcolor
+} ifelse
+brushWidth setlinewidth
+originalCTM setmatrix
+stroke
+grestore
+} def
+
+/ishow {
+0 begin
+gsave
+fgred fggreen fgblue setrgbcolor
+/fontDict printFont findfont printSize scalefont dup setfont def
+/descender fontDict begin 0 /FontBBox load 1 get FontMatrix end
+transform exch pop def
+/vertoffset 1 printSize sub descender sub def {
+0 vertoffset moveto show
+/vertoffset vertoffset printSize sub def
+} forall
+grestore
+end
+} dup 0 3 dict put def
+
+/patternproc {
+0 begin
+/patternByteLength patternString length def
+/patternHeight patternByteLength 8 mul sqrt cvi def
+/patternWidth patternHeight def
+/patternByteWidth patternWidth 8 idiv def
+/imageByteMaxLength imageByteWidth imageHeight mul
+stringLimit patternByteWidth sub min def
+/imageMaxHeight imageByteMaxLength imageByteWidth idiv patternHeight idiv
+patternHeight mul patternHeight max def
+/imageHeight imageHeight imageMaxHeight sub store
+/imageString imageByteWidth imageMaxHeight mul patternByteWidth add string def
+0 1 imageMaxHeight 1 sub {
+/y exch def
+/patternRow y patternByteWidth mul patternByteLength mod def
+/patternRowString patternString patternRow patternByteWidth getinterval def
+/imageRow y imageByteWidth mul def
+0 patternByteWidth imageByteWidth 1 sub {
+/x exch def
+imageString imageRow x add patternRowString putinterval
+} for
+} for
+imageString
+end
+} dup 0 12 dict put def
+
+/min {
+dup 3 2 roll dup 4 3 roll lt { exch } if pop
+} def
+
+/max {
+dup 3 2 roll dup 4 3 roll gt { exch } if pop
+} def
+
+/midpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 x1 add 2 div
+y0 y1 add 2 div
+end
+} dup 0 4 dict put def
+
+/thirdpoint {
+0 begin
+/y1 exch def
+/x1 exch def
+/y0 exch def
+/x0 exch def
+x0 2 mul x1 add 3 div
+y0 2 mul y1 add 3 div
+end
+} dup 0 4 dict put def
+
+/subspline {
+0 begin
+/movetoNeeded exch def
+y exch get /y3 exch def
+x exch get /x3 exch def
+y exch get /y2 exch def
+x exch get /x2 exch def
+y exch get /y1 exch def
+x exch get /x1 exch def
+y exch get /y0 exch def
+x exch get /x0 exch def
+x1 y1 x2 y2 thirdpoint
+/p1y exch def
+/p1x exch def
+x2 y2 x1 y1 thirdpoint
+/p2y exch def
+/p2x exch def
+x1 y1 x0 y0 thirdpoint
+p1x p1y midpoint
+/p0y exch def
+/p0x exch def
+x2 y2 x3 y3 thirdpoint
+p2x p2y midpoint
+/p3y exch def
+/p3x exch def
+movetoNeeded { p0x p0y moveto } if
+p1x p1y p2x p2y p3x p3y curveto
+end
+} dup 0 17 dict put def
+
+/storexyn {
+/n exch def
+/y n array def
+/x n array def
+n 1 sub -1 0 {
+/i exch def
+y i 3 2 roll put
+x i 3 2 roll put
+} for
+} def
+
+/arrowhead {
+0 begin
+transform originalCTM itransform
+/taily exch def
+/tailx exch def
+transform originalCTM itransform
+/tipy exch def
+/tipx exch def
+/dy tipy taily sub def
+/dx tipx tailx sub def
+/angle dx 0 ne dy 0 ne or { dy dx atan } { 90 } ifelse def
+gsave
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+patternNone not {
+originalCTM setmatrix
+/padtip arrowHeight 2 exp 0.25 arrowWidth 2 exp mul add sqrt brushWidth mul
+arrowWidth div def
+/padtail brushWidth 2 div def
+tipx tipy translate
+angle rotate
+padtip 0 translate
+arrowHeight padtip add padtail add arrowHeight div dup scale
+arrowheadpath
+ifill
+} if
+brushNone not {
+originalCTM setmatrix
+tipx tipy translate
+angle rotate
+arrowheadpath
+istroke
+} if
+grestore
+end
+} dup 0 9 dict put def
+
+/arrowheadpath {
+newpath
+arrowHeight neg arrowWidth 2 div moveto
+0 0 lineto
+arrowHeight neg arrowWidth 2 div neg lineto
+} def
+
+/leftarrow {
+0 begin
+y exch get /taily exch def
+x exch get /tailx exch def
+y exch get /tipy exch def
+x exch get /tipx exch def
+brushLeftArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+
+/rightarrow {
+0 begin
+y exch get /tipy exch def
+x exch get /tipx exch def
+y exch get /taily exch def
+x exch get /tailx exch def
+brushRightArrow { tipx tipy tailx taily arrowhead } if
+end
+} dup 0 4 dict put def
+%%EndResource
+%%EndSetup
+
+%%Page: 1 1
+%%PageResources:
+%%PageBoundingBox: 62 177 500 576
+%%BeginPageSetup
+%I Idraw 8
+
+Begin
+%I b u
+%I cfg u
+%I cbg u
+%I f u
+%I p u
+%I t
+[ 1 0 0 1 0 0 ] concat
+/originalCTM matrix currentmatrix def
+/trueoriginalCTM matrix currentmatrix def
+%%EndPageSetup
+
+Begin %I Rect
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I
+2304 2304 9216 9216 Rect
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2315 2151
+2348 2140
+2370 2107
+2381 2052
+2381 2019
+2370 1964
+2348 1931
+2315 1920
+2293 1920
+2260 1931
+2238 1964
+2227 2019
+2227 2052
+2238 2107
+2260 2140
+2293 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2293 2151
+2271 2140
+2260 2129
+2249 2107
+2238 2052
+2238 2019
+2249 1964
+2260 1942
+2271 1931
+2293 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2315 1920
+2337 1931
+2348 1942
+2359 1964
+2370 2019
+2370 2052
+2359 2107
+2348 2129
+2337 2140
+2315 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2304 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2304 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3181 2151
+3159 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+3159 2041
+3181 2063
+3214 2074
+3247 2074
+3280 2063
+3302 2041
+3313 2008
+3313 1986
+3302 1953
+3280 1931
+3247 1920
+3214 1920
+3181 1931
+3170 1942
+3159 1964
+3159 1975
+3170 1986
+3181 1975
+3170 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+3247 2074
+3269 2063
+3291 2041
+3302 2008
+3302 1986
+3291 1953
+3269 1931
+3247 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3181 2151
+3291 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+3181 2140
+3236 2140
+3291 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3467 2151
+3500 2140
+3522 2107
+3533 2052
+3533 2019
+3522 1964
+3500 1931
+3467 1920
+3445 1920
+3412 1931
+3390 1964
+3379 2019
+3379 2052
+3390 2107
+3412 2140
+3445 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3445 2151
+3423 2140
+3412 2129
+3401 2107
+3390 2052
+3390 2019
+3401 1964
+3412 1942
+3423 1931
+3445 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3467 1920
+3489 1931
+3500 1942
+3511 1964
+3522 2019
+3522 2052
+3511 2107
+3500 2129
+3489 2140
+3467 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+3687 2151
+3720 2140
+3742 2107
+3753 2052
+3753 2019
+3742 1964
+3720 1931
+3687 1920
+3665 1920
+3632 1931
+3610 1964
+3599 2019
+3599 2052
+3610 2107
+3632 2140
+3665 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3665 2151
+3643 2140
+3632 2129
+3621 2107
+3610 2052
+3610 2019
+3621 1964
+3632 1942
+3643 1931
+3665 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+3687 1920
+3709 1931
+3720 1942
+3731 1964
+3742 2019
+3742 2052
+3731 2107
+3720 2129
+3709 2140
+3687 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 9216
+3456 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+3456 2304
+3456 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4234 2107
+4256 2118
+4289 2151
+4289 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4278 2140
+4278 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4234 1920
+4333 1920
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4509 2151
+4542 2140
+4564 2107
+4575 2052
+4575 2019
+4564 1964
+4542 1931
+4509 1920
+4487 1920
+4454 1931
+4432 1964
+4421 2019
+4421 2052
+4432 2107
+4454 2140
+4487 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4487 2151
+4465 2140
+4454 2129
+4443 2107
+4432 2052
+4432 2019
+4443 1964
+4454 1942
+4465 1931
+4487 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4509 1920
+4531 1931
+4542 1942
+4553 1964
+4564 2019
+4564 2052
+4553 2107
+4542 2129
+4531 2140
+4509 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4729 2151
+4762 2140
+4784 2107
+4795 2052
+4795 2019
+4784 1964
+4762 1931
+4729 1920
+4707 1920
+4674 1931
+4652 1964
+4641 2019
+4641 2052
+4652 2107
+4674 2140
+4707 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4707 2151
+4685 2140
+4674 2129
+4663 2107
+4652 2052
+4652 2019
+4663 1964
+4674 1942
+4685 1931
+4707 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4729 1920
+4751 1931
+4762 1942
+4773 1964
+4784 2019
+4784 2052
+4773 2107
+4762 2129
+4751 2140
+4729 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4949 2151
+4982 2140
+5004 2107
+5015 2052
+5015 2019
+5004 1964
+4982 1931
+4949 1920
+4927 1920
+4894 1931
+4872 1964
+4861 2019
+4861 2052
+4872 2107
+4894 2140
+4927 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4927 2151
+4905 2140
+4894 2129
+4883 2107
+4872 2052
+4872 2019
+4883 1964
+4894 1942
+4905 1931
+4927 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+4949 1920
+4971 1931
+4982 1942
+4993 1964
+5004 2019
+5004 2052
+4993 2107
+4982 2129
+4971 2140
+4949 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 9216
+4608 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+4608 2304
+4608 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5386 2107
+5408 2118
+5441 2151
+5441 1920
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5430 2140
+5430 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5386 1920
+5485 1920
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5595 2151
+5573 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+5573 2041
+5595 2063
+5628 2074
+5661 2074
+5694 2063
+5716 2041
+5727 2008
+5727 1986
+5716 1953
+5694 1931
+5661 1920
+5628 1920
+5595 1931
+5584 1942
+5573 1964
+5573 1975
+5584 1986
+5595 1975
+5584 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5661 2074
+5683 2063
+5705 2041
+5716 2008
+5716 1986
+5705 1953
+5683 1931
+5661 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5595 2151
+5705 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5595 2140
+5650 2140
+5705 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+5881 2151
+5914 2140
+5936 2107
+5947 2052
+5947 2019
+5936 1964
+5914 1931
+5881 1920
+5859 1920
+5826 1931
+5804 1964
+5793 2019
+5793 2052
+5804 2107
+5826 2140
+5859 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5859 2151
+5837 2140
+5826 2129
+5815 2107
+5804 2052
+5804 2019
+5815 1964
+5826 1942
+5837 1931
+5859 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5881 1920
+5903 1931
+5914 1942
+5925 1964
+5936 2019
+5936 2052
+5925 2107
+5914 2129
+5903 2140
+5881 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6101 2151
+6134 2140
+6156 2107
+6167 2052
+6167 2019
+6156 1964
+6134 1931
+6101 1920
+6079 1920
+6046 1931
+6024 1964
+6013 2019
+6013 2052
+6024 2107
+6046 2140
+6079 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6079 2151
+6057 2140
+6046 2129
+6035 2107
+6024 2052
+6024 2019
+6035 1964
+6046 1942
+6057 1931
+6079 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6101 1920
+6123 1931
+6134 1942
+6145 1964
+6156 2019
+6156 2052
+6145 2107
+6134 2129
+6123 2140
+6101 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 9216
+5760 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5760 2304
+5760 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+6516 2107
+6527 2096
+6516 2085
+6505 2096
+6505 2107
+6516 2129
+6527 2140
+6560 2151
+6604 2151
+6637 2140
+6648 2129
+6659 2107
+6659 2085
+6648 2063
+6615 2041
+6560 2019
+6538 2008
+6516 1986
+6505 1953
+6505 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6604 2151
+6626 2140
+6637 2129
+6648 2107
+6648 2085
+6637 2063
+6604 2041
+6560 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6505 1942
+6516 1953
+6538 1953
+6593 1931
+6626 1931
+6648 1942
+6659 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+6538 1953
+6593 1920
+6637 1920
+6648 1931
+6659 1953
+6659 1975
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6813 2151
+6846 2140
+6868 2107
+6879 2052
+6879 2019
+6868 1964
+6846 1931
+6813 1920
+6791 1920
+6758 1931
+6736 1964
+6725 2019
+6725 2052
+6736 2107
+6758 2140
+6791 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6791 2151
+6769 2140
+6758 2129
+6747 2107
+6736 2052
+6736 2019
+6747 1964
+6758 1942
+6769 1931
+6791 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+6813 1920
+6835 1931
+6846 1942
+6857 1964
+6868 2019
+6868 2052
+6857 2107
+6846 2129
+6835 2140
+6813 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7033 2151
+7066 2140
+7088 2107
+7099 2052
+7099 2019
+7088 1964
+7066 1931
+7033 1920
+7011 1920
+6978 1931
+6956 1964
+6945 2019
+6945 2052
+6956 2107
+6978 2140
+7011 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7011 2151
+6989 2140
+6978 2129
+6967 2107
+6956 2052
+6956 2019
+6967 1964
+6978 1942
+6989 1931
+7011 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7033 1920
+7055 1931
+7066 1942
+7077 1964
+7088 2019
+7088 2052
+7077 2107
+7066 2129
+7055 2140
+7033 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+7253 2151
+7286 2140
+7308 2107
+7319 2052
+7319 2019
+7308 1964
+7286 1931
+7253 1920
+7231 1920
+7198 1931
+7176 1964
+7165 2019
+7165 2052
+7176 2107
+7198 2140
+7231 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7231 2151
+7209 2140
+7198 2129
+7187 2107
+7176 2052
+7176 2019
+7187 1964
+7198 1942
+7209 1931
+7231 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+7253 1920
+7275 1931
+7286 1942
+7297 1964
+7308 2019
+7308 2052
+7297 2107
+7286 2129
+7275 2140
+7253 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 9216
+6912 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6912 2304
+6912 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 20
+7668 2107
+7679 2096
+7668 2085
+7657 2096
+7657 2107
+7668 2129
+7679 2140
+7712 2151
+7756 2151
+7789 2140
+7800 2129
+7811 2107
+7811 2085
+7800 2063
+7767 2041
+7712 2019
+7690 2008
+7668 1986
+7657 1953
+7657 1920
+20 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7756 2151
+7778 2140
+7789 2129
+7800 2107
+7800 2085
+7789 2063
+7756 2041
+7712 2019
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+7657 1942
+7668 1953
+7690 1953
+7745 1931
+7778 1931
+7800 1942
+7811 1953
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+7690 1953
+7745 1920
+7789 1920
+7800 1931
+7811 1953
+7811 1975
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7899 2151
+7877 2041
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+7877 2041
+7899 2063
+7932 2074
+7965 2074
+7998 2063
+8020 2041
+8031 2008
+8031 1986
+8020 1953
+7998 1931
+7965 1920
+7932 1920
+7899 1931
+7888 1942
+7877 1964
+7877 1975
+7888 1986
+7899 1975
+7888 1964
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+7965 2074
+7987 2063
+8009 2041
+8020 2008
+8020 1986
+8009 1953
+7987 1931
+7965 1920
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+7899 2151
+8009 2151
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+7899 2140
+7954 2140
+8009 2151
+3 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8185 2151
+8218 2140
+8240 2107
+8251 2052
+8251 2019
+8240 1964
+8218 1931
+8185 1920
+8163 1920
+8130 1931
+8108 1964
+8097 2019
+8097 2052
+8108 2107
+8130 2140
+8163 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8163 2151
+8141 2140
+8130 2129
+8119 2107
+8108 2052
+8108 2019
+8119 1964
+8130 1942
+8141 1931
+8163 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8185 1920
+8207 1931
+8218 1942
+8229 1964
+8240 2019
+8240 2052
+8229 2107
+8218 2129
+8207 2140
+8185 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8405 2151
+8438 2140
+8460 2107
+8471 2052
+8471 2019
+8460 1964
+8438 1931
+8405 1920
+8383 1920
+8350 1931
+8328 1964
+8317 2019
+8317 2052
+8328 2107
+8350 2140
+8383 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8383 2151
+8361 2140
+8350 2129
+8339 2107
+8328 2052
+8328 2019
+8339 1964
+8350 1942
+8361 1931
+8383 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+8405 1920
+8427 1931
+8438 1942
+8449 1964
+8460 2019
+8460 2052
+8449 2107
+8438 2129
+8427 2140
+8405 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 9216
+8064 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+8064 2304
+8064 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+8820 2107
+8831 2096
+8820 2085
+8809 2096
+8809 2107
+8820 2129
+8831 2140
+8864 2151
+8908 2151
+8941 2140
+8952 2118
+8952 2085
+8941 2063
+8908 2052
+8875 2052
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8908 2151
+8930 2140
+8941 2118
+8941 2085
+8930 2063
+8908 2052
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+8908 2052
+8930 2041
+8952 2019
+8963 1997
+8963 1964
+8952 1942
+8941 1931
+8908 1920
+8864 1920
+8831 1931
+8820 1942
+8809 1964
+8809 1975
+8820 1986
+8831 1975
+8820 1964
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+8941 2030
+8952 1997
+8952 1964
+8941 1942
+8930 1931
+8908 1920
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9117 2151
+9150 2140
+9172 2107
+9183 2052
+9183 2019
+9172 1964
+9150 1931
+9117 1920
+9095 1920
+9062 1931
+9040 1964
+9029 2019
+9029 2052
+9040 2107
+9062 2140
+9095 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9095 2151
+9073 2140
+9062 2129
+9051 2107
+9040 2052
+9040 2019
+9051 1964
+9062 1942
+9073 1931
+9095 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9117 1920
+9139 1931
+9150 1942
+9161 1964
+9172 2019
+9172 2052
+9161 2107
+9150 2129
+9139 2140
+9117 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9337 2151
+9370 2140
+9392 2107
+9403 2052
+9403 2019
+9392 1964
+9370 1931
+9337 1920
+9315 1920
+9282 1931
+9260 1964
+9249 2019
+9249 2052
+9260 2107
+9282 2140
+9315 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9315 2151
+9293 2140
+9282 2129
+9271 2107
+9260 2052
+9260 2019
+9271 1964
+9282 1942
+9293 1931
+9315 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9337 1920
+9359 1931
+9370 1942
+9381 1964
+9392 2019
+9392 2052
+9381 2107
+9370 2129
+9359 2140
+9337 2151
+10 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+9557 2151
+9590 2140
+9612 2107
+9623 2052
+9623 2019
+9612 1964
+9590 1931
+9557 1920
+9535 1920
+9502 1931
+9480 1964
+9469 2019
+9469 2052
+9480 2107
+9502 2140
+9535 2151
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9535 2151
+9513 2140
+9502 2129
+9491 2107
+9480 2052
+9480 2019
+9491 1964
+9502 1942
+9513 1931
+9535 1920
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+9557 1920
+9579 1931
+9590 1942
+9601 1964
+9612 2019
+9612 2052
+9601 2107
+9590 2129
+9579 2140
+9557 2151
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9216 9078
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9216 2442
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 2392
+1519 2403
+1552 2436
+1552 2205
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 2425
+1541 2205
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 2205
+1596 2205
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 2216
+1705 2205
+1694 2216
+1705 2227
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1804 2392
+1815 2381
+1804 2370
+1793 2381
+1793 2392
+1804 2414
+1815 2425
+1848 2436
+1892 2436
+1925 2425
+1936 2403
+1936 2370
+1925 2348
+1892 2337
+1859 2337
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 2436
+1914 2425
+1925 2403
+1925 2370
+1914 2348
+1892 2337
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1892 2337
+1914 2326
+1936 2304
+1947 2282
+1947 2249
+1936 2227
+1925 2216
+1892 2205
+1848 2205
+1815 2216
+1804 2227
+1793 2249
+1793 2260
+1804 2271
+1815 2260
+1804 2249
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1925 2315
+1936 2282
+1936 2249
+1925 2227
+1914 2216
+1892 2205
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2112 2414
+2112 2205
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2123 2436
+2123 2205
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2123 2436
+2002 2271
+2178 2271
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2079 2205
+2156 2205
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9078 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2442 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 3544
+1519 3555
+1552 3588
+1552 3357
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 3577
+1541 3357
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 3357
+1596 3357
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 3368
+1705 3357
+1694 3368
+1705 3379
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1804 3544
+1815 3533
+1804 3522
+1793 3533
+1793 3544
+1804 3566
+1815 3577
+1848 3588
+1892 3588
+1925 3577
+1936 3555
+1936 3522
+1925 3500
+1892 3489
+1859 3489
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 3588
+1914 3577
+1925 3555
+1925 3522
+1914 3500
+1892 3489
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1892 3489
+1914 3478
+1936 3456
+1947 3434
+1947 3401
+1936 3379
+1925 3368
+1892 3357
+1848 3357
+1815 3368
+1804 3379
+1793 3401
+1793 3412
+1804 3423
+1815 3412
+1804 3401
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1925 3467
+1936 3434
+1936 3401
+1925 3379
+1914 3368
+1892 3357
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 3588
+2013 3478
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 19
+2013 3478
+2035 3500
+2068 3511
+2101 3511
+2134 3500
+2156 3478
+2167 3445
+2167 3423
+2156 3390
+2134 3368
+2101 3357
+2068 3357
+2035 3368
+2024 3379
+2013 3401
+2013 3412
+2024 3423
+2035 3412
+2024 3401
+19 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2101 3511
+2123 3500
+2145 3478
+2156 3445
+2156 3423
+2145 3390
+2123 3368
+2101 3357
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2035 3588
+2145 3588
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+2035 3577
+2090 3577
+2145 3588
+3 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9078 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2442 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 4696
+1519 4707
+1552 4740
+1552 4509
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 4729
+1541 4509
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 4509
+1596 4509
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 4520
+1705 4509
+1694 4520
+1705 4531
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1804 4696
+1815 4685
+1804 4674
+1793 4685
+1793 4696
+1804 4718
+1815 4729
+1848 4740
+1892 4740
+1925 4729
+1936 4707
+1936 4674
+1925 4652
+1892 4641
+1859 4641
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 4740
+1914 4729
+1925 4707
+1925 4674
+1914 4652
+1892 4641
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1892 4641
+1914 4630
+1936 4608
+1947 4586
+1947 4553
+1936 4531
+1925 4520
+1892 4509
+1848 4509
+1815 4520
+1804 4531
+1793 4553
+1793 4564
+1804 4575
+1815 4564
+1804 4553
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1925 4619
+1936 4586
+1936 4553
+1925 4531
+1914 4520
+1892 4509
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2145 4707
+2134 4696
+2145 4685
+2156 4696
+2156 4707
+2145 4729
+2123 4740
+2090 4740
+2057 4729
+2035 4707
+2024 4685
+2013 4641
+2013 4575
+2024 4542
+2046 4520
+2079 4509
+2101 4509
+2134 4520
+2156 4542
+2167 4575
+2167 4586
+2156 4619
+2134 4641
+2101 4652
+2090 4652
+2057 4641
+2035 4619
+2024 4586
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2090 4740
+2068 4729
+2046 4707
+2035 4685
+2024 4641
+2024 4575
+2035 4542
+2057 4520
+2079 4509
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2101 4509
+2123 4520
+2145 4542
+2156 4575
+2156 4586
+2145 4619
+2123 4641
+2101 4652
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9078 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2442 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 5848
+1519 5859
+1552 5892
+1552 5661
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 5881
+1541 5661
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 5661
+1596 5661
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 5672
+1705 5661
+1694 5672
+1705 5683
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1804 5848
+1815 5837
+1804 5826
+1793 5837
+1793 5848
+1804 5870
+1815 5881
+1848 5892
+1892 5892
+1925 5881
+1936 5859
+1936 5826
+1925 5804
+1892 5793
+1859 5793
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 5892
+1914 5881
+1925 5859
+1925 5826
+1914 5804
+1892 5793
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1892 5793
+1914 5782
+1936 5760
+1947 5738
+1947 5705
+1936 5683
+1925 5672
+1892 5661
+1848 5661
+1815 5672
+1804 5683
+1793 5705
+1793 5716
+1804 5727
+1815 5716
+1804 5705
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1925 5771
+1936 5738
+1936 5705
+1925 5683
+1914 5672
+1892 5661
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2013 5892
+2013 5826
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2013 5848
+2024 5870
+2046 5892
+2068 5892
+2123 5859
+2145 5859
+2156 5870
+2167 5892
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+2024 5870
+2046 5881
+2068 5881
+2123 5859
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2167 5892
+2167 5859
+2156 5826
+2112 5771
+2101 5749
+2090 5716
+2090 5661
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+2156 5826
+2101 5771
+2090 5749
+2079 5716
+2079 5661
+5 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9078 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2442 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 7000
+1519 7011
+1552 7044
+1552 6813
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 7033
+1541 6813
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 6813
+1596 6813
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 6824
+1705 6813
+1694 6824
+1705 6835
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1804 7000
+1815 6989
+1804 6978
+1793 6989
+1793 7000
+1804 7022
+1815 7033
+1848 7044
+1892 7044
+1925 7033
+1936 7011
+1936 6978
+1925 6956
+1892 6945
+1859 6945
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 7044
+1914 7033
+1925 7011
+1925 6978
+1914 6956
+1892 6945
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1892 6945
+1914 6934
+1936 6912
+1947 6890
+1947 6857
+1936 6835
+1925 6824
+1892 6813
+1848 6813
+1815 6824
+1804 6835
+1793 6857
+1793 6868
+1804 6879
+1815 6868
+1804 6857
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1925 6923
+1936 6890
+1936 6857
+1925 6835
+1914 6824
+1892 6813
+6 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+2112 7044
+2145 7033
+2156 7011
+2156 6978
+2145 6956
+2112 6945
+2068 6945
+2035 6956
+2024 6978
+2024 7011
+2035 7033
+2068 7044
+12 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2068 7044
+2046 7033
+2035 7011
+2035 6978
+2046 6956
+2068 6945
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2112 6945
+2134 6956
+2145 6978
+2145 7011
+2134 7033
+2112 7044
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2068 6945
+2035 6934
+2024 6923
+2013 6901
+2013 6857
+2024 6835
+2035 6824
+2068 6813
+2112 6813
+2145 6824
+2156 6835
+2167 6857
+2167 6901
+2156 6923
+2145 6934
+2112 6945
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2068 6945
+2046 6934
+2035 6923
+2024 6901
+2024 6857
+2035 6835
+2046 6824
+2068 6813
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2112 6813
+2134 6824
+2145 6835
+2156 6857
+2156 6901
+2145 6923
+2134 6934
+2112 6945
+8 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6912
+9078 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6912
+2442 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 8152
+1519 8163
+1552 8196
+1552 7965
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 8185
+1541 7965
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 7965
+1596 7965
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 7976
+1705 7965
+1694 7976
+1705 7987
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1804 8152
+1815 8141
+1804 8130
+1793 8141
+1793 8152
+1804 8174
+1815 8185
+1848 8196
+1892 8196
+1925 8185
+1936 8163
+1936 8130
+1925 8108
+1892 8097
+1859 8097
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1892 8196
+1914 8185
+1925 8163
+1925 8130
+1914 8108
+1892 8097
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+1892 8097
+1914 8086
+1936 8064
+1947 8042
+1947 8009
+1936 7987
+1925 7976
+1892 7965
+1848 7965
+1815 7976
+1804 7987
+1793 8009
+1793 8020
+1804 8031
+1815 8020
+1804 8009
+16 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+1925 8075
+1936 8042
+1936 8009
+1925 7987
+1914 7976
+1892 7965
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 28
+2156 8119
+2145 8086
+2123 8064
+2090 8053
+2079 8053
+2046 8064
+2024 8086
+2013 8119
+2013 8130
+2024 8163
+2046 8185
+2079 8196
+2101 8196
+2134 8185
+2156 8163
+2167 8130
+2167 8064
+2156 8020
+2145 7998
+2123 7976
+2090 7965
+2057 7965
+2035 7976
+2024 7998
+2024 8009
+2035 8020
+2046 8009
+2035 7998
+28 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2079 8053
+2057 8064
+2035 8086
+2024 8119
+2024 8130
+2035 8163
+2057 8185
+2079 8196
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+2101 8196
+2123 8185
+2145 8163
+2156 8130
+2156 8064
+2145 8020
+2134 7998
+2112 7976
+2090 7965
+9 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8064
+9078 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8064
+2442 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1497 9304
+1519 9315
+1552 9348
+1552 9117
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1541 9337
+1541 9117
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1497 9117
+1596 9117
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+1716 9128
+1705 9117
+1694 9128
+1705 9139
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1892 9326
+1892 9117
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1903 9348
+1903 9117
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+1903 9348
+1782 9183
+1958 9183
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1859 9117
+1936 9117
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+2101 9348
+2134 9337
+2156 9304
+2167 9249
+2167 9216
+2156 9161
+2134 9128
+2101 9117
+2079 9117
+2046 9128
+2024 9161
+2013 9216
+2013 9249
+2024 9304
+2046 9337
+2079 9348
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2079 9348
+2057 9337
+2046 9326
+2035 9304
+2024 9249
+2024 9216
+2035 9161
+2046 9139
+2057 9128
+2079 9117
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+2101 9117
+2123 9128
+2134 9139
+2145 9161
+2156 9216
+2156 9249
+2145 9304
+2134 9326
+2123 9337
+2101 9348
+10 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9078 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2442 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2304
+9161 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2304
+2359 2304
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 2880
+9161 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 2880
+2359 2880
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 3456
+9161 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 3456
+2359 3456
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4032
+9161 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4032
+2359 4032
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 4608
+9161 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 4608
+2359 4608
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5184
+9161 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5184
+2359 5184
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 5760
+9161 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 5760
+2359 5760
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6336
+9161 6336
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6336
+2359 6336
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 6912
+9161 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 6912
+2359 6912
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 7488
+9161 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 7488
+2359 7488
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8064
+9161 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8064
+2359 8064
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 8640
+9161 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 8640
+2359 8640
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+9216 9216
+9161 9216
+2 MLine
+End
+
+Begin %I MLine
+[0.6776471 0 0 0.6776471 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+2304 9216
+2359 9216
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+4858 1621
+4880 1610
+4891 1599
+4902 1577
+4902 1555
+4891 1533
+4880 1522
+4858 1511
+4836 1511
+4814 1522
+4803 1533
+4792 1555
+4792 1577
+4803 1599
+4814 1610
+4836 1621
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4814 1610
+4803 1588
+4803 1544
+4814 1522
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+4880 1522
+4891 1544
+4891 1588
+4880 1610
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+4891 1599
+4902 1610
+4924 1621
+4924 1610
+4902 1610
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 9
+4803 1533
+4792 1522
+4781 1500
+4781 1489
+4792 1467
+4825 1456
+4880 1456
+4913 1445
+4924 1434
+9 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+4781 1489
+4792 1478
+4825 1467
+4880 1467
+4913 1456
+4924 1434
+4924 1423
+4913 1401
+4880 1390
+4814 1390
+4781 1401
+4770 1423
+4770 1434
+4781 1456
+4814 1467
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5001 1555
+5133 1555
+5133 1577
+5122 1599
+5111 1610
+5089 1621
+5056 1621
+5023 1610
+5001 1588
+4990 1555
+4990 1533
+5001 1500
+5023 1478
+5056 1467
+5078 1467
+5111 1478
+5133 1500
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5122 1555
+5122 1588
+5111 1610
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5056 1621
+5034 1610
+5012 1588
+5001 1555
+5001 1533
+5012 1500
+5034 1478
+5056 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5221 1621
+5221 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5232 1621
+5232 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+5232 1588
+5254 1610
+5287 1621
+5309 1621
+5342 1610
+5353 1588
+5353 1467
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+5309 1621
+5331 1610
+5342 1588
+5342 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5188 1621
+5232 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5188 1467
+5265 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5309 1467
+5386 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+5452 1555
+5584 1555
+5584 1577
+5573 1599
+5562 1610
+5540 1621
+5507 1621
+5474 1610
+5452 1588
+5441 1555
+5441 1533
+5452 1500
+5474 1478
+5507 1467
+5529 1467
+5562 1478
+5584 1500
+17 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 3
+5573 1555
+5573 1588
+5562 1610
+3 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+5507 1621
+5485 1610
+5463 1588
+5452 1555
+5452 1533
+5463 1500
+5485 1478
+5507 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5672 1621
+5672 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5683 1621
+5683 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 10
+5683 1555
+5694 1588
+5716 1610
+5738 1621
+5771 1621
+5782 1610
+5782 1599
+5771 1588
+5760 1599
+5771 1610
+10 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5639 1621
+5683 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+5639 1467
+5716 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 13
+5859 1599
+5859 1588
+5848 1588
+5848 1599
+5859 1610
+5881 1621
+5925 1621
+5947 1610
+5958 1599
+5969 1577
+5969 1500
+5980 1478
+5991 1467
+13 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+5958 1599
+5958 1500
+5969 1478
+5991 1467
+6002 1467
+5 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 11
+5958 1577
+5947 1566
+5881 1555
+5848 1544
+5837 1522
+5837 1500
+5848 1478
+5881 1467
+5914 1467
+5936 1478
+5958 1500
+11 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+5881 1555
+5859 1544
+5848 1522
+5848 1500
+5859 1478
+5881 1467
+6 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6079 1698
+6079 1511
+6090 1478
+6112 1467
+6134 1467
+6156 1478
+6167 1500
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6090 1698
+6090 1511
+6101 1478
+6112 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6046 1621
+6134 1621
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6255 1687
+6244 1676
+6233 1687
+6244 1698
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6244 1621
+6244 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6255 1621
+6255 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6211 1621
+6255 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6211 1467
+6288 1467
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+6431 1621
+6464 1610
+6486 1588
+6497 1555
+6497 1533
+6486 1500
+6464 1478
+6431 1467
+6409 1467
+6376 1478
+6354 1500
+6343 1533
+6343 1555
+6354 1588
+6376 1610
+6409 1621
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6409 1621
+6387 1610
+6365 1588
+6354 1555
+6354 1533
+6365 1500
+6387 1478
+6409 1467
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+6431 1467
+6453 1478
+6475 1500
+6486 1533
+6486 1555
+6475 1588
+6453 1610
+6431 1621
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6585 1621
+6585 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6596 1621
+6596 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+6596 1588
+6618 1610
+6651 1621
+6673 1621
+6706 1610
+6717 1588
+6717 1467
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+6673 1621
+6695 1610
+6706 1588
+6706 1467
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 1621
+6596 1621
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6552 1467
+6629 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+6673 1467
+6750 1467
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5062
+1205 5062
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5073
+1205 5073
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+1007 5073
+985 5095
+974 5117
+974 5139
+985 5172
+1007 5194
+1040 5205
+1062 5205
+1095 5194
+1117 5172
+1128 5139
+1128 5117
+1117 5095
+1095 5073
+14 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+974 5139
+985 5161
+1007 5183
+1040 5194
+1062 5194
+1095 5183
+1117 5161
+1128 5139
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5029
+974 5073
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1205 5029
+1205 5106
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+974 5359
+985 5392
+1007 5414
+1040 5425
+1062 5425
+1095 5414
+1117 5392
+1128 5359
+1128 5337
+1117 5304
+1095 5282
+1062 5271
+1040 5271
+1007 5282
+985 5304
+974 5337
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+974 5337
+985 5315
+1007 5293
+1040 5282
+1062 5282
+1095 5293
+1117 5315
+1128 5337
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1128 5359
+1117 5381
+1095 5403
+1062 5414
+1040 5414
+1007 5403
+985 5381
+974 5359
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+996 5601
+974 5612
+1018 5612
+996 5601
+985 5590
+974 5568
+974 5524
+985 5502
+996 5491
+1018 5491
+1029 5502
+1040 5524
+1062 5579
+1073 5601
+1084 5612
+15 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 15
+1007 5491
+1018 5502
+1029 5524
+1051 5579
+1062 5601
+1073 5612
+1106 5612
+1117 5601
+1128 5579
+1128 5535
+1117 5513
+1106 5502
+1084 5491
+1128 5491
+1106 5502
+15 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+908 5711
+919 5700
+908 5689
+897 5700
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5700
+1128 5700
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5711
+1128 5711
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5667
+974 5711
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1128 5667
+1128 5744
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+897 5820
+1084 5820
+1117 5831
+1128 5853
+1128 5875
+1117 5897
+1095 5908
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+897 5831
+1084 5831
+1117 5842
+1128 5853
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5787
+974 5875
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+908 5996
+919 5985
+908 5974
+897 5985
+4 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5985
+1128 5985
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5996
+1128 5996
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 5952
+974 5996
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1128 5952
+1128 6029
+2 MLine
+End
+
+Begin %I Poly
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 16
+974 6172
+985 6205
+1007 6227
+1040 6238
+1062 6238
+1095 6227
+1117 6205
+1128 6172
+1128 6150
+1117 6117
+1095 6095
+1062 6084
+1040 6084
+1007 6095
+985 6117
+974 6150
+16 Poly
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+974 6150
+985 6128
+1007 6106
+1040 6095
+1062 6095
+1095 6106
+1117 6128
+1128 6150
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+1128 6172
+1117 6194
+1095 6216
+1062 6227
+1040 6227
+1007 6216
+985 6194
+974 6172
+8 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 6326
+1128 6326
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 6337
+1128 6337
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+1007 6337
+985 6359
+974 6392
+974 6414
+985 6447
+1007 6458
+1128 6458
+7 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 4
+974 6414
+985 6436
+1007 6447
+1128 6447
+4 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+974 6293
+974 6337
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1128 6293
+1128 6370
+2 MLine
+End
+
+Begin %I MLine
+[0.7807418 0 0 0.7807418 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+1 setlinecap 1 setlinejoin
+/eoFillRule true def
+%I b 65535
+1 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 2
+1128 6414
+1128 6491
+2 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 5
+2304 3537
+2306 5851
+2309 6957
+2311 5040
+2311 2304
+5 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 7
+2316 9216
+2318 3782
+2320 5046
+2322 5694
+2325 7425
+2327 2809
+2327 2304
+7 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2332 2304
+2332 6545
+2334 3779
+2336 2701
+2339 2863
+2341 4038
+2343 4677
+2343 2304
+8 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 8
+2348 2304
+2348 6745
+2350 5723
+2352 4676
+2355 3001
+2357 5031
+2359 4958
+2359 2304
+8 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 17
+2364 2304
+2364 5593
+2366 6131
+2369 5183
+2371 4312
+2373 4047
+2375 6887
+2378 3572
+2380 2957
+2382 6623
+2385 5578
+2387 5196
+2389 3144
+2392 5409
+2394 5349
+2396 3938
+2396 2304
+17 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 23
+2401 2304
+2401 3893
+2403 5522
+2405 4905
+2408 5492
+2410 8222
+2412 7351
+2415 5980
+2417 5113
+2419 5349
+2422 2946
+2424 3768
+2426 3987
+2428 3116
+2431 2943
+2433 3963
+2435 6127
+2438 6093
+2440 5254
+2442 5632
+2445 5956
+2447 7000
+2449 2304
+23 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 14
+2449 2304
+2451 5820
+2454 7758
+2456 5967
+2458 3336
+2461 4018
+2463 5883
+2465 5444
+2468 5422
+2470 3213
+2472 5818
+2474 6579
+2477 3669
+2477 2304
+14 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 52
+2481 2304
+2481 3929
+2484 5008
+2486 5156
+2488 9181
+2491 7231
+2493 6319
+2495 3796
+2498 4272
+2500 5322
+2502 6001
+2504 4344
+2507 3939
+2509 4495
+2511 6707
+2514 6862
+2516 4186
+2518 6898
+2521 5929
+2523 2683
+2525 6786
+2527 5745
+2530 7087
+2532 6073
+2534 7508
+2537 5712
+2539 3585
+2541 4588
+2544 3257
+2546 5062
+2548 4287
+2551 6107
+2553 4268
+2555 5516
+2557 3495
+2560 7006
+2562 5126
+2564 4795
+2567 6427
+2569 6482
+2571 6155
+2574 5672
+2576 5571
+2578 5941
+2580 4184
+2583 4580
+2585 6938
+2587 7021
+2590 5638
+2592 6728
+2594 6274
+2597 2304
+52 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 30
+2597 2304
+2599 5625
+2601 4085
+2604 3972
+2606 7103
+2608 4874
+2610 3563
+2613 5008
+2615 5237
+2617 4205
+2620 5002
+2622 6644
+2624 4303
+2627 3993
+2629 5486
+2631 3143
+2633 5398
+2636 2961
+2638 5134
+2640 4828
+2643 3800
+2645 5856
+2647 4655
+2650 5632
+2652 4448
+2654 6759
+2657 4162
+2659 5417
+2661 5031
+2663 2304
+30 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 12
+2664 2304
+2666 5439
+2668 6260
+2670 5887
+2673 6677
+2675 3635
+2677 5685
+2680 6228
+2682 5760
+2684 5455
+2686 6136
+2689 2304
+12 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 50
+2689 2304
+2691 5024
+2693 6701
+2696 5156
+2698 2972
+2700 5454
+2703 3338
+2705 4169
+2707 7335
+2710 5755
+2712 3025
+2714 3250
+2716 7785
+2719 3138
+2721 3858
+2723 5572
+2726 6626
+2728 3509
+2730 5704
+2733 4358
+2735 6663
+2737 2585
+2739 4067
+2742 5996
+2744 4279
+2746 4831
+2749 5393
+2751 3457
+2753 4996
+2756 5329
+2758 4711
+2760 5613
+2762 4766
+2765 6331
+2767 6019
+2769 3948
+2772 5539
+2774 3994
+2776 6042
+2779 5830
+2781 4390
+2783 3784
+2786 4605
+2788 4911
+2790 6647
+2792 4684
+2795 5122
+2797 4924
+2799 4768
+2799 2304
+50 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 6
+2804 2304
+2804 5242
+2806 4333
+2809 3694
+2811 6115
+2811 2304
+6 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+2815 2304
+2815 4467
+2818 4577
+2820 2438
+2822 5659
+2825 4704
+2827 4326
+2829 5129
+2832 3356
+2834 5948
+2836 5731
+2839 5003
+2841 6929
+2843 5010
+2845 6503
+2848 5508
+2850 4844
+2852 4207
+2855 4908
+2857 5596
+2859 5035
+2862 4658
+2864 3556
+2866 3631
+2868 5071
+2871 5299
+2873 5722
+2875 4846
+2878 5313
+2880 5105
+2882 4724
+2885 4666
+2887 5480
+2889 4429
+2892 5102
+2894 3208
+2896 5477
+2898 4912
+2901 5978
+2903 6812
+2905 4435
+2908 4117
+2910 3539
+2912 5100
+2915 5103
+2917 4579
+2919 4502
+2921 5469
+2924 4849
+2926 5587
+2928 5009
+2931 4724
+2933 5662
+2935 5433
+2938 5155
+2940 5584
+2942 4712
+2945 4849
+2947 5169
+2949 4890
+2951 2614
+2954 5378
+2956 3964
+2958 2365
+2961 4798
+2963 6236
+2965 5300
+2968 4452
+2970 4730
+2972 6526
+2974 4494
+2977 3588
+2979 5140
+2981 4810
+2984 4655
+2986 5072
+2988 3927
+2991 5600
+2993 4667
+2995 5611
+2998 4792
+3000 5403
+3002 5353
+3004 5246
+3007 4527
+3009 7247
+3011 5939
+3014 4158
+3016 4188
+3018 5535
+3021 6841
+3023 3405
+3025 5342
+3027 4717
+3030 4895
+3032 5026
+3034 4201
+3037 2962
+3039 3987
+3041 5061
+3044 4744
+3046 3880
+3048 5879
+3050 6122
+3053 5621
+3055 2487
+3057 5431
+3060 5492
+3062 4565
+3064 5669
+3067 4395
+3069 4125
+3071 4975
+3074 4476
+3076 6096
+3078 5557
+3080 5672
+3083 4699
+3085 3673
+3087 4429
+3090 3668
+3092 5839
+3094 5223
+3097 4999
+3099 3406
+3101 5109
+3103 5254
+3106 3251
+3108 4486
+3110 5880
+3113 4431
+3115 5721
+3117 4393
+3120 4941
+3122 4302
+3124 4320
+3127 4424
+3129 4504
+3131 5623
+3133 3928
+3136 6113
+3138 5371
+3140 5003
+3143 6304
+3145 4655
+3147 5484
+3150 4500
+3152 3724
+3154 4679
+3156 4937
+3159 4296
+3161 4444
+3163 5901
+3166 4381
+3168 5522
+3170 5929
+3173 4851
+3175 4986
+3177 3870
+3180 5414
+3182 3886
+3184 4957
+3186 4988
+3189 5250
+3191 5554
+3193 4910
+3196 4632
+3198 5334
+3200 4401
+3203 5663
+3205 5207
+3207 4188
+3209 5253
+3212 5965
+3214 5414
+3216 5223
+3219 5346
+3221 5186
+3223 5702
+3226 4887
+3228 4813
+3230 4958
+3233 5399
+3235 4439
+3237 4607
+3239 5723
+3242 4556
+3244 5758
+3246 5238
+3249 3989
+3251 5187
+3253 5354
+3256 5395
+3258 5384
+3260 4405
+3262 5695
+3265 5284
+3267 4783
+3269 6017
+3272 4313
+3274 5041
+3276 4289
+3279 4922
+3281 2568
+3283 5001
+3286 4472
+3288 6198
+3290 4679
+3292 4732
+3295 4601
+3297 5628
+3299 4872
+3302 4235
+3304 4272
+3306 5159
+3309 5456
+3311 4979
+3313 3544
+3315 5845
+3318 4297
+3320 4715
+3322 4241
+3325 4155
+3327 6127
+3329 4949
+3332 5663
+3334 7135
+3336 6070
+3338 4776
+3341 3711
+3343 4841
+3345 4666
+3348 4580
+3350 5700
+3352 4175
+3355 4755
+3357 5891
+3359 4288
+3362 4761
+3364 4206
+3366 6330
+3368 5722
+3371 5133
+3373 5191
+3375 4366
+3378 4523
+3380 5576
+3382 4902
+3385 4596
+3387 6145
+3389 4578
+3391 4242
+3394 5414
+3396 4061
+3398 5454
+3401 3813
+3403 4829
+3405 4015
+3408 3936
+3410 4625
+3412 4686
+3415 5942
+3417 5630
+3419 4603
+3421 5883
+3424 5757
+3426 5687
+3428 5088
+3431 5724
+3433 5345
+3435 4432
+3438 4290
+3440 5754
+3442 5237
+3444 4678
+3447 5493
+3449 5110
+3451 5526
+3454 4421
+3456 3996
+3458 4873
+3461 6145
+3463 4156
+3465 4670
+3468 4872
+3470 4465
+3472 4470
+3474 4697
+3477 4071
+3479 5492
+3481 5191
+3484 6397
+3486 4783
+3488 5121
+3491 5867
+3493 4828
+3495 4516
+3497 5792
+3500 5033
+3502 4759
+3504 5772
+3507 4804
+3509 5069
+3511 4818
+3514 4310
+3516 5510
+3518 6439
+3521 4828
+3523 5190
+3525 4826
+3527 6038
+3530 4626
+3532 4145
+3534 4726
+3537 4729
+3539 5912
+3541 4813
+3544 4724
+3546 3617
+3548 3524
+3550 4776
+3553 5115
+3555 5425
+3557 5289
+3560 4423
+3562 5103
+3564 4669
+3567 5011
+3569 4038
+3571 5312
+3574 4374
+3576 4433
+3578 5816
+3580 5225
+3583 4792
+3585 4320
+3587 5230
+3590 5429
+3592 5146
+3594 6043
+3597 4608
+3599 4724
+3601 4995
+3603 5955
+3606 4970
+3608 5198
+3610 5223
+3613 5098
+3615 5289
+3617 5018
+3620 4799
+3622 5859
+3624 5077
+3626 4886
+3629 5030
+3631 4722
+3633 4902
+3636 5249
+3638 5146
+3640 4894
+3643 5205
+3645 5113
+3647 4019
+3650 6192
+3652 4959
+3654 4908
+3656 4151
+3659 5368
+3661 5460
+3663 5533
+3666 4432
+3668 5306
+3670 4747
+3673 5517
+3675 4903
+3677 5888
+3679 5045
+3682 3707
+3684 4496
+3686 5224
+3689 3817
+3691 5335
+3693 4246
+3696 3908
+3698 3978
+3700 4389
+3703 5548
+3705 4863
+3707 4990
+3709 5449
+3712 4750
+3714 4948
+3716 4503
+3719 5024
+3721 5842
+3723 4975
+3726 4969
+3728 5672
+3730 4207
+3732 5094
+3735 5487
+3737 5905
+3739 4975
+3742 5292
+3744 4716
+3746 4578
+3749 4806
+3751 5140
+3753 4651
+3756 4398
+3758 4084
+3760 3932
+3762 4535
+3765 4530
+3767 5463
+3769 4177
+3772 5480
+3774 5624
+3776 4472
+3779 4549
+3781 5584
+3783 5168
+3785 5452
+3788 3898
+3790 5100
+3792 5481
+3795 4696
+3797 5129
+3799 4514
+3802 5556
+3804 5008
+3806 5725
+3809 4827
+3811 5357
+3813 4856
+3815 5141
+3818 4934
+3820 4390
+3822 5634
+3825 4602
+3827 4882
+3829 4937
+3832 5407
+3834 4768
+3836 4654
+3838 4381
+3841 5030
+3843 5045
+3845 4798
+3848 4707
+3850 5390
+3852 4503
+3855 5255
+3857 6042
+3859 4896
+3862 4401
+3864 5028
+3866 4492
+3868 4866
+3871 4663
+3873 5255
+3875 5130
+3878 4599
+3880 5406
+3882 4901
+3885 5557
+3887 4326
+3889 5076
+3891 5056
+3894 5139
+3896 4070
+3898 5221
+3901 4788
+3903 5081
+3905 4399
+3908 4964
+3910 5117
+3912 4909
+3914 4777
+3917 4040
+3919 4724
+3921 5427
+3924 5186
+3926 4993
+3928 5212
+3931 4986
+3933 3864
+3935 4739
+3938 5034
+3940 4072
+3942 5754
+3944 5316
+3947 5252
+3949 5204
+3951 5875
+3954 4977
+3956 4313
+3958 4613
+3961 5136
+3963 5681
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+3963 5681
+3965 4624
+3967 4461
+3970 5042
+3972 4438
+3974 5657
+3977 5399
+3979 3812
+3981 5833
+3984 5350
+3986 5458
+3988 4868
+3991 4783
+3993 5525
+3995 5588
+3997 5269
+4000 4408
+4002 4393
+4004 4922
+4007 5568
+4009 4510
+4011 4548
+4014 4411
+4016 4941
+4018 4841
+4020 4787
+4023 5808
+4025 4826
+4027 5128
+4030 4730
+4032 5017
+4034 5048
+4037 4799
+4039 4785
+4041 4375
+4044 5213
+4046 5568
+4048 4951
+4050 4989
+4053 4776
+4055 3940
+4057 4609
+4060 4454
+4062 4359
+4064 4590
+4067 4768
+4069 5576
+4071 5372
+4073 5167
+4076 5030
+4078 5282
+4080 5159
+4083 5125
+4085 4896
+4087 4279
+4090 4118
+4092 5246
+4094 4829
+4097 4675
+4099 4790
+4101 4279
+4103 4508
+4106 5837
+4108 5020
+4110 6001
+4113 5002
+4115 5008
+4117 4610
+4120 4644
+4122 4988
+4124 4288
+4126 5505
+4129 4759
+4131 4503
+4133 5020
+4136 5694
+4138 4314
+4140 5493
+4143 4564
+4145 5661
+4147 5420
+4150 5234
+4152 5288
+4154 4500
+4156 5004
+4159 5302
+4161 5500
+4163 4977
+4166 5156
+4168 5086
+4170 4999
+4173 4981
+4175 4772
+4177 4580
+4179 5139
+4182 5207
+4184 4276
+4186 4922
+4189 4906
+4191 5479
+4193 4975
+4196 5382
+4198 5500
+4200 5328
+4202 4469
+4205 4588
+4207 5326
+4209 4851
+4212 4663
+4214 5724
+4216 5431
+4219 4599
+4221 4955
+4223 5454
+4226 5015
+4228 4924
+4230 5393
+4232 5306
+4235 4856
+4237 4893
+4239 4664
+4242 5474
+4244 4599
+4246 5019
+4249 4673
+4251 4318
+4253 5647
+4255 5041
+4258 5775
+4260 5480
+4262 4783
+4265 4759
+4267 4643
+4269 4279
+4272 5278
+4274 5538
+4276 4722
+4279 5910
+4281 4905
+4283 4317
+4285 4774
+4288 4561
+4290 4561
+4292 4850
+4295 5098
+4297 4554
+4299 4532
+4302 5041
+4304 4924
+4306 4701
+4308 5099
+4311 5253
+4313 5298
+4315 5776
+4318 5030
+4320 4716
+4322 5266
+4325 4609
+4327 4966
+4329 4568
+4332 5418
+4334 4973
+4336 5141
+4338 4958
+4341 5121
+4343 5460
+4345 5672
+4348 4749
+4350 5100
+4352 4724
+4355 4232
+4357 5027
+4359 5046
+4361 5168
+4364 5320
+4366 5105
+4368 4777
+4371 5116
+4373 5775
+4375 4421
+4378 5031
+4380 4978
+4382 4845
+4385 5488
+4387 4590
+4389 4833
+4391 4965
+4394 4366
+4396 5320
+4398 4346
+4401 5449
+4403 4965
+4405 4866
+4408 5194
+4410 5116
+4412 5283
+4414 5371
+4417 5008
+4419 4760
+4421 4975
+4424 4994
+4426 5518
+4428 5115
+4431 4922
+4433 5072
+4435 5072
+4438 5072
+4440 5504
+4442 4922
+4444 4890
+4447 4962
+4449 4517
+4451 4768
+4454 5186
+4456 4646
+4458 5284
+4461 4966
+4463 5038
+4465 4969
+4467 4645
+4470 5660
+4472 4947
+4474 5178
+4477 5404
+4479 5398
+4481 5401
+4484 4963
+4486 5163
+4488 4833
+4490 5232
+4493 5383
+4495 5109
+4497 5093
+4500 4753
+4502 4643
+4504 4767
+4507 5108
+4509 4911
+4511 5149
+4514 4571
+4516 4375
+4518 4975
+4520 5094
+4523 4842
+4525 4658
+4527 5448
+4530 5934
+4532 5224
+4534 5224
+4537 4954
+4539 5292
+4541 4966
+4543 5091
+4546 4905
+4548 4974
+4550 4297
+4553 4940
+4555 4925
+4557 4921
+4560 4742
+4562 4752
+4564 5144
+4567 4895
+4569 5405
+4571 4855
+4573 4757
+4576 5108
+4578 5306
+4580 4644
+4583 5336
+4585 4894
+4587 4848
+4590 4655
+4592 5337
+4594 5515
+4596 4901
+4599 5022
+4601 5022
+4603 5548
+4606 4988
+4608 4623
+4610 4469
+4613 4490
+4615 4659
+4617 4980
+4620 5075
+4622 5099
+4624 4922
+4626 5054
+4629 5236
+4631 5052
+4633 5531
+4636 5225
+4638 5275
+4640 4977
+4643 4743
+4645 4717
+4647 5345
+4649 5088
+4652 4813
+4654 5338
+4656 5287
+4659 5098
+4661 4788
+4663 5424
+4666 4585
+4668 4910
+4670 5043
+4673 5206
+4675 5201
+4677 4620
+4679 5045
+4682 4696
+4684 4673
+4686 5296
+4689 4573
+4691 5206
+4693 5055
+4696 4435
+4698 4443
+4700 4889
+4702 5561
+4705 4966
+4707 4320
+4709 4736
+4712 4464
+4714 5158
+4716 4813
+4719 5148
+4721 5102
+4723 5191
+4726 5054
+4728 5194
+4730 4852
+4732 5080
+4735 5019
+4737 4851
+4739 4744
+4742 4957
+4744 4917
+4746 4926
+4749 5063
+4751 4728
+4753 4751
+4755 4911
+4758 4911
+4760 5027
+4762 5015
+4765 5015
+4767 5004
+4769 5004
+4772 4696
+4774 4820
+4776 4875
+4778 4522
+4781 5230
+4783 4775
+4785 5186
+4788 5368
+4790 5194
+4792 5205
+4795 4593
+4797 4913
+4799 5297
+4802 4835
+4804 4865
+4806 5045
+4808 4749
+4811 4941
+4813 4895
+4815 5172
+4818 4664
+4820 5231
+4822 4223
+4825 5269
+4827 4988
+4829 4988
+4831 5265
+4834 5192
+4836 4702
+4838 4962
+4841 5098
+4843 5098
+4845 5093
+4848 4871
+4850 4969
+4852 4969
+4855 4978
+4857 4868
+4859 5379
+4861 5102
+4864 5102
+4866 4823
+4868 5200
+4871 5394
+4873 5161
+4875 4883
+4878 5314
+4880 4925
+4882 4571
+4884 4774
+4887 5374
+4889 4838
+4891 4704
+4894 4783
+4896 5002
+4898 5002
+4901 4956
+4903 5232
+4905 4857
+4908 4670
+4910 4833
+4912 4762
+4914 5050
+4917 5168
+4919 4682
+4921 5204
+4924 4893
+4926 5064
+4928 4985
+4931 5071
+4933 4713
+4935 4922
+4937 5297
+4940 5261
+4942 4830
+4944 4959
+4947 4852
+4949 5581
+4951 4954
+4954 5296
+4956 4887
+4958 5213
+4961 4970
+4963 4837
+4965 5252
+4967 4464
+4970 5034
+4972 4849
+4974 5002
+4977 4985
+4979 4985
+4981 5084
+4984 5084
+4986 4684
+4988 4783
+4990 5093
+4993 4739
+4995 4795
+4997 5103
+5000 5384
+5002 5222
+5004 4611
+5007 5069
+5009 4831
+5011 4709
+5014 4707
+5016 4958
+5018 4943
+5020 4629
+5023 4886
+5025 5015
+5027 5035
+5030 4843
+5032 4694
+5034 5041
+5037 5073
+5039 5269
+5041 5017
+5043 4911
+5046 4843
+5048 4751
+5050 5015
+5053 4939
+5055 4967
+5057 4967
+5060 4985
+5062 4398
+5064 4722
+5066 4740
+5069 4921
+5071 5025
+5073 4880
+5076 4880
+5078 4927
+5080 5003
+5083 4812
+5085 5053
+5087 4348
+5090 4729
+5092 4669
+5094 5221
+5096 4690
+5099 4910
+5101 4959
+5103 4653
+5106 5057
+5108 4969
+5110 5184
+5113 4616
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+5113 4616
+5115 4936
+5117 4540
+5119 4891
+5122 5043
+5124 4992
+5126 4778
+5129 5068
+5131 5131
+5133 5131
+5136 5045
+5138 5231
+5140 4833
+5143 5131
+5145 4709
+5147 5427
+5149 4974
+5152 4730
+5154 4888
+5156 5125
+5159 5035
+5161 5109
+5163 4732
+5166 5046
+5168 5046
+5170 4913
+5172 4913
+5175 4757
+5177 4984
+5179 4897
+5182 4825
+5184 5268
+5186 5224
+5189 5204
+5191 4592
+5193 5284
+5196 5072
+5198 5063
+5200 5062
+5202 5110
+5205 4821
+5207 5222
+5209 4620
+5212 4789
+5214 5325
+5216 4757
+5219 5111
+5221 5252
+5223 4927
+5225 5057
+5228 5170
+5230 5213
+5232 5114
+5235 4661
+5237 5304
+5239 4687
+5242 5291
+5244 4886
+5246 5107
+5249 4927
+5251 4770
+5253 4770
+5255 4834
+5258 5052
+5260 5234
+5262 4922
+5265 5106
+5267 4969
+5269 4969
+5272 5047
+5274 5101
+5276 4732
+5278 4789
+5281 4984
+5283 4820
+5285 4762
+5288 4758
+5290 5325
+5292 5300
+5295 5152
+5297 5128
+5299 4924
+5302 4948
+5304 4948
+5306 4948
+5308 4993
+5311 4662
+5313 5063
+5315 5118
+5318 4630
+5320 5277
+5322 4788
+5325 5040
+5327 4895
+5329 4819
+5331 4819
+5334 4972
+5336 5243
+5338 4697
+5341 4708
+5343 4735
+5345 4944
+5348 5163
+5350 5094
+5352 4961
+5354 4702
+5357 4737
+5359 5242
+5361 4990
+5364 4830
+5366 5019
+5368 4972
+5371 4972
+5373 5282
+5375 5063
+5378 5126
+5380 5103
+5382 5103
+5384 4722
+5387 5052
+5389 5354
+5391 4988
+5394 4971
+5396 4941
+5398 4941
+5401 4961
+5403 4670
+5405 4846
+5407 4982
+5410 4975
+5412 5088
+5414 4652
+5417 5151
+5419 5213
+5421 4920
+5424 5019
+5426 5019
+5428 4846
+5431 5164
+5433 4990
+5435 4942
+5437 4957
+5440 5141
+5442 5118
+5444 4895
+5447 5205
+5449 5178
+5451 5178
+5454 4697
+5456 4697
+5458 4591
+5460 5278
+5463 5107
+5465 4720
+5467 4883
+5470 5075
+5472 5075
+5474 5060
+5477 5473
+5479 4735
+5481 4941
+5484 5004
+5486 5054
+5488 4836
+5490 5050
+5493 5047
+5495 4856
+5497 5001
+5500 4828
+5502 4963
+5504 5065
+5507 4942
+5509 4840
+5511 5395
+5513 4773
+5516 4962
+5518 4972
+5520 5125
+5523 5100
+5525 5015
+5527 5017
+5530 4844
+5532 5343
+5534 5009
+5537 5065
+5539 5384
+5541 5182
+5543 5004
+5546 5109
+5548 4874
+5550 4995
+5553 4971
+5555 5002
+5557 5002
+5560 4792
+5562 4593
+5564 4773
+5566 4773
+5569 5186
+5571 5155
+5573 4967
+5576 4978
+5578 4731
+5580 5171
+5583 4789
+5585 4789
+5587 4789
+5590 4996
+5592 4996
+5594 5008
+5596 4823
+5599 4823
+5601 4875
+5603 5014
+5606 5230
+5608 4985
+5610 4865
+5613 4880
+5615 5204
+5617 5122
+5619 4957
+5622 4826
+5624 4835
+5626 4881
+5629 5042
+5631 5197
+5633 5026
+5636 4863
+5638 5049
+5640 4837
+5642 4870
+5645 5100
+5647 5098
+5649 5138
+5652 4545
+5654 4803
+5656 4999
+5659 4950
+5661 4913
+5663 4995
+5666 5133
+5668 4899
+5670 4799
+5672 4887
+5675 4798
+5677 5091
+5679 4990
+5682 4853
+5684 5096
+5686 5096
+5689 5032
+5691 5032
+5693 5032
+5695 4999
+5698 4791
+5700 4800
+5702 4800
+5705 4874
+5707 4856
+5709 4943
+5712 4808
+5714 5105
+5716 5032
+5719 4985
+5721 4745
+5723 4780
+5725 5016
+5728 5016
+5730 5063
+5732 4903
+5735 5186
+5737 4701
+5739 5222
+5742 5039
+5744 5016
+5746 5016
+5748 4882
+5751 5087
+5753 5087
+5755 5115
+5758 5402
+5760 4911
+5762 5054
+5765 5054
+5767 4908
+5769 4908
+5772 4973
+5774 4989
+5776 4989
+5778 5011
+5781 4889
+5783 5015
+5785 5077
+5788 5139
+5790 5245
+5792 4767
+5795 5118
+5797 4922
+5799 5041
+5801 5007
+5804 5073
+5806 5039
+5808 4969
+5811 5111
+5813 5111
+5815 4875
+5818 5111
+5820 4901
+5822 4912
+5825 5042
+5827 4773
+5829 4886
+5831 5244
+5834 4826
+5836 4982
+5838 4996
+5841 4996
+5843 4996
+5845 5085
+5848 5017
+5850 5017
+5852 5037
+5854 4850
+5857 5118
+5859 4948
+5861 4755
+5864 5069
+5866 5172
+5868 4966
+5871 4717
+5873 5193
+5875 5160
+5878 4758
+5880 4785
+5882 5106
+5884 4889
+5887 4898
+5889 4921
+5891 4921
+5894 4709
+5896 5255
+5898 4906
+5901 4906
+5903 4799
+5905 4860
+5907 4912
+5910 5085
+5912 4821
+5914 5015
+5917 4876
+5919 4908
+5921 4996
+5924 4996
+5926 4870
+5928 5102
+5930 4948
+5933 4804
+5935 4804
+5937 4899
+5940 4973
+5942 4973
+5944 4973
+5947 5193
+5949 5193
+5951 5197
+5954 5084
+5956 4980
+5958 4844
+5960 5138
+5963 5081
+5965 4743
+5967 5055
+5970 5055
+5972 4734
+5974 4863
+5977 5062
+5979 5103
+5981 4989
+5983 4952
+5986 5019
+5988 4744
+5990 4856
+5993 5131
+5995 5131
+5997 4985
+6000 4926
+6002 5111
+6004 5012
+6007 5207
+6009 5159
+6011 5159
+6013 5026
+6016 5159
+6018 4791
+6020 5094
+6023 5122
+6025 4870
+6027 5126
+6030 5008
+6032 4911
+6034 4772
+6036 5192
+6039 4828
+6041 4813
+6043 4813
+6046 4811
+6048 4961
+6050 5075
+6053 5075
+6055 4982
+6057 4882
+6060 5048
+6062 4684
+6064 5190
+6066 4956
+6069 4956
+6071 5168
+6073 4899
+6076 4891
+6078 4754
+6080 4754
+6083 4910
+6085 5053
+6087 5057
+6089 4921
+6092 4921
+6094 4899
+6096 4899
+6099 5004
+6101 5009
+6103 5009
+6106 4985
+6108 4934
+6110 4934
+6113 5063
+6115 5063
+6117 5040
+6119 5040
+6122 4826
+6124 4802
+6126 4729
+6129 4729
+6131 4903
+6133 4951
+6136 5091
+6138 5091
+6140 5009
+6142 4810
+6145 5070
+6147 4822
+6149 5028
+6152 5028
+6154 4874
+6156 4985
+6159 4952
+6161 4918
+6163 4790
+6166 4972
+6168 4944
+6170 4873
+6172 4924
+6175 4723
+6177 4942
+6179 4994
+6182 4958
+6184 4958
+6186 4958
+6189 4975
+6191 5000
+6193 5267
+6195 5080
+6198 4910
+6200 4838
+6202 4838
+6205 5128
+6207 5136
+6209 4845
+6212 4840
+6214 4840
+6216 4840
+6218 4840
+6221 4897
+6223 5000
+6225 4893
+6228 5148
+6230 4831
+6232 4994
+6235 4908
+6237 5023
+6239 5014
+6242 5032
+6244 5032
+6246 5060
+6248 4918
+6251 4918
+6253 4999
+6255 4919
+6258 4925
+6260 4957
+6262 5204
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+6262 5204
+6265 4829
+6267 4977
+6269 4803
+6271 5030
+6274 5015
+6276 4984
+6278 4984
+6281 4919
+6283 4890
+6285 4928
+6288 4928
+6290 4928
+6292 4928
+6295 4966
+6297 5039
+6299 5039
+6301 5163
+6304 4981
+6306 4823
+6308 4979
+6311 4943
+6313 4856
+6315 4856
+6318 4856
+6320 4849
+6322 4961
+6324 4948
+6327 4948
+6329 4973
+6331 4926
+6334 4926
+6336 4967
+6338 4952
+6341 5017
+6343 5017
+6345 4924
+6348 4851
+6350 4971
+6352 4965
+6354 4965
+6357 5061
+6359 4912
+6361 4949
+6364 4949
+6366 4949
+6368 5015
+6371 4796
+6373 4853
+6375 4857
+6377 4863
+6380 4835
+6382 4835
+6384 4929
+6387 4929
+6389 5048
+6391 4861
+6394 4954
+6396 4954
+6398 4721
+6401 4981
+6403 4883
+6405 4883
+6407 4883
+6410 5004
+6412 5062
+6414 5053
+6417 5053
+6419 5053
+6421 4855
+6424 4965
+6426 4965
+6428 4867
+6430 4867
+6433 5011
+6435 4928
+6437 5022
+6440 5022
+6442 5022
+6444 4956
+6447 4811
+6449 4995
+6451 4969
+6454 4850
+6456 5041
+6458 5007
+6460 5079
+6463 4849
+6465 4990
+6467 4990
+6470 5034
+6472 4899
+6474 4899
+6477 4840
+6479 4936
+6481 5032
+6483 5005
+6486 4909
+6488 5033
+6490 5033
+6493 5121
+6495 5043
+6497 5062
+6500 5062
+6502 5008
+6504 4966
+6506 4891
+6509 4914
+6511 4884
+6513 4884
+6516 4990
+6518 4990
+6520 4990
+6523 4990
+6525 5066
+6527 5022
+6530 4993
+6532 4889
+6534 5020
+6536 5020
+6539 5076
+6541 4916
+6543 5141
+6546 5098
+6548 5081
+6550 4851
+6553 5033
+6555 4977
+6557 4977
+6559 5003
+6562 4821
+6564 5113
+6566 4972
+6569 5022
+6571 4912
+6573 5009
+6576 5009
+6578 5034
+6580 4985
+6583 5099
+6585 4979
+6587 4942
+6589 4942
+6592 4978
+6594 4898
+6596 4999
+6599 4999
+6601 4999
+6603 4999
+6606 4773
+6608 5153
+6610 5153
+6612 4942
+6615 4932
+6617 4969
+6619 5016
+6622 5016
+6624 5057
+6626 4999
+6629 4802
+6631 4967
+6633 5076
+6636 4861
+6638 4861
+6640 4861
+6642 4911
+6645 5018
+6647 5018
+6649 5050
+6652 5050
+6654 5007
+6656 5007
+6659 4989
+6661 4989
+6663 4989
+6665 4919
+6668 5017
+6670 5017
+6672 4934
+6675 4808
+6677 4878
+6679 4878
+6682 4873
+6684 4952
+6686 4911
+6689 4901
+6691 4901
+6693 4831
+6695 4831
+6698 5011
+6700 4972
+6702 4972
+6705 4972
+6707 4972
+6709 4954
+6712 5140
+6714 5034
+6716 4957
+6718 4952
+6721 4952
+6723 4952
+6725 4989
+6728 4992
+6730 5035
+6732 5042
+6735 5042
+6737 5042
+6739 4941
+6742 4941
+6744 4941
+6746 5009
+6748 5009
+6751 4980
+6753 5004
+6755 4971
+6758 5020
+6760 5020
+6762 4901
+6765 4952
+6767 4994
+6769 4924
+6771 4924
+6774 4924
+6776 4924
+6778 4924
+6781 4939
+6783 5005
+6785 4866
+6788 4866
+6790 5088
+6792 4807
+6794 4807
+6797 5005
+6799 4937
+6801 4937
+6804 4937
+6806 4937
+6808 5052
+6811 4903
+6813 4903
+6815 4903
+6818 4903
+6820 5019
+6822 4933
+6824 4933
+6827 5038
+6829 5048
+6831 4959
+6834 5007
+6836 4936
+6838 4973
+6841 4943
+6843 4963
+6845 4835
+6847 4980
+6850 4980
+6852 4981
+6854 4980
+6857 4980
+6859 5043
+6861 4970
+6864 4985
+6866 4965
+6868 4965
+6871 4993
+6873 4993
+6875 4993
+6877 4905
+6880 4905
+6882 4905
+6884 4905
+6887 5031
+6889 4873
+6891 4963
+6894 4878
+6896 4921
+6898 4921
+6900 4921
+6903 4921
+6905 4921
+6907 4868
+6910 4971
+6912 4971
+6914 4971
+6917 5008
+6919 4925
+6921 4925
+6924 4902
+6926 4926
+6928 4926
+6930 4990
+6933 4990
+6935 4990
+6937 5024
+6940 5024
+6942 5024
+6944 4917
+6947 4917
+6949 5052
+6951 5052
+6953 5008
+6956 4971
+6958 4971
+6960 4971
+6963 4925
+6965 4936
+6967 4829
+6970 4920
+6972 4884
+6974 4901
+6977 4861
+6979 4890
+6981 5026
+6983 5008
+6986 4901
+6988 4881
+6990 4881
+6993 4894
+6995 4904
+6997 5007
+7000 5007
+7002 5007
+7004 5007
+7006 5007
+7009 5007
+7011 4993
+7013 4993
+7016 5034
+7018 5034
+7020 5034
+7023 5034
+7025 4883
+7027 5040
+7030 4933
+7032 4933
+7034 4933
+7036 4933
+7039 4933
+7041 4933
+7043 4933
+7046 4933
+7048 4933
+7050 4933
+7053 4933
+7055 4964
+7057 4893
+7059 4876
+7062 4919
+7064 4919
+7066 4919
+7069 4919
+7071 4896
+7073 5002
+7076 4855
+7078 4955
+7080 5032
+7082 4996
+7085 4996
+7087 4996
+7089 4973
+7092 5095
+7094 4850
+7096 4901
+7099 4904
+7101 4904
+7103 4904
+7106 4904
+7108 4904
+7110 4996
+7112 4886
+7115 4886
+7117 4919
+7119 4919
+7122 4919
+7124 5023
+7126 4913
+7129 4913
+7131 4913
+7133 4913
+7135 4913
+7138 5032
+7140 4971
+7142 4971
+7145 4971
+7147 4971
+7149 4971
+7152 4971
+7154 4971
+7156 4971
+7159 4971
+7161 4926
+7163 5022
+7165 5005
+7168 5005
+7170 4882
+7172 4922
+7175 4924
+7177 4924
+7179 4924
+7182 4924
+7184 5028
+7186 4879
+7188 4879
+7191 4879
+7193 4879
+7195 4965
+7198 4965
+7200 4939
+7202 4875
+7205 4909
+7207 4973
+7209 4973
+7212 4987
+7214 4903
+7216 4903
+7218 4903
+7221 4903
+7223 4903
+7225 4965
+7228 4965
+7230 4944
+7232 4989
+7235 4883
+7237 4883
+7239 4973
+7241 4952
+7244 4952
+7246 4994
+7248 4994
+7251 4993
+7253 4957
+7255 4996
+7258 4924
+7260 4985
+7262 4985
+7265 4943
+7267 4943
+7269 4943
+7271 4943
+7274 4943
+7276 4880
+7278 4875
+7281 4899
+7283 4822
+7285 4883
+7288 4883
+7290 4883
+7292 4883
+7294 4922
+7297 4922
+7299 5007
+7301 5007
+7304 5001
+7306 5001
+7308 5001
+7311 4969
+7313 4882
+7315 4956
+7318 4956
+7320 4920
+7322 4920
+7324 4920
+7327 4911
+7329 4911
+7331 4944
+7334 4924
+7336 4924
+7338 5050
+7341 5050
+7343 5063
+7345 4922
+7347 4922
+7350 4922
+7352 4922
+7354 4979
+7357 4979
+7359 4932
+7361 4970
+7364 5004
+7366 4972
+7368 4972
+7370 4972
+7373 4972
+7375 4972
+7377 4939
+7380 4939
+7382 4939
+7384 4939
+7387 4939
+7389 4859
+7391 4842
+7394 4999
+7396 4999
+7398 4999
+7400 4929
+7403 4929
+7405 4929
+7407 4958
+7410 4996
+7412 4996
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 500
+7412 4996
+7414 5039
+7417 5039
+7419 5035
+7421 4922
+7423 4952
+7426 5009
+7428 4898
+7430 4898
+7433 4898
+7435 4868
+7437 5033
+7440 5033
+7442 5033
+7444 5033
+7447 5033
+7449 4988
+7451 4988
+7453 4941
+7456 5012
+7458 4980
+7460 4980
+7463 4980
+7465 5018
+7467 4935
+7470 4935
+7472 4962
+7474 4962
+7476 4962
+7479 4996
+7481 4996
+7483 4959
+7486 4959
+7488 4973
+7490 4973
+7493 4973
+7495 4999
+7497 5052
+7500 5102
+7502 5066
+7504 5066
+7506 5066
+7509 4905
+7511 4905
+7513 4905
+7516 4965
+7518 4961
+7520 4961
+7523 4961
+7525 4961
+7527 4994
+7529 4994
+7532 5001
+7534 4928
+7536 5045
+7539 5045
+7541 5045
+7543 5023
+7546 4995
+7548 4974
+7550 4974
+7553 5037
+7555 4990
+7557 4990
+7559 4990
+7562 4990
+7564 4990
+7566 4990
+7569 4990
+7571 4990
+7573 4905
+7576 4905
+7578 4905
+7580 4905
+7582 5017
+7585 5017
+7587 4984
+7589 5049
+7592 4999
+7594 4999
+7596 4999
+7599 4931
+7601 4981
+7603 4981
+7606 4981
+7608 5007
+7610 5007
+7612 5007
+7615 5007
+7617 4948
+7619 4950
+7622 4950
+7624 4979
+7626 4935
+7629 4935
+7631 4935
+7633 4936
+7635 4956
+7638 4956
+7640 5011
+7642 5011
+7645 5011
+7647 5011
+7649 5011
+7652 5011
+7654 4984
+7656 5012
+7658 5012
+7661 4975
+7663 4975
+7665 4975
+7668 4975
+7670 4916
+7672 4916
+7675 4903
+7677 4903
+7679 4903
+7682 4979
+7684 4979
+7686 4949
+7688 4871
+7691 4852
+7693 4852
+7695 5010
+7698 5010
+7700 5010
+7702 5010
+7705 4982
+7707 4911
+7709 5007
+7711 4901
+7714 4924
+7716 4954
+7718 4954
+7721 4954
+7723 4956
+7725 4967
+7728 4967
+7730 4967
+7732 4947
+7735 4947
+7737 4948
+7739 4948
+7741 4948
+7744 4948
+7746 4948
+7748 4948
+7751 4919
+7753 5012
+7755 4956
+7758 4956
+7760 4956
+7762 4956
+7764 4956
+7767 4961
+7769 4961
+7771 4980
+7774 4980
+7776 4980
+7778 4980
+7781 4980
+7783 4980
+7785 4980
+7788 4959
+7790 4959
+7792 4959
+7794 4959
+7797 4959
+7799 4959
+7801 4959
+7804 5049
+7806 5049
+7808 4919
+7811 5015
+7813 5015
+7815 5015
+7817 5015
+7820 5015
+7822 5010
+7824 4959
+7827 4959
+7829 4959
+7831 4980
+7834 4980
+7836 4980
+7838 4966
+7841 4966
+7843 4966
+7845 4966
+7847 4974
+7850 4974
+7852 5012
+7854 4913
+7857 4913
+7859 4952
+7861 4952
+7864 4952
+7866 4952
+7868 4952
+7870 4986
+7873 4942
+7875 4942
+7877 4919
+7880 5031
+7882 5031
+7884 5031
+7887 4927
+7889 4927
+7891 4966
+7894 4966
+7896 5030
+7898 4948
+7900 4948
+7903 4948
+7905 4975
+7907 4975
+7910 4967
+7912 4888
+7914 4917
+7917 4987
+7919 4944
+7921 4909
+7923 4909
+7926 4909
+7928 4975
+7930 4975
+7933 4975
+7935 4916
+7937 4921
+7940 4950
+7942 4950
+7944 4979
+7946 4979
+7949 4979
+7951 4979
+7953 4979
+7956 4972
+7958 4947
+7960 4980
+7963 4946
+7965 4946
+7967 4940
+7970 4940
+7972 4940
+7974 4940
+7976 4975
+7979 4989
+7981 4989
+7983 4989
+7986 4936
+7988 5001
+7990 5001
+7993 5001
+7995 4965
+7997 4933
+7999 4933
+8002 4948
+8004 4971
+8006 4971
+8009 4971
+8011 4971
+8013 4971
+8016 4979
+8018 4979
+8020 4979
+8023 4969
+8025 5017
+8027 5017
+8029 5017
+8032 4928
+8034 4966
+8036 4940
+8039 4940
+8041 4940
+8043 4940
+8046 4940
+8048 4940
+8050 5024
+8052 5024
+8055 5024
+8057 4995
+8059 4996
+8062 4996
+8064 4996
+8066 4996
+8069 4996
+8071 4996
+8073 4996
+8076 4996
+8078 4996
+8080 4996
+8082 4940
+8085 4940
+8087 4940
+8089 4940
+8092 4980
+8094 4980
+8096 4980
+8099 4996
+8101 4996
+8103 4979
+8105 4990
+8108 4990
+8110 5019
+8112 5019
+8115 5019
+8117 5019
+8119 4944
+8122 4966
+8124 5002
+8126 5002
+8129 5002
+8131 5002
+8133 5002
+8135 5002
+8138 5009
+8140 4946
+8142 4946
+8145 4946
+8147 4946
+8149 5002
+8152 5002
+8154 5002
+8156 5002
+8158 5002
+8161 5002
+8163 5002
+8165 5012
+8168 5012
+8170 5012
+8172 5012
+8175 5012
+8177 4919
+8179 4919
+8182 4980
+8184 4985
+8186 4985
+8188 4985
+8191 4985
+8193 4985
+8195 4985
+8198 4979
+8200 4979
+8202 4937
+8205 4937
+8207 4937
+8209 4937
+8211 4937
+8214 4937
+8216 4937
+8218 4937
+8221 4937
+8223 4937
+8225 4937
+8228 4937
+8230 4937
+8232 4937
+8234 4961
+8237 4966
+8239 4966
+8241 4966
+8244 4966
+8246 4966
+8248 4966
+8251 4966
+8253 4966
+8255 4966
+8258 5002
+8260 5002
+8262 5002
+8264 4995
+8267 4965
+8269 4965
+8271 4965
+8274 4965
+8276 4965
+8278 4933
+8281 4933
+8283 4933
+8285 4933
+8287 4933
+8290 4933
+8292 4933
+8294 4996
+8297 4996
+8299 4996
+8301 4996
+8304 4996
+8306 4996
+8308 4996
+8311 4996
+8313 4996
+8315 4996
+8317 4929
+8320 4988
+8322 4988
+8324 4988
+8327 4939
+8329 4979
+8331 4964
+8334 4964
+8336 4964
+8338 4964
+8340 4964
+8343 4964
+8345 4964
+8347 4964
+8350 4964
+8352 4964
+8354 4964
+8357 4964
+8359 4964
+8361 4964
+8364 4964
+8366 4964
+8368 4964
+8370 4964
+8373 4964
+8375 4964
+8377 4964
+8380 4964
+8382 4964
+8384 4966
+8387 4966
+8389 4966
+8391 4952
+8393 4952
+8396 4952
+8398 4952
+8400 4952
+8403 4986
+8405 4986
+8407 4986
+8410 5018
+8412 5018
+8414 5018
+8417 5018
+8419 5005
+8421 5005
+8423 5005
+8426 5005
+8428 5005
+8430 4949
+8433 4949
+8435 4941
+8437 4941
+8440 4941
+8442 4941
+8444 4941
+8446 4961
+8449 4954
+8451 4957
+8453 4957
+8456 4971
+8458 4971
+8460 4970
+8463 4970
+8465 4946
+8467 5009
+8470 5009
+8472 4959
+8474 4959
+8476 4959
+8479 4959
+8481 4984
+8483 5020
+8486 5020
+8488 4914
+8490 4914
+8493 4914
+8495 4973
+8497 4973
+8499 4973
+8502 4973
+8504 4973
+8506 4973
+8509 4973
+8511 4973
+8513 4973
+8516 4973
+8518 4947
+8520 4979
+8522 4979
+8525 4979
+8527 4979
+8529 4979
+8532 4979
+8534 4979
+8536 4955
+8539 4955
+8541 4955
+8543 4955
+8546 4986
+8548 4951
+8550 4951
+8552 4951
+8555 4951
+8557 4951
+8559 4951
+8562 4951
+500 MLine
+End
+
+Begin %I MLine
+[1 0 0 1 0 0 ] trueoriginalCTM originalCTM
+concatmatrix pop
+0 setlinecap 0 setlinejoin 10.43 setmiterlimit
+/eoFillRule true def
+%I b 65535
+0 0 0 [ ] 0 SetB
+%I cfg Black
+0 0 0 SetCFg
+%I cbg White
+1 1 1 SetCBg
+%I p
+none SetP
+%I t
+[0.05 0 0 0.05 18 108 ] concat
+%I 53
+8562 4951
+8564 4943
+8566 4963
+8569 4985
+8571 4985
+8573 4985
+8575 4995
+8578 4996
+8580 4964
+8582 4964
+8585 4981
+8587 4981
+8589 4917
+8592 4959
+8594 4959
+8596 4959
+8599 4959
+8601 4959
+8603 4959
+8605 4959
+8608 4980
+8610 4980
+8612 4980
+8615 4947
+8617 4947
+8619 4947
+8622 4947
+8624 4942
+8626 4929
+8628 4929
+8631 4932
+8633 4932
+8635 4932
+8638 4932
+8640 4932
+8642 4932
+8645 4937
+8647 4937
+8649 4937
+8652 4964
+8654 4964
+8656 4997
+8658 5004
+8661 4973
+8663 4973
+8665 4984
+8668 4984
+8670 4973
+8672 4973
+8675 4973
+8677 4986
+8679 4980
+8681 4980
+53 MLine
+End
+
+%%PageTrailer
+End %I eop
+showpage
+
+%%Trailer
+end
+%%EOF
diff --git a/gsl-1.9/doc/siman.texi b/gsl-1.9/doc/siman.texi
new file mode 100644
index 0000000..902cad7
--- /dev/null
+++ b/gsl-1.9/doc/siman.texi
@@ -0,0 +1,371 @@
+@cindex simulated annealing
+@cindex combinatorial optimization
+@cindex optimization, combinatorial
+@cindex energy function
+@cindex cost function
+Stochastic search techniques are used when the structure of a space is
+not well understood or is not smooth, so that techniques like Newton's
+method (which requires calculating Jacobian derivative matrices) cannot
+be used. In particular, these techniques are frequently used to solve
+combinatorial optimization problems, such as the traveling salesman
+problem.
+
+The goal is to find a point in the space at which a real valued
+@dfn{energy function} (or @dfn{cost function}) is minimized. Simulated
+annealing is a minimization technique which has given good results in
+avoiding local minima; it is based on the idea of taking a random walk
+through the space at successively lower temperatures, where the
+probability of taking a step is given by a Boltzmann distribution.
+
+The functions described in this chapter are declared in the header file
+@file{gsl_siman.h}.
+
+@menu
+* Simulated Annealing algorithm::
+* Simulated Annealing functions::
+* Examples with Simulated Annealing::
+* Simulated Annealing References and Further Reading::
+@end menu
+
+@node Simulated Annealing algorithm
+@section Simulated Annealing algorithm
+
+The simulated annealing algorithm takes random walks through the problem
+space, looking for points with low energies; in these random walks, the
+probability of taking a step is determined by the Boltzmann distribution,
+@tex
+\beforedisplay
+$$
+p = e^{-(E_{i+1} - E_i)/(kT)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+p = e^@{-(E_@{i+1@} - E_i)/(kT)@}
+@end example
+
+@end ifinfo
+@noindent
+if
+@c{$E_{i+1} > E_i$}
+@math{E_@{i+1@} > E_i}, and
+@math{p = 1} when
+@c{$E_{i+1} \le E_i$}
+@math{E_@{i+1@} <= E_i}.
+
+In other words, a step will occur if the new energy is lower. If
+the new energy is higher, the transition can still occur, and its
+likelihood is proportional to the temperature @math{T} and inversely
+proportional to the energy difference
+@c{$E_{i+1} - E_i$}
+@math{E_@{i+1@} - E_i}.
+
+The temperature @math{T} is initially set to a high value, and a random
+walk is carried out at that temperature. Then the temperature is
+lowered very slightly according to a @dfn{cooling schedule}, for
+example: @c{$T \rightarrow T/\mu_T$}
+@math{T -> T/mu_T}
+where @math{\mu_T} is slightly greater than 1.
+@cindex cooling schedule
+@cindex schedule, cooling
+
+The slight probability of taking a step that gives higher energy is what
+allows simulated annealing to frequently get out of local minima.
+
+@node Simulated Annealing functions
+@section Simulated Annealing functions
+
+@deftypefun void gsl_siman_solve (const gsl_rng * @var{r}, void * @var{x0_p}, gsl_siman_Efunc_t @var{Ef}, gsl_siman_step_t @var{take_step}, gsl_siman_metric_t @var{distance}, gsl_siman_print_t @var{print_position}, gsl_siman_copy_t @var{copyfunc}, gsl_siman_copy_construct_t @var{copy_constructor}, gsl_siman_destroy_t @var{destructor}, size_t @var{element_size}, gsl_siman_params_t @var{params})
+
+This function performs a simulated annealing search through a given
+space. The space is specified by providing the functions @var{Ef} and
+@var{distance}. The simulated annealing steps are generated using the
+random number generator @var{r} and the function @var{take_step}.
+
+The starting configuration of the system should be given by @var{x0_p}.
+The routine offers two modes for updating configurations, a fixed-size
+mode and a variable-size mode. In the fixed-size mode the configuration
+is stored as a single block of memory of size @var{element_size}.
+Copies of this configuration are created, copied and destroyed
+internally using the standard library functions @code{malloc},
+@code{memcpy} and @code{free}. The function pointers @var{copyfunc},
+@var{copy_constructor} and @var{destructor} should be null pointers in
+fixed-size mode. In the variable-size mode the functions
+@var{copyfunc}, @var{copy_constructor} and @var{destructor} are used to
+create, copy and destroy configurations internally. The variable
+@var{element_size} should be zero in the variable-size mode.
+
+The @var{params} structure (described below) controls the run by
+providing the temperature schedule and other tunable parameters to the
+algorithm.
+
+On exit the best result achieved during the search is placed in
+@code{*@var{x0_p}}. If the annealing process has been successful this
+should be a good approximation to the optimal point in the space.
+
+If the function pointer @var{print_position} is not null, a debugging
+log will be printed to @code{stdout} with the following columns:
+
+@example
+number_of_iterations temperature x x-(*x0_p) Ef(x)
+@end example
+
+and the output of the function @var{print_position} itself. If
+@var{print_position} is null then no information is printed.
+@end deftypefun
+
+@noindent
+The simulated annealing routines require several user-specified
+functions to define the configuration space and energy function. The
+prototypes for these functions are given below.
+
+@deftp {Data Type} gsl_siman_Efunc_t
+This function type should return the energy of a configuration @var{xp}.
+
+@example
+double (*gsl_siman_Efunc_t) (void *xp)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_step_t
+This function type should modify the configuration @var{xp} using a random step
+taken from the generator @var{r}, up to a maximum distance of
+@var{step_size}.
+
+@example
+void (*gsl_siman_step_t) (const gsl_rng *r, void *xp,
+ double step_size)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_metric_t
+This function type should return the distance between two configurations
+@var{xp} and @var{yp}.
+
+@example
+double (*gsl_siman_metric_t) (void *xp, void *yp)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_print_t
+This function type should print the contents of the configuration @var{xp}.
+
+@example
+void (*gsl_siman_print_t) (void *xp)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_copy_t
+This function type should copy the configuration @var{source} into @var{dest}.
+
+@example
+void (*gsl_siman_copy_t) (void *source, void *dest)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_copy_construct_t
+This function type should create a new copy of the configuration @var{xp}.
+
+@example
+void * (*gsl_siman_copy_construct_t) (void *xp)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_destroy_t
+This function type should destroy the configuration @var{xp}, freeing its
+memory.
+
+@example
+void (*gsl_siman_destroy_t) (void *xp)
+@end example
+@end deftp
+
+@deftp {Data Type} gsl_siman_params_t
+These are the parameters that control a run of @code{gsl_siman_solve}.
+This structure contains all the information needed to control the
+search, beyond the energy function, the step function and the initial
+guess.
+
+@table @code
+@item int n_tries
+The number of points to try for each step.
+
+@item int iters_fixed_T
+The number of iterations at each temperature.
+
+@item double step_size
+The maximum step size in the random walk.
+
+@item double k, t_initial, mu_t, t_min
+The parameters of the Boltzmann distribution and cooling schedule.
+@end table
+@end deftp
+
+
+@node Examples with Simulated Annealing
+@section Examples
+
+The simulated annealing package is clumsy, and it has to be because it
+is written in C, for C callers, and tries to be polymorphic at the same
+time. But here we provide some examples which can be pasted into your
+application with little change and should make things easier.
+
+@menu
+* Trivial example::
+* Traveling Salesman Problem::
+@end menu
+
+@node Trivial example
+@subsection Trivial example
+
+The first example, in one dimensional cartesian space, sets up an energy
+function which is a damped sine wave; this has many local minima, but
+only one global minimum, somewhere between 1.0 and 1.5. The initial
+guess given is 15.5, which is several local minima away from the global
+minimum.
+
+@smallexample
+@verbatiminclude examples/siman.c
+@end smallexample
+
+@need 2000
+Here are a couple of plots that are generated by running
+@code{siman_test} in the following way:
+
+@example
+$ ./siman_test | awk '!/^#/ @{print $1, $4@}'
+ | graph -y 1.34 1.4 -W0 -X generation -Y position
+ | plot -Tps > siman-test.eps
+$ ./siman_test | awk '!/^#/ @{print $1, $4@}'
+ | graph -y -0.88 -0.83 -W0 -X generation -Y energy
+ | plot -Tps > siman-energy.eps
+@end example
+
+@iftex
+@sp 1
+@center @image{siman-test,2.8in}
+@center @image{siman-energy,2.8in}
+
+@quotation
+Example of a simulated annealing run: at higher temperatures (early in
+the plot) you see that the solution can fluctuate, but at lower
+temperatures it converges.
+@end quotation
+@end iftex
+
+@node Traveling Salesman Problem
+@subsection Traveling Salesman Problem
+@cindex TSP
+@cindex traveling salesman problem
+
+The TSP (@dfn{Traveling Salesman Problem}) is the classic combinatorial
+optimization problem. I have provided a very simple version of it,
+based on the coordinates of twelve cities in the southwestern United
+States. This should maybe be called the @dfn{Flying Salesman Problem},
+since I am using the great-circle distance between cities, rather than
+the driving distance. Also: I assume the earth is a sphere, so I don't
+use geoid distances.
+
+The @code{gsl_siman_solve} routine finds a route which is 3490.62
+Kilometers long; this is confirmed by an exhaustive search of all
+possible routes with the same initial city.
+
+The full code can be found in @file{siman/siman_tsp.c}, but I include
+here some plots generated in the following way:
+
+@smallexample
+$ ./siman_tsp > tsp.output
+$ grep -v "^#" tsp.output
+ | awk '@{print $1, $NF@}'
+ | graph -y 3300 6500 -W0 -X generation -Y distance
+ -L "TSP - 12 southwest cities"
+ | plot -Tps > 12-cities.eps
+$ grep initial_city_coord tsp.output
+ | awk '@{print $2, $3@}'
+ | graph -X "longitude (- means west)" -Y "latitude"
+ -L "TSP - initial-order" -f 0.03 -S 1 0.1
+ | plot -Tps > initial-route.eps
+$ grep final_city_coord tsp.output
+ | awk '@{print $2, $3@}'
+ | graph -X "longitude (- means west)" -Y "latitude"
+ -L "TSP - final-order" -f 0.03 -S 1 0.1
+ | plot -Tps > final-route.eps
+@end smallexample
+
+@noindent
+This is the output showing the initial order of the cities; longitude is
+negative, since it is west and I want the plot to look like a map.
+
+@smallexample
+# initial coordinates of cities (longitude and latitude)
+###initial_city_coord: -105.95 35.68 Santa Fe
+###initial_city_coord: -112.07 33.54 Phoenix
+###initial_city_coord: -106.62 35.12 Albuquerque
+###initial_city_coord: -103.2 34.41 Clovis
+###initial_city_coord: -107.87 37.29 Durango
+###initial_city_coord: -96.77 32.79 Dallas
+###initial_city_coord: -105.92 35.77 Tesuque
+###initial_city_coord: -107.84 35.15 Grants
+###initial_city_coord: -106.28 35.89 Los Alamos
+###initial_city_coord: -106.76 32.34 Las Cruces
+###initial_city_coord: -108.58 37.35 Cortez
+###initial_city_coord: -108.74 35.52 Gallup
+###initial_city_coord: -105.95 35.68 Santa Fe
+@end smallexample
+
+The optimal route turns out to be:
+
+@smallexample
+# final coordinates of cities (longitude and latitude)
+###final_city_coord: -105.95 35.68 Santa Fe
+###final_city_coord: -106.28 35.89 Los Alamos
+###final_city_coord: -106.62 35.12 Albuquerque
+###final_city_coord: -107.84 35.15 Grants
+###final_city_coord: -107.87 37.29 Durango
+###final_city_coord: -108.58 37.35 Cortez
+###final_city_coord: -108.74 35.52 Gallup
+###final_city_coord: -112.07 33.54 Phoenix
+###final_city_coord: -106.76 32.34 Las Cruces
+###final_city_coord: -96.77 32.79 Dallas
+###final_city_coord: -103.2 34.41 Clovis
+###final_city_coord: -105.92 35.77 Tesuque
+###final_city_coord: -105.95 35.68 Santa Fe
+@end smallexample
+
+@iftex
+@sp 1
+@center @image{initial-route,2.2in}
+@center @image{final-route,2.2in}
+
+@quotation
+Initial and final (optimal) route for the 12 southwestern cities Flying
+Salesman Problem.
+@end quotation
+@end iftex
+
+@noindent
+Here's a plot of the cost function (energy) versus generation (point in
+the calculation at which a new temperature is set) for this problem:
+
+@iftex
+@sp 1
+@center @image{12-cities,2.8in}
+
+@quotation
+Example of a simulated annealing run for the 12 southwestern cities
+Flying Salesman Problem.
+@end quotation
+@end iftex
+
+@node Simulated Annealing References and Further Reading
+@section References and Further Reading
+
+Further information is available in the following book,
+
+@itemize @asis
+@item
+@cite{Modern Heuristic Techniques for Combinatorial Problems}, Colin R. Reeves
+(ed.), McGraw-Hill, 1995 (ISBN 0-07-709239-2).
+@end itemize
diff --git a/gsl-1.9/doc/sort.texi b/gsl-1.9/doc/sort.texi
new file mode 100644
index 0000000..3e5f216
--- /dev/null
+++ b/gsl-1.9/doc/sort.texi
@@ -0,0 +1,315 @@
+@cindex sorting
+@cindex heapsort
+This chapter describes functions for sorting data, both directly and
+indirectly (using an index). All the functions use the @dfn{heapsort}
+algorithm. Heapsort is an @math{O(N \log N)} algorithm which operates
+in-place and does not require any additional storage. It also provides
+consistent performance, the running time for its worst-case (ordered
+data) being not significantly longer than the average and best cases.
+Note that the heapsort algorithm does not preserve the relative ordering
+of equal elements---it is an @dfn{unstable} sort. However the resulting
+order of equal elements will be consistent across different platforms
+when using these functions.
+
+@menu
+* Sorting objects::
+* Sorting vectors::
+* Selecting the k smallest or largest elements::
+* Computing the rank::
+* Sorting Examples::
+* Sorting References and Further Reading::
+@end menu
+
+@node Sorting objects
+@section Sorting objects
+
+The following function provides a simple alternative to the standard
+library function @code{qsort}. It is intended for systems lacking
+@code{qsort}, not as a replacement for it. The function @code{qsort}
+should be used whenever possible, as it will be faster and can provide
+stable ordering of equal elements. Documentation for @code{qsort} is
+available in the @cite{GNU C Library Reference Manual}.
+
+The functions described in this section are defined in the header file
+@file{gsl_heapsort.h}.
+
+@cindex comparison functions, definition
+@deftypefun void gsl_heapsort (void * @var{array}, size_t @var{count}, size_t @var{size}, gsl_comparison_fn_t @var{compare})
+
+This function sorts the @var{count} elements of the array @var{array},
+each of size @var{size}, into ascending order using the comparison
+function @var{compare}. The type of the comparison function is defined by,
+
+@example
+int (*gsl_comparison_fn_t) (const void * a,
+ const void * b)
+@end example
+
+@noindent
+A comparison function should return a negative integer if the first
+argument is less than the second argument, @code{0} if the two arguments
+are equal and a positive integer if the first argument is greater than
+the second argument.
+
+For example, the following function can be used to sort doubles into
+ascending numerical order.
+
+@example
+int
+compare_doubles (const double * a,
+ const double * b)
+@{
+ if (*a > *b)
+ return 1;
+ else if (*a < *b)
+ return -1;
+ else
+ return 0;
+@}
+@end example
+
+@noindent
+The appropriate function call to perform the sort is,
+
+@example
+gsl_heapsort (array, count, sizeof(double),
+ compare_doubles);
+@end example
+
+Note that unlike @code{qsort} the heapsort algorithm cannot be made into
+a stable sort by pointer arithmetic. The trick of comparing pointers for
+equal elements in the comparison function does not work for the heapsort
+algorithm. The heapsort algorithm performs an internal rearrangement of
+the data which destroys its initial ordering.
+@end deftypefun
+
+@cindex indirect sorting
+@deftypefun int gsl_heapsort_index (size_t * @var{p}, const void * @var{array}, size_t @var{count}, size_t @var{size}, gsl_comparison_fn_t @var{compare})
+
+This function indirectly sorts the @var{count} elements of the array
+@var{array}, each of size @var{size}, into ascending order using the
+comparison function @var{compare}. The resulting permutation is stored
+in @var{p}, an array of length @var{n}. The elements of @var{p} give the
+index of the array element which would have been stored in that position
+if the array had been sorted in place. The first element of @var{p}
+gives the index of the least element in @var{array}, and the last
+element of @var{p} gives the index of the greatest element in
+@var{array}. The array itself is not changed.
+@end deftypefun
+
+@node Sorting vectors
+@section Sorting vectors
+
+The following functions will sort the elements of an array or vector,
+either directly or indirectly. They are defined for all real and integer
+types using the normal suffix rules. For example, the @code{float}
+versions of the array functions are @code{gsl_sort_float} and
+@code{gsl_sort_float_index}. The corresponding vector functions are
+@code{gsl_sort_vector_float} and @code{gsl_sort_vector_float_index}. The
+prototypes are available in the header files @file{gsl_sort_float.h}
+@file{gsl_sort_vector_float.h}. The complete set of prototypes can be
+included using the header files @file{gsl_sort.h} and
+@file{gsl_sort_vector.h}.
+
+There are no functions for sorting complex arrays or vectors, since the
+ordering of complex numbers is not uniquely defined. To sort a complex
+vector by magnitude compute a real vector containing the magnitudes
+of the complex elements, and sort this vector indirectly. The resulting
+index gives the appropriate ordering of the original complex vector.
+
+@cindex sorting vector elements
+@cindex vector, sorting elements of
+@deftypefun void gsl_sort (double * @var{data}, size_t @var{stride}, size_t @var{n})
+This function sorts the @var{n} elements of the array @var{data} with
+stride @var{stride} into ascending numerical order.
+@end deftypefun
+
+@deftypefun void gsl_sort_vector (gsl_vector * @var{v})
+This function sorts the elements of the vector @var{v} into ascending
+numerical order.
+@end deftypefun
+
+@cindex indirect sorting, of vector elements
+@deftypefun void gsl_sort_index (size_t * @var{p}, const double * @var{data}, size_t @var{stride}, size_t @var{n})
+This function indirectly sorts the @var{n} elements of the array
+@var{data} with stride @var{stride} into ascending order, storing the
+resulting permutation in @var{p}. The array @var{p} must be allocated with
+a sufficient length to store the @var{n} elements of the permutation.
+The elements of @var{p} give the index of the array element which would
+have been stored in that position if the array had been sorted in place.
+The array @var{data} is not changed.
+@end deftypefun
+
+@deftypefun int gsl_sort_vector_index (gsl_permutation * @var{p}, const gsl_vector * @var{v})
+This function indirectly sorts the elements of the vector @var{v} into
+ascending order, storing the resulting permutation in @var{p}. The
+elements of @var{p} give the index of the vector element which would
+have been stored in that position if the vector had been sorted in
+place. The first element of @var{p} gives the index of the least element
+in @var{v}, and the last element of @var{p} gives the index of the
+greatest element in @var{v}. The vector @var{v} is not changed.
+@end deftypefun
+
+@node Selecting the k smallest or largest elements
+@section Selecting the k smallest or largest elements
+
+The functions described in this section select the @math{k} smallest
+or largest elements of a data set of size @math{N}. The routines use an
+@math{O(kN)} direct insertion algorithm which is suited to subsets that
+are small compared with the total size of the dataset. For example, the
+routines are useful for selecting the 10 largest values from one million
+data points, but not for selecting the largest 100,000 values. If the
+subset is a significant part of the total dataset it may be faster
+to sort all the elements of the dataset directly with an @math{O(N \log
+N)} algorithm and obtain the smallest or largest values that way.
+
+@deftypefun int gsl_sort_smallest (double * @var{dest}, size_t @var{k}, const double * @var{src}, size_t @var{stride}, size_t @var{n})
+This function copies the @var{k} smallest elements of the array
+@var{src}, of size @var{n} and stride @var{stride}, in ascending
+numerical order into the array @var{dest}. The size @var{k} of the subset must be
+less than or equal to @var{n}. The data @var{src} is not modified by
+this operation.
+@end deftypefun
+
+@deftypefun int gsl_sort_largest (double * @var{dest}, size_t @var{k}, const double * @var{src}, size_t @var{stride}, size_t @var{n})
+This function copies the @var{k} largest elements of the array
+@var{src}, of size @var{n} and stride @var{stride}, in descending
+numerical order into the array @var{dest}. @var{k} must be
+less than or equal to @var{n}. The data @var{src} is not modified by
+this operation.
+@end deftypefun
+
+@deftypefun int gsl_sort_vector_smallest (double * @var{dest}, size_t @var{k}, const gsl_vector * @var{v})
+@deftypefunx int gsl_sort_vector_largest (double * @var{dest}, size_t @var{k}, const gsl_vector * @var{v})
+These functions copy the @var{k} smallest or largest elements of the
+vector @var{v} into the array @var{dest}. @var{k}
+must be less than or equal to the length of the vector @var{v}.
+@end deftypefun
+
+The following functions find the indices of the @math{k} smallest or
+largest elements of a dataset,
+
+@deftypefun int gsl_sort_smallest_index (size_t * @var{p}, size_t @var{k}, const double * @var{src}, size_t @var{stride}, size_t @var{n})
+This function stores the indices of the @var{k} smallest elements of
+the array @var{src}, of size @var{n} and stride @var{stride}, in the
+array @var{p}. The indices are chosen so that the corresponding data is
+in ascending numerical order. @var{k} must be
+less than or equal to @var{n}. The data @var{src} is not modified by
+this operation.
+@end deftypefun
+
+@deftypefun int gsl_sort_largest_index (size_t * @var{p}, size_t @var{k}, const double * @var{src}, size_t @var{stride}, size_t @var{n})
+This function stores the indices of the @var{k} largest elements of
+the array @var{src}, of size @var{n} and stride @var{stride}, in the
+array @var{p}. The indices are chosen so that the corresponding data is
+in descending numerical order. @var{k} must be
+less than or equal to @var{n}. The data @var{src} is not modified by
+this operation.
+@end deftypefun
+
+@deftypefun int gsl_sort_vector_smallest_index (size_t * @var{p}, size_t @var{k}, const gsl_vector * @var{v})
+@deftypefunx int gsl_sort_vector_largest_index (size_t * @var{p}, size_t @var{k}, const gsl_vector * @var{v})
+These functions store the indices of the @var{k} smallest or largest
+elements of the vector @var{v} in the array @var{p}. @var{k} must be less than or equal to the length of the vector
+@var{v}.
+@end deftypefun
+
+
+@node Computing the rank
+@section Computing the rank
+
+The @dfn{rank} of an element is its order in the sorted data. The rank
+is the inverse of the index permutation, @var{p}. It can be computed
+using the following algorithm,
+
+@example
+for (i = 0; i < p->size; i++)
+@{
+ size_t pi = p->data[i];
+ rank->data[pi] = i;
+@}
+@end example
+
+@noindent
+This can be computed directly from the function
+@code{gsl_permutation_inverse(rank,p)}.
+
+The following function will print the rank of each element of the vector
+@var{v},
+
+@example
+void
+print_rank (gsl_vector * v)
+@{
+ size_t i;
+ size_t n = v->size;
+ gsl_permutation * perm = gsl_permutation_alloc(n);
+ gsl_permutation * rank = gsl_permutation_alloc(n);
+
+ gsl_sort_vector_index (perm, v);
+ gsl_permutation_inverse (rank, perm);
+
+ for (i = 0; i < n; i++)
+ @{
+ double vi = gsl_vector_get(v, i);
+ printf ("element = %d, value = %g, rank = %d\n",
+ i, vi, rank->data[i]);
+ @}
+
+ gsl_permutation_free (perm);
+ gsl_permutation_free (rank);
+@}
+@end example
+
+@node Sorting Examples
+@section Examples
+
+The following example shows how to use the permutation @var{p} to print
+the elements of the vector @var{v} in ascending order,
+
+@example
+gsl_sort_vector_index (p, v);
+
+for (i = 0; i < v->size; i++)
+@{
+ double vpi = gsl_vector_get (v, p->data[i]);
+ printf ("order = %d, value = %g\n", i, vpi);
+@}
+@end example
+
+@noindent
+The next example uses the function @code{gsl_sort_smallest} to select
+the 5 smallest numbers from 100000 uniform random variates stored in an
+array,
+
+@example
+@verbatiminclude examples/sortsmall.c
+@end example
+The output lists the 5 smallest values, in ascending order,
+
+@example
+$ ./a.out
+@verbatiminclude examples/sortsmall.out
+@end example
+
+@node Sorting References and Further Reading
+@section References and Further Reading
+
+The subject of sorting is covered extensively in Knuth's
+@cite{Sorting and Searching},
+
+@itemize @asis
+@item
+Donald E. Knuth, @cite{The Art of Computer Programming: Sorting and
+Searching} (Vol 3, 3rd Ed, 1997), Addison-Wesley, ISBN 0201896850.
+@end itemize
+
+@noindent
+The Heapsort algorithm is described in the following book,
+
+@itemize @asis
+@item Robert Sedgewick, @cite{Algorithms in C}, Addison-Wesley,
+ISBN 0201514257.
+@end itemize
+
+
diff --git a/gsl-1.9/doc/specfunc-airy.texi b/gsl-1.9/doc/specfunc-airy.texi
new file mode 100644
index 0000000..726f516
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-airy.texi
@@ -0,0 +1,130 @@
+@cindex Airy functions
+@cindex Ai(x)
+@cindex Bi(x)
+
+The Airy functions @math{Ai(x)} and @math{Bi(x)} are defined by the
+integral representations,
+@tex
+\beforedisplay
+$$
+\eqalign{
+Ai(x) & = {1\over\pi} \int_0^\infty \cos(t^3/3 + xt ) \,dt, \cr
+Bi(x) & = {1\over\pi} \int_0^\infty (e^{-t^3/3} + \sin(t^3/3 + xt)) \,dt.
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+Ai(x) = (1/\pi) \int_0^\infty \cos((1/3) t^3 + xt) dt
+Bi(x) = (1/\pi) \int_0^\infty (e^(-(1/3) t^3) + \sin((1/3) t^3 + xt)) dt
+@end example
+
+@end ifinfo
+@noindent
+For further information see Abramowitz & Stegun, Section 10.4. The Airy
+functions are defined in the header file @file{gsl_sf_airy.h}.
+
+@menu
+* Airy Functions::
+* Derivatives of Airy Functions::
+* Zeros of Airy Functions::
+* Zeros of Derivatives of Airy Functions::
+@end menu
+
+@node Airy Functions
+@subsection Airy Functions
+
+@deftypefun double gsl_sf_airy_Ai (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Ai_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the Airy function @math{Ai(x)} with an accuracy
+specified by @var{mode}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_Bi (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Bi_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the Airy function @math{Bi(x)} with an accuracy
+specified by @var{mode}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_Ai_scaled (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Ai_scaled_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute a scaled version of the Airy function
+@math{S_A(x) Ai(x)}. For @math{x>0} the scaling factor @math{S_A(x)} is @c{$\exp(+(2/3) x^{3/2})$}
+@math{\exp(+(2/3) x^(3/2))},
+and is 1
+for @math{x<0}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_Bi_scaled (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Bi_scaled_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute a scaled version of the Airy function
+@math{S_B(x) Bi(x)}. For @math{x>0} the scaling factor @math{S_B(x)} is @c{$\exp(-(2/3) x^{3/2})$}
+@math{exp(-(2/3) x^(3/2))}, and is 1 for @math{x<0}.
+@end deftypefun
+
+
+@node Derivatives of Airy Functions
+@subsection Derivatives of Airy Functions
+
+@deftypefun double gsl_sf_airy_Ai_deriv (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Ai_deriv_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the Airy function derivative @math{Ai'(x)} with
+an accuracy specified by @var{mode}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_Bi_deriv (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Bi_deriv_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the Airy function derivative @math{Bi'(x)} with
+an accuracy specified by @var{mode}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_Ai_deriv_scaled (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Ai_deriv_scaled_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the scaled Airy function derivative
+@math{S_A(x) Ai'(x)}.
+For @math{x>0} the scaling factor @math{S_A(x)} is @c{$\exp(+(2/3) x^{3/2})$}
+@math{\exp(+(2/3) x^(3/2))}, and is 1 for @math{x<0}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_Bi_deriv_scaled (double @var{x}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_airy_Bi_deriv_scaled_e (double @var{x}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the scaled Airy function derivative
+@math{S_B(x) Bi'(x)}.
+For @math{x>0} the scaling factor @math{S_B(x)} is @c{$\exp(-(2/3) x^{3/2})$}
+@math{exp(-(2/3) x^(3/2))}, and is 1 for @math{x<0}.
+@end deftypefun
+
+
+@node Zeros of Airy Functions
+@subsection Zeros of Airy Functions
+
+@deftypefun double gsl_sf_airy_zero_Ai (unsigned int @var{s})
+@deftypefunx int gsl_sf_airy_zero_Ai_e (unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th zero of the Airy
+function @math{Ai(x)}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_zero_Bi (unsigned int @var{s})
+@deftypefunx int gsl_sf_airy_zero_Bi_e (unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th zero of the Airy
+function @math{Bi(x)}.
+@end deftypefun
+
+
+@node Zeros of Derivatives of Airy Functions
+@subsection Zeros of Derivatives of Airy Functions
+
+@deftypefun double gsl_sf_airy_zero_Ai_deriv (unsigned int @var{s})
+@deftypefunx int gsl_sf_airy_zero_Ai_deriv_e (unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th zero of the Airy
+function derivative @math{Ai'(x)}.
+@end deftypefun
+
+@deftypefun double gsl_sf_airy_zero_Bi_deriv (unsigned int @var{s})
+@deftypefunx int gsl_sf_airy_zero_Bi_deriv_e (unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th zero of the Airy
+function derivative @math{Bi'(x)}.
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-bessel.texi b/gsl-1.9/doc/specfunc-bessel.texi
new file mode 100644
index 0000000..e3b09c9
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-bessel.texi
@@ -0,0 +1,585 @@
+@cindex Bessel functions
+
+The routines described in this section compute the Cylindrical Bessel
+functions @math{J_n(x)}, @math{Y_n(x)}, Modified cylindrical Bessel
+functions @math{I_n(x)}, @math{K_n(x)}, Spherical Bessel functions
+@math{j_l(x)}, @math{y_l(x)}, and Modified Spherical Bessel functions
+@math{i_l(x)}, @math{k_l(x)}. For more information see Abramowitz & Stegun,
+Chapters 9 and 10. The Bessel functions are defined in the header file
+@file{gsl_sf_bessel.h}.
+
+@menu
+* Regular Cylindrical Bessel Functions::
+* Irregular Cylindrical Bessel Functions::
+* Regular Modified Cylindrical Bessel Functions::
+* Irregular Modified Cylindrical Bessel Functions::
+* Regular Spherical Bessel Functions::
+* Irregular Spherical Bessel Functions::
+* Regular Modified Spherical Bessel Functions::
+* Irregular Modified Spherical Bessel Functions::
+* Regular Bessel Function - Fractional Order::
+* Irregular Bessel Functions - Fractional Order::
+* Regular Modified Bessel Functions - Fractional Order::
+* Irregular Modified Bessel Functions - Fractional Order::
+* Zeros of Regular Bessel Functions::
+@end menu
+
+@node Regular Cylindrical Bessel Functions
+@subsection Regular Cylindrical Bessel Functions
+@cindex Cylindrical Bessel Functions
+@cindex Regular Cylindrical Bessel Functions
+
+@deftypefun double gsl_sf_bessel_J0 (double @var{x})
+@deftypefunx int gsl_sf_bessel_J0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular cylindrical Bessel function of zeroth
+order, @math{J_0(x)}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_J1 (double @var{x})
+@deftypefunx int gsl_sf_bessel_J1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular cylindrical Bessel function of first
+order, @math{J_1(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Jn (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Jn_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular cylindrical Bessel function of
+order @var{n}, @math{J_n(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_Jn_array (int @var{nmin}, int @var{nmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the regular cylindrical Bessel
+functions @math{J_n(x)} for @math{n} from @var{nmin} to @var{nmax}
+inclusive, storing the results in the array @var{result_array}. The
+values are computed using recurrence relations for efficiency, and
+therefore may differ slightly from the exact values.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Irregular Cylindrical Bessel Functions
+@subsection Irregular Cylindrical Bessel Functions
+@cindex Irregular Cylindrical Bessel Functions
+
+@deftypefun double gsl_sf_bessel_Y0 (double @var{x})
+@deftypefunx int gsl_sf_bessel_Y0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular cylindrical Bessel function of zeroth
+order, @math{Y_0(x)}, for @math{x>0}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Y1 (double @var{x})
+@deftypefunx int gsl_sf_bessel_Y1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular cylindrical Bessel function of first
+order, @math{Y_1(x)}, for @math{x>0}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Yn (int @var{n},double @var{x})
+@deftypefunx int gsl_sf_bessel_Yn_e (int @var{n},double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular cylindrical Bessel function of
+order @var{n}, @math{Y_n(x)}, for @math{x>0}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_Yn_array (int @var{nmin}, int @var{nmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the irregular cylindrical Bessel
+functions @math{Y_n(x)} for @math{n} from @var{nmin} to @var{nmax}
+inclusive, storing the results in the array @var{result_array}. The
+domain of the function is @math{x>0}. The values are computed using
+recurrence relations for efficiency, and therefore may differ slightly
+from the exact values.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Regular Modified Cylindrical Bessel Functions
+@subsection Regular Modified Cylindrical Bessel Functions
+@cindex Modified Cylindrical Bessel Functions
+@cindex Regular Modified Cylindrical Bessel Functions
+
+@deftypefun double gsl_sf_bessel_I0 (double @var{x})
+@deftypefunx int gsl_sf_bessel_I0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular modified cylindrical Bessel function
+of zeroth order, @math{I_0(x)}.
+@comment Exceptional Return Values: GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_I1 (double @var{x})
+@deftypefunx int gsl_sf_bessel_I1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular modified cylindrical Bessel function
+of first order, @math{I_1(x)}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_In (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_bessel_In_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular modified cylindrical Bessel function
+of order @var{n}, @math{I_n(x)}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_In_array (int @var{nmin}, int @var{nmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the regular modified cylindrical
+Bessel functions @math{I_n(x)} for @math{n} from @var{nmin} to
+@var{nmax} inclusive, storing the results in the array
+@var{result_array}. The start of the range @var{nmin} must be positive
+or zero. The values are computed using recurrence relations for
+efficiency, and therefore may differ slightly from the exact values.
+@comment Domain: nmin >=0, nmax >= nmin
+@comment Conditions: n=nmin,...,nmax, nmin >=0, nmax >= nmin
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_I0_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_I0_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified cylindrical Bessel
+function of zeroth order @math{\exp(-|x|) I_0(x)}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_I1_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_I1_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified cylindrical Bessel
+function of first order @math{\exp(-|x|) I_1(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_In_scaled (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_bessel_In_scaled_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified cylindrical Bessel
+function of order @var{n}, @math{\exp(-|x|) I_n(x)}
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_In_scaled_array (int @var{nmin}, int @var{nmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the scaled regular cylindrical
+Bessel functions @math{\exp(-|x|) I_n(x)} for @math{n} from
+@var{nmin} to @var{nmax} inclusive, storing the results in the array
+@var{result_array}. The start of the range @var{nmin} must be positive
+or zero. The values are computed using recurrence relations for
+efficiency, and therefore may differ slightly from the exact values.
+@comment Domain: nmin >=0, nmax >= nmin
+@comment Conditions: n=nmin,...,nmax
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Irregular Modified Cylindrical Bessel Functions
+@subsection Irregular Modified Cylindrical Bessel Functions
+@cindex Irregular Modified Cylindrical Bessel Functions
+
+@deftypefun double gsl_sf_bessel_K0 (double @var{x})
+@deftypefunx int gsl_sf_bessel_K0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular modified cylindrical Bessel
+function of zeroth order, @math{K_0(x)}, for @math{x > 0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_K1 (double @var{x})
+@deftypefunx int gsl_sf_bessel_K1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular modified cylindrical Bessel
+function of first order, @math{K_1(x)}, for @math{x > 0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Kn (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Kn_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular modified cylindrical Bessel
+function of order @var{n}, @math{K_n(x)}, for @math{x > 0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_Kn_array (int @var{nmin}, int @var{nmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the irregular modified cylindrical
+Bessel functions @math{K_n(x)} for @math{n} from @var{nmin} to
+@var{nmax} inclusive, storing the results in the array
+@var{result_array}. The start of the range @var{nmin} must be positive
+or zero. The domain of the function is @math{x>0}. The values are
+computed using recurrence relations for efficiency, and therefore
+may differ slightly from the exact values.
+@comment Conditions: n=nmin,...,nmax
+@comment Domain: x > 0.0, nmin>=0, nmax >= nmin
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_K0_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_K0_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified cylindrical Bessel
+function of zeroth order @math{\exp(x) K_0(x)} for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_K1_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_K1_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified cylindrical Bessel
+function of first order @math{\exp(x) K_1(x)} for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Kn_scaled (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Kn_scaled_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified cylindrical Bessel
+function of order @var{n}, @math{\exp(x) K_n(x)}, for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_Kn_scaled_array (int @var{nmin}, int @var{nmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the scaled irregular cylindrical
+Bessel functions @math{\exp(x) K_n(x)} for @math{n} from @var{nmin} to
+@var{nmax} inclusive, storing the results in the array
+@var{result_array}. The start of the range @var{nmin} must be positive
+or zero. The domain of the function is @math{x>0}. The values are
+computed using recurrence relations for efficiency, and therefore
+may differ slightly from the exact values.
+@comment Domain: x > 0.0, nmin >=0, nmax >= nmin
+@comment Conditions: n=nmin,...,nmax
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Regular Spherical Bessel Functions
+@subsection Regular Spherical Bessel Functions
+@cindex Spherical Bessel Functions
+@cindex Regular Spherical Bessel Functions
+
+@deftypefun double gsl_sf_bessel_j0 (double @var{x})
+@deftypefunx int gsl_sf_bessel_j0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular spherical Bessel function of zeroth
+order, @math{j_0(x) = \sin(x)/x}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_j1 (double @var{x})
+@deftypefunx int gsl_sf_bessel_j1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular spherical Bessel function of first
+order, @math{j_1(x) = (\sin(x)/x - \cos(x))/x}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_j2 (double @var{x})
+@deftypefunx int gsl_sf_bessel_j2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular spherical Bessel function of second
+order, @math{j_2(x) = ((3/x^2 - 1)\sin(x) - 3\cos(x)/x)/x}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_jl (int @var{l}, double @var{x})
+@deftypefunx int gsl_sf_bessel_jl_e (int @var{l}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular spherical Bessel function of
+order @var{l}, @math{j_l(x)}, for @c{$l \geq 0$}
+@math{l >= 0} and @c{$x \geq 0$}
+@math{x >= 0}.
+@comment Domain: l >= 0, x >= 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_jl_array (int @var{lmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the regular spherical Bessel
+functions @math{j_l(x)} for @math{l} from 0 to @var{lmax}
+inclusive for @c{$lmax \geq 0$}
+@math{lmax >= 0} and @c{$x \geq 0$}
+@math{x >= 0}, storing the results in the array @var{result_array}.
+The values are computed using recurrence relations for
+efficiency, and therefore may differ slightly from the exact values.
+@comment Domain: lmax >= 0
+@comment Conditions: l=0,1,...,lmax
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_jl_steed_array (int @var{lmax}, double @var{x}, double * @var{jl_x_array})
+This routine uses Steed's method to compute the values of the regular
+spherical Bessel functions @math{j_l(x)} for @math{l} from 0 to
+@var{lmax} inclusive for @c{$lmax \geq 0$}
+@math{lmax >= 0} and @c{$x \geq 0$}
+@math{x >= 0}, storing the results in the array
+@var{result_array}.
+The Steed/Barnett algorithm is described in @cite{Comp. Phys. Comm.} 21,
+297 (1981). Steed's method is more stable than the
+recurrence used in the other functions but is also slower.
+@comment Domain: lmax >= 0
+@comment Conditions: l=0,1,...,lmax
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Irregular Spherical Bessel Functions
+@subsection Irregular Spherical Bessel Functions
+@cindex Irregular Spherical Bessel Functions
+
+@deftypefun double gsl_sf_bessel_y0 (double @var{x})
+@deftypefunx int gsl_sf_bessel_y0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular spherical Bessel function of zeroth
+order, @math{y_0(x) = -\cos(x)/x}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_y1 (double @var{x})
+@deftypefunx int gsl_sf_bessel_y1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular spherical Bessel function of first
+order, @math{y_1(x) = -(\cos(x)/x + \sin(x))/x}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_y2 (double @var{x})
+@deftypefunx int gsl_sf_bessel_y2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular spherical Bessel function of second
+order, @math{y_2(x) = (-3/x^3 + 1/x)\cos(x) - (3/x^2)\sin(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_yl (int @var{l}, double @var{x})
+@deftypefunx int gsl_sf_bessel_yl_e (int @var{l}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular spherical Bessel function of
+order @var{l}, @math{y_l(x)}, for @c{$l \geq 0$}
+@math{l >= 0}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_yl_array (int @var{lmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the irregular spherical Bessel
+functions @math{y_l(x)} for @math{l} from 0 to @var{lmax}
+inclusive for @c{$lmax \geq 0$}
+@math{lmax >= 0}, storing the results in the array @var{result_array}.
+The values are computed using recurrence relations for
+efficiency, and therefore may differ slightly from the exact values.
+@comment Domain: lmax >= 0
+@comment Conditions: l=0,1,...,lmax
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Regular Modified Spherical Bessel Functions
+@subsection Regular Modified Spherical Bessel Functions
+@cindex Modified Spherical Bessel Functions
+@cindex Regular Modified Spherical Bessel Functions
+
+The regular modified spherical Bessel functions @math{i_l(x)}
+are related to the modified Bessel functions of fractional order,
+@c{$i_l(x) = \sqrt{\pi/(2x)} I_{l+1/2}(x)$}
+@math{i_l(x) = \sqrt@{\pi/(2x)@} I_@{l+1/2@}(x)}
+
+@deftypefun double gsl_sf_bessel_i0_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_i0_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified spherical Bessel
+function of zeroth order, @math{\exp(-|x|) i_0(x)}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_i1_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_i1_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified spherical Bessel
+function of first order, @math{\exp(-|x|) i_1(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_i2_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_i2_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified spherical Bessel
+function of second order, @math{ \exp(-|x|) i_2(x) }
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_il_scaled (int @var{l}, double @var{x})
+@deftypefunx int gsl_sf_bessel_il_scaled_e (int @var{l}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified spherical Bessel
+function of order @var{l}, @math{ \exp(-|x|) i_l(x) }
+@comment Domain: l >= 0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_il_scaled_array (int @var{lmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the scaled regular modified
+cylindrical Bessel functions @math{\exp(-|x|) i_l(x)} for @math{l} from
+0 to @var{lmax} inclusive for @c{$lmax \geq 0$}
+@math{lmax >= 0}, storing the results in
+the array @var{result_array}.
+The values are computed using recurrence relations for
+efficiency, and therefore may differ slightly from the exact values.
+@comment Domain: lmax >= 0
+@comment Conditions: l=0,1,...,lmax
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Irregular Modified Spherical Bessel Functions
+@subsection Irregular Modified Spherical Bessel Functions
+@cindex Irregular Modified Spherical Bessel Functions
+
+The irregular modified spherical Bessel functions @math{k_l(x)}
+are related to the irregular modified Bessel functions of fractional order,
+@c{$k_l(x) = \sqrt{\pi/(2x)} K_{l+1/2}(x)$}
+@math{k_l(x) = \sqrt@{\pi/(2x)@} K_@{l+1/2@}(x)}.
+
+@deftypefun double gsl_sf_bessel_k0_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_k0_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified spherical Bessel
+function of zeroth order, @math{\exp(x) k_0(x)}, for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_k1_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_k1_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified spherical Bessel
+function of first order, @math{\exp(x) k_1(x)}, for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_k2_scaled (double @var{x})
+@deftypefunx int gsl_sf_bessel_k2_scaled_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified spherical Bessel
+function of second order, @math{\exp(x) k_2(x)}, for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_kl_scaled (int @var{l}, double @var{x})
+@deftypefunx int gsl_sf_bessel_kl_scaled_e (int @var{l}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified spherical Bessel
+function of order @var{l}, @math{\exp(x) k_l(x)}, for @math{x>0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_kl_scaled_array (int @var{lmax}, double @var{x}, double @var{result_array}[])
+This routine computes the values of the scaled irregular modified
+spherical Bessel functions @math{\exp(x) k_l(x)} for @math{l} from
+0 to @var{lmax} inclusive for @c{$lmax \geq 0$}
+@math{lmax >= 0} and @math{x>0}, storing the results in
+the array @var{result_array}.
+The values are computed using recurrence relations for
+efficiency, and therefore may differ slightly from the exact values.
+@comment Domain: lmax >= 0
+@comment Conditions: l=0,1,...,lmax
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Regular Bessel Function - Fractional Order
+@subsection Regular Bessel Function---Fractional Order
+@cindex Fractional Order Bessel Functions
+@cindex Bessel Functions, Fractional Order
+@cindex Regular Bessel Functions, Fractional Order
+
+@deftypefun double gsl_sf_bessel_Jnu (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Jnu_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular cylindrical Bessel function of
+fractional order @math{\nu}, @math{J_\nu(x)}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_bessel_sequence_Jnu_e (double @var{nu}, gsl_mode_t @var{mode}, size_t @var{size}, double @var{v}[])
+This function computes the regular cylindrical Bessel function of
+fractional order @math{\nu}, @math{J_\nu(x)}, evaluated at a series of
+@math{x} values. The array @var{v} of length @var{size} contains the
+@math{x} values. They are assumed to be strictly ordered and positive.
+The array is over-written with the values of @math{J_\nu(x_i)}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EINVAL
+@end deftypefun
+
+
+@node Irregular Bessel Functions - Fractional Order
+@subsection Irregular Bessel Functions---Fractional Order
+
+@deftypefun double gsl_sf_bessel_Ynu (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Ynu_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular cylindrical Bessel function of
+fractional order @math{\nu}, @math{Y_\nu(x)}.
+@comment Exceptional Return Values:
+@end deftypefun
+
+
+@node Regular Modified Bessel Functions - Fractional Order
+@subsection Regular Modified Bessel Functions---Fractional Order
+@cindex Modified Bessel Functions, Fractional Order
+@cindex Regular Modified Bessel Functions, Fractional Order
+
+@deftypefun double gsl_sf_bessel_Inu (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Inu_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular modified Bessel function of
+fractional order @math{\nu}, @math{I_\nu(x)} for @math{x>0},
+@math{\nu>0}.
+@comment Domain: x >= 0, nu >= 0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Inu_scaled (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Inu_scaled_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled regular modified Bessel function of
+fractional order @math{\nu}, @math{\exp(-|x|)I_\nu(x)} for @math{x>0},
+@math{\nu>0}.
+@comment @math{ \exp(-|x|) I_@{\nu@}(x) }
+@comment Domain: x >= 0, nu >= 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@node Irregular Modified Bessel Functions - Fractional Order
+@subsection Irregular Modified Bessel Functions---Fractional Order
+@cindex Irregular Modified Bessel Functions, Fractional Order
+
+@deftypefun double gsl_sf_bessel_Knu (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Knu_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular modified Bessel function of
+fractional order @math{\nu}, @math{K_\nu(x)} for @math{x>0},
+@math{\nu>0}.
+@comment Domain: x > 0, nu >= 0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_lnKnu (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_lnKnu_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the logarithm of the irregular modified Bessel
+function of fractional order @math{\nu}, @math{\ln(K_\nu(x))} for
+@math{x>0}, @math{\nu>0}.
+@comment Domain: x > 0, nu >= 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_Knu_scaled (double @var{nu}, double @var{x})
+@deftypefunx int gsl_sf_bessel_Knu_scaled_e (double @var{nu}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the scaled irregular modified Bessel function of
+fractional order @math{\nu}, @math{\exp(+|x|) K_\nu(x)} for @math{x>0},
+@math{\nu>0}.
+@comment Domain: x > 0, nu >= 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@node Zeros of Regular Bessel Functions
+@subsection Zeros of Regular Bessel Functions
+@cindex Zeros of Regular Bessel Functions
+@cindex Regular Bessel Functions, Zeros of
+
+@deftypefun double gsl_sf_bessel_zero_J0 (unsigned int @var{s})
+@deftypefunx int gsl_sf_bessel_zero_J0_e (unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th positive zero of
+the Bessel function @math{J_0(x)}.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_zero_J1 (unsigned int @var{s})
+@deftypefunx int gsl_sf_bessel_zero_J1_e (unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th positive zero of
+the Bessel function @math{J_1(x)}.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun double gsl_sf_bessel_zero_Jnu (double @var{nu}, unsigned int @var{s})
+@deftypefunx int gsl_sf_bessel_zero_Jnu_e (double @var{nu}, unsigned int @var{s}, gsl_sf_result * @var{result})
+These routines compute the location of the @var{s}-th positive zero of
+the Bessel function @math{J_\nu(x)}. The current implementation does not
+support negative values of @var{nu}.
+@comment Exceptional Return Values:
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-clausen.texi b/gsl-1.9/doc/specfunc-clausen.texi
new file mode 100644
index 0000000..b0987c2
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-clausen.texi
@@ -0,0 +1,28 @@
+@cindex Clausen functions
+
+The Clausen function is defined by the following integral,
+@tex
+\beforedisplay
+$$
+Cl_2(x) = - \int_0^x dt \log(2 \sin(t/2))
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+Cl_2(x) = - \int_0^x dt \log(2 \sin(t/2))
+@end example
+
+@end ifinfo
+@noindent
+It is related to the dilogarithm by
+@c{$Cl_2(\theta) = \Im(Li_2(e^{i\theta}))$}
+@math{Cl_2(\theta) = \Im Li_2(\exp(i\theta))}.
+The Clausen functions are declared in the header file
+@file{gsl_sf_clausen.h}.
+
+@deftypefun double gsl_sf_clausen (double @var{x})
+@deftypefunx int gsl_sf_clausen_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Clausen integral @math{Cl_2(x)}.
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-coulomb.texi b/gsl-1.9/doc/specfunc-coulomb.texi
new file mode 100644
index 0000000..7114620
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-coulomb.texi
@@ -0,0 +1,151 @@
+@cindex Coulomb wave functions
+@cindex hydrogen atom
+
+The prototypes of the Coulomb functions are declared in the header file
+@file{gsl_sf_coulomb.h}. Both bound state and scattering solutions are
+available.
+
+@menu
+* Normalized Hydrogenic Bound States::
+* Coulomb Wave Functions::
+* Coulomb Wave Function Normalization Constant::
+@end menu
+
+@node Normalized Hydrogenic Bound States
+@subsection Normalized Hydrogenic Bound States
+
+@deftypefun double gsl_sf_hydrogenicR_1 (double @var{Z}, double @var{r})
+@deftypefunx int gsl_sf_hydrogenicR_1_e (double @var{Z}, double @var{r}, gsl_sf_result * @var{result})
+These routines compute the lowest-order normalized hydrogenic bound
+state radial wavefunction @c{$R_1 := 2Z \sqrt{Z} \exp(-Z r)$}
+@math{R_1 := 2Z \sqrt@{Z@} \exp(-Z r)}.
+@end deftypefun
+
+@deftypefun double gsl_sf_hydrogenicR (int @var{n}, int @var{l}, double @var{Z}, double @var{r})
+@deftypefunx int gsl_sf_hydrogenicR_e (int @var{n}, int @var{l}, double @var{Z}, double @var{r}, gsl_sf_result * @var{result})
+These routines compute the @var{n}-th normalized hydrogenic bound state
+radial wavefunction,
+@comment
+@tex
+\beforedisplay
+$$
+R_n := {2 Z^{3/2} \over n^2} \left({2Z r \over n}\right)^l \sqrt{(n-l-1)! \over (n+l)!} \exp(-Z r/n) L^{2l+1}_{n-l-1}(2Z r / n).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+R_n := 2 (Z^@{3/2@}/n^2) \sqrt@{(n-l-1)!/(n+l)!@} \exp(-Z r/n) (2Zr/n)^l
+ L^@{2l+1@}_@{n-l-1@}(2Zr/n).
+@end example
+
+@end ifinfo
+@noindent
+where @math{L^a_b(x)} is the generalized Laguerre polynomial (@pxref{Laguerre Functions}).
+The normalization is chosen such that the wavefunction @math{\psi} is
+given by
+@c{$\psi(n,l,r) = R_n Y_{lm}$}
+@math{\psi(n,l,r) = R_n Y_@{lm@}}.
+@end deftypefun
+
+@node Coulomb Wave Functions
+@subsection Coulomb Wave Functions
+
+The Coulomb wave functions @math{F_L(\eta,x)}, @math{G_L(\eta,x)} are
+described in Abramowitz & Stegun, Chapter 14. Because there can be a
+large dynamic range of values for these functions, overflows are handled
+gracefully. If an overflow occurs, @code{GSL_EOVRFLW} is signalled and
+exponent(s) are returned through the modifiable parameters @var{exp_F},
+@var{exp_G}. The full solution can be reconstructed from the following
+relations,
+@tex
+\beforedisplay
+$$
+\eqalign{
+ F_L(\eta,x) &= fc[k_L] * \exp(exp_F)\cr
+ G_L(\eta,x) &= gc[k_L] * \exp(exp_G)\cr
+\cr
+ F_L'(\eta,x) &= fcp[k_L] * \exp(exp_F)\cr
+ G_L'(\eta,x) &= gcp[k_L] * \exp(exp_G)
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+F_L(eta,x) = fc[k_L] * exp(exp_F)
+G_L(eta,x) = gc[k_L] * exp(exp_G)
+
+F_L'(eta,x) = fcp[k_L] * exp(exp_F)
+G_L'(eta,x) = gcp[k_L] * exp(exp_G)
+@end example
+
+@end ifinfo
+@noindent
+
+@deftypefun int gsl_sf_coulomb_wave_FG_e (double @var{eta}, double @var{x}, double @var{L_F}, int @var{k}, gsl_sf_result * @var{F}, gsl_sf_result * @var{Fp}, gsl_sf_result * @var{G}, gsl_sf_result * @var{Gp}, double * @var{exp_F}, double * @var{exp_G})
+This function computes the Coulomb wave functions @math{F_L(\eta,x)},
+@c{$G_{L-k}(\eta,x)$}
+@math{G_@{L-k@}(\eta,x)} and their derivatives
+@math{F'_L(\eta,x)},
+@c{$G'_{L-k}(\eta,x)$}
+@math{G'_@{L-k@}(\eta,x)}
+with respect to @math{x}. The parameters are restricted to @math{L,
+L-k > -1/2}, @math{x > 0} and integer @math{k}. Note that @math{L}
+itself is not restricted to being an integer. The results are stored in
+the parameters @var{F}, @var{G} for the function values and @var{Fp},
+@var{Gp} for the derivative values. If an overflow occurs,
+@code{GSL_EOVRFLW} is returned and scaling exponents are stored in
+the modifiable parameters @var{exp_F}, @var{exp_G}.
+@end deftypefun
+
+@deftypefun int gsl_sf_coulomb_wave_F_array (double @var{L_min}, int @var{kmax}, double @var{eta}, double @var{x}, double @var{fc_array}[], double * @var{F_exponent})
+This function computes the Coulomb wave function @math{F_L(\eta,x)} for
+@math{L = Lmin \dots Lmin + kmax}, storing the results in @var{fc_array}.
+In the case of overflow the exponent is stored in @var{F_exponent}.
+@end deftypefun
+
+@deftypefun int gsl_sf_coulomb_wave_FG_array (double @var{L_min}, int @var{kmax}, double @var{eta}, double @var{x}, double @var{fc_array}[], double @var{gc_array}[], double * @var{F_exponent}, double * @var{G_exponent})
+This function computes the functions @math{F_L(\eta,x)},
+@math{G_L(\eta,x)} for @math{L = Lmin \dots Lmin + kmax} storing the
+results in @var{fc_array} and @var{gc_array}. In the case of overflow the
+exponents are stored in @var{F_exponent} and @var{G_exponent}.
+@end deftypefun
+
+@deftypefun int gsl_sf_coulomb_wave_FGp_array (double @var{L_min}, int @var{kmax}, double @var{eta}, double @var{x}, double @var{fc_array}[], double @var{fcp_array}[], double @var{gc_array}[], double @var{gcp_array}[], double * @var{F_exponent}, double * @var{G_exponent})
+This function computes the functions @math{F_L(\eta,x)},
+@math{G_L(\eta,x)} and their derivatives @math{F'_L(\eta,x)},
+@math{G'_L(\eta,x)} for @math{L = Lmin \dots Lmin + kmax} storing the
+results in @var{fc_array}, @var{gc_array}, @var{fcp_array} and @var{gcp_array}.
+In the case of overflow the exponents are stored in @var{F_exponent}
+and @var{G_exponent}.
+@end deftypefun
+
+@deftypefun int gsl_sf_coulomb_wave_sphF_array (double @var{L_min}, int @var{kmax}, double @var{eta}, double @var{x}, double @var{fc_array}[], double @var{F_exponent}[])
+This function computes the Coulomb wave function divided by the argument
+@math{F_L(\eta, x)/x} for @math{L = Lmin \dots Lmin + kmax}, storing the
+results in @var{fc_array}. In the case of overflow the exponent is
+stored in @var{F_exponent}. This function reduces to spherical Bessel
+functions in the limit @math{\eta \to 0}.
+@end deftypefun
+
+@node Coulomb Wave Function Normalization Constant
+@subsection Coulomb Wave Function Normalization Constant
+
+The Coulomb wave function normalization constant is defined in
+Abramowitz 14.1.7.
+
+@deftypefun int gsl_sf_coulomb_CL_e (double @var{L}, double @var{eta}, gsl_sf_result * @var{result})
+This function computes the Coulomb wave function normalization constant
+@math{C_L(\eta)} for @math{L > -1}.
+@end deftypefun
+
+@deftypefun int gsl_sf_coulomb_CL_array (double @var{Lmin}, int @var{kmax}, double @var{eta}, double @var{cl}[])
+This function computes the Coulomb wave function normalization constant
+@math{C_L(\eta)} for @math{L = Lmin \dots Lmin + kmax}, @math{Lmin > -1}.
+@end deftypefun
+
+
+
diff --git a/gsl-1.9/doc/specfunc-coupling.texi b/gsl-1.9/doc/specfunc-coupling.texi
new file mode 100644
index 0000000..3efd9fe
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-coupling.texi
@@ -0,0 +1,109 @@
+@cindex coupling coefficients
+@cindex 3-j symbols
+@cindex 6-j symbols
+@cindex 9-j symbols
+@cindex Wigner coefficients
+@cindex Racah coefficients
+
+The Wigner 3-j, 6-j and 9-j symbols give the coupling coefficients for
+combined angular momentum vectors. Since the arguments of the standard
+coupling coefficient functions are integer or half-integer, the
+arguments of the following functions are, by convention, integers equal
+to twice the actual spin value. For information on the 3-j coefficients
+see Abramowitz & Stegun, Section 27.9. The functions described in this
+section are declared in the header file @file{gsl_sf_coupling.h}.
+
+@menu
+* 3-j Symbols::
+* 6-j Symbols::
+* 9-j Symbols::
+@end menu
+
+@node 3-j Symbols
+@subsection 3-j Symbols
+
+@deftypefun double gsl_sf_coupling_3j (int @var{two_ja}, int @var{two_jb}, int @var{two_jc}, int @var{two_ma}, int @var{two_mb}, int @var{two_mc})
+@deftypefunx int gsl_sf_coupling_3j_e (int @var{two_ja}, int @var{two_jb}, int @var{two_jc}, int @var{two_ma}, int @var{two_mb}, int @var{two_mc}, gsl_sf_result * @var{result})
+These routines compute the Wigner 3-j coefficient,
+@tex
+\beforedisplay
+$$
+\pmatrix{ja & jb & jc\cr
+ ma & mb & mc\cr}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+(ja jb jc
+ ma mb mc)
+@end example
+
+@end ifinfo
+@noindent
+where the arguments are given in half-integer units, @math{ja} =
+@var{two_ja}/2, @math{ma} = @var{two_ma}/2, etc.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@node 6-j Symbols
+@subsection 6-j Symbols
+
+@deftypefun double gsl_sf_coupling_6j (int @var{two_ja}, int @var{two_jb}, int @var{two_jc}, int @var{two_jd}, int @var{two_je}, int @var{two_jf})
+@deftypefunx int gsl_sf_coupling_6j_e (int @var{two_ja}, int @var{two_jb}, int @var{two_jc}, int @var{two_jd}, int @var{two_je}, int @var{two_jf}, gsl_sf_result * @var{result})
+These routines compute the Wigner 6-j coefficient,
+@tex
+\beforedisplay
+$$
+\left\{\matrix{ja & jb & jc\cr
+ jd & je & jf\cr}\right\}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+@{ja jb jc
+ jd je jf@}
+@end example
+
+@end ifinfo
+@noindent
+where the arguments are given in half-integer units, @math{ja} =
+@var{two_ja}/2, @math{ma} = @var{two_ma}/2, etc.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@node 9-j Symbols
+@subsection 9-j Symbols
+
+@deftypefun double gsl_sf_coupling_9j (int @var{two_ja}, int @var{two_jb}, int @var{two_jc}, int @var{two_jd}, int @var{two_je}, int @var{two_jf}, int @var{two_jg}, int @var{two_jh}, int @var{two_ji})
+@deftypefunx int gsl_sf_coupling_9j_e (int @var{two_ja}, int @var{two_jb}, int @var{two_jc}, int @var{two_jd}, int @var{two_je}, int @var{two_jf}, int @var{two_jg}, int @var{two_jh}, int @var{two_ji}, gsl_sf_result * @var{result})
+These routines compute the Wigner 9-j coefficient,
+@tex
+\beforedisplay
+$$
+\left\{\matrix{ja & jb & jc\cr
+ jd & je & jf\cr
+ jg & jh & ji\cr}\right\}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+@{ja jb jc
+ jd je jf
+ jg jh ji@}
+@end example
+
+@end ifinfo
+@noindent
+where the arguments are given in half-integer units, @math{ja} =
+@var{two_ja}/2, @math{ma} = @var{two_ma}/2, etc.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-dawson.texi b/gsl-1.9/doc/specfunc-dawson.texi
new file mode 100644
index 0000000..451ccf0
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-dawson.texi
@@ -0,0 +1,12 @@
+@cindex Dawson function
+
+The Dawson integral is defined by @math{\exp(-x^2) \int_0^x dt
+\exp(t^2)}. A table of Dawson's integral can be found in Abramowitz &
+Stegun, Table 7.5. The Dawson functions are declared in the header file
+@file{gsl_sf_dawson.h}.
+
+@deftypefun double gsl_sf_dawson (double @var{x})
+@deftypefunx int gsl_sf_dawson_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the value of Dawson's integral for @var{x}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-debye.texi b/gsl-1.9/doc/specfunc-debye.texi
new file mode 100644
index 0000000..400dde2
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-debye.texi
@@ -0,0 +1,63 @@
+@cindex Debye functions
+
+The Debye functions @math{D_n(x)} are defined by the following integral,
+@tex
+\beforedisplay
+$$
+D_n(x) = {n \over x^n} \int_0^x dt {t^n \over e^t - 1}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+D_n(x) = n/x^n \int_0^x dt (t^n/(e^t - 1))
+@end example
+
+@end ifinfo
+@noindent
+For further information see Abramowitz &
+Stegun, Section 27.1. The Debye functions are declared in the header
+file @file{gsl_sf_debye.h}.
+
+@deftypefun double gsl_sf_debye_1 (double @var{x})
+@deftypefunx int gsl_sf_debye_1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the first-order Debye function
+@math{D_1(x) = (1/x) \int_0^x dt (t/(e^t - 1))}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_debye_2 (double @var{x})
+@deftypefunx int gsl_sf_debye_2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the second-order Debye function
+@math{D_2(x) = (2/x^2) \int_0^x dt (t^2/(e^t - 1))}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_debye_3 (double @var{x})
+@deftypefunx int gsl_sf_debye_3_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the third-order Debye function
+@math{D_3(x) = (3/x^3) \int_0^x dt (t^3/(e^t - 1))}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_debye_4 (double @var{x})
+@deftypefunx int gsl_sf_debye_4_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the fourth-order Debye function
+@math{D_4(x) = (4/x^4) \int_0^x dt (t^4/(e^t - 1))}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_debye_5 (double @var{x})
+@deftypefunx int gsl_sf_debye_5_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the fifth-order Debye function
+@math{D_5(x) = (5/x^5) \int_0^x dt (t^5/(e^t - 1))}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_debye_6 (double @var{x})
+@deftypefunx int gsl_sf_debye_6_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the sixth-order Debye function
+@math{D_6(x) = (6/x^6) \int_0^x dt (t^6/(e^t - 1))}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-dilog.texi b/gsl-1.9/doc/specfunc-dilog.texi
new file mode 100644
index 0000000..696b565
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-dilog.texi
@@ -0,0 +1,33 @@
+@cindex dilogarithm
+
+The functions described in this section are declared in the header file
+@file{gsl_sf_dilog.h}.
+
+@menu
+* Real Argument::
+* Complex Argument::
+@end menu
+
+@node Real Argument
+@subsection Real Argument
+
+@deftypefun double gsl_sf_dilog (double @var{x})
+@deftypefunx int gsl_sf_dilog_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the dilogarithm for a real argument. In Lewin's
+notation this is @math{Li_2(x)}, the real part of the dilogarithm of a
+real @math{x}. It is defined by the integral representation
+@math{Li_2(x) = - \Re \int_0^x ds \log(1-s) / s}.
+Note that @math{\Im(Li_2(x)) = 0} for @c{$x \le 1$}
+@math{x <= 1}, and @math{-\pi\log(x)} for @math{x > 1}.
+
+@end deftypefun
+
+@node Complex Argument
+@subsection Complex Argument
+
+
+@deftypefun int gsl_sf_complex_dilog_e (double @var{r}, double @var{theta}, gsl_sf_result * @var{result_re}, gsl_sf_result * @var{result_im})
+This function computes the full complex-valued dilogarithm for the
+complex argument @math{z = r \exp(i \theta)}. The real and imaginary
+parts of the result are returned in @var{result_re}, @var{result_im}.
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-elementary.texi b/gsl-1.9/doc/specfunc-elementary.texi
new file mode 100644
index 0000000..6d6f92a
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-elementary.texi
@@ -0,0 +1,23 @@
+@cindex elementary operations
+@cindex multiplication
+
+The following functions allow for the propagation of errors when
+combining quantities by multiplication. The functions are declared in
+the header file @file{gsl_sf_elementary.h}.
+
+@comment @deftypefun double gsl_sf_multiply (double @var{x}, double @var{y})
+@deftypefun int gsl_sf_multiply_e (double @var{x}, double @var{y}, gsl_sf_result * @var{result})
+This function multiplies @var{x} and @var{y} storing the product and its
+associated error in @var{result}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+@deftypefun int gsl_sf_multiply_err_e (double @var{x}, double @var{dx}, double @var{y}, double @var{dy}, gsl_sf_result * @var{result})
+This function multiplies @var{x} and @var{y} with associated absolute
+errors @var{dx} and @var{dy}. The product
+@c{$xy \pm xy \sqrt{(dx/x)^2 +(dy/y)^2}$}
+@math{xy +/- xy \sqrt((dx/x)^2 +(dy/y)^2)}
+is stored in @var{result}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-ellint.texi b/gsl-1.9/doc/specfunc-ellint.texi
new file mode 100644
index 0000000..601f9de
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-ellint.texi
@@ -0,0 +1,198 @@
+@cindex elliptic integrals
+
+The functions described in this section are declared in the header
+file @file{gsl_sf_ellint.h}. Further information about the elliptic
+integrals can be found in Abramowitz & Stegun, Chapter 17.
+
+@menu
+* Definition of Legendre Forms::
+* Definition of Carlson Forms::
+* Legendre Form of Complete Elliptic Integrals::
+* Legendre Form of Incomplete Elliptic Integrals::
+* Carlson Forms::
+@end menu
+
+@node Definition of Legendre Forms
+@subsection Definition of Legendre Forms
+@cindex Legendre forms of elliptic integrals
+The Legendre forms of elliptic integrals @math{F(\phi,k)},
+@math{E(\phi,k)} and @math{\Pi(\phi,k,n)} are defined by,
+@tex
+\beforedisplay
+$$
+\eqalign{
+F(\phi,k) &= \int_0^\phi dt {1 \over \sqrt{(1 - k^2 \sin^2(t))}}\cr
+E(\phi,k) &= \int_0^\phi dt \sqrt{(1 - k^2 \sin^2(t))}\cr
+\Pi(\phi,k,n) &= \int_0^\phi dt {1 \over (1 + n \sin^2(t)) \sqrt{1 - k^2 \sin^2(t)}}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+ F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))
+
+ E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))
+
+Pi(\phi,k,n) = \int_0^\phi dt 1/((1 + n \sin^2(t))\sqrt(1 - k^2 \sin^2(t)))
+@end example
+
+@end ifinfo
+@noindent
+The complete Legendre forms are denoted by @math{K(k) = F(\pi/2, k)} and
+@math{E(k) = E(\pi/2, k)}.
+
+The notation used here is based on Carlson, @cite{Numerische
+Mathematik} 33 (1979) 1 and differs slightly from that used by
+Abramowitz & Stegun, where the functions are given in terms of the
+parameter @math{m = k^2} and @math{n} is replaced by @math{-n}.
+
+@node Definition of Carlson Forms
+@subsection Definition of Carlson Forms
+@cindex Carlson forms of Elliptic integrals
+The Carlson symmetric forms of elliptical integrals @math{RC(x,y)},
+@math{RD(x,y,z)}, @math{RF(x,y,z)} and @math{RJ(x,y,z,p)} are defined
+by,
+@tex
+\beforedisplay
+$$
+\eqalign{
+RC(x,y) &= 1/2 \int_0^\infty dt (t+x)^{-1/2} (t+y)^{-1}\cr
+RD(x,y,z) &= 3/2 \int_0^\infty dt (t+x)^{-1/2} (t+y)^{-1/2} (t+z)^{-3/2}\cr
+RF(x,y,z) &= 1/2 \int_0^\infty dt (t+x)^{-1/2} (t+y)^{-1/2} (t+z)^{-1/2}\cr
+RJ(x,y,z,p) &= 3/2 \int_0^\infty dt (t+x)^{-1/2} (t+y)^{-1/2} (t+z)^{-1/2} (t+p)^{-1}
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+ RC(x,y) = 1/2 \int_0^\infty dt (t+x)^(-1/2) (t+y)^(-1)
+
+ RD(x,y,z) = 3/2 \int_0^\infty dt (t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-3/2)
+
+ RF(x,y,z) = 1/2 \int_0^\infty dt (t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-1/2)
+
+RJ(x,y,z,p) = 3/2 \int_0^\infty dt
+ (t+x)^(-1/2) (t+y)^(-1/2) (t+z)^(-1/2) (t+p)^(-1)
+@end example
+@end ifinfo
+
+@node Legendre Form of Complete Elliptic Integrals
+@subsection Legendre Form of Complete Elliptic Integrals
+
+@deftypefun double gsl_sf_ellint_Kcomp (double @var{k}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_Kcomp_e (double @var{k}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the complete elliptic integral @math{K(k)} to
+the accuracy specified by the mode variable @var{mode}.
+Note that Abramowitz & Stegun define this function in terms of the
+parameter @math{m = k^2}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_Ecomp (double @var{k}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_Ecomp_e (double @var{k}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the complete elliptic integral @math{E(k)} to the
+accuracy specified by the mode variable @var{mode}.
+Note that Abramowitz & Stegun define this function in terms of the
+parameter @math{m = k^2}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_Pcomp (double @var{k}, double @var{n}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_Pcomp_e (double @var{k}, double @var{n}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the complete elliptic integral @math{\Pi(k,n)} to the
+accuracy specified by the mode variable @var{mode}.
+Note that Abramowitz & Stegun define this function in terms of the
+parameters @math{m = k^2} and @math{\sin^2(\alpha) = k^2}, with the
+change of sign @math{n \to -n}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@node Legendre Form of Incomplete Elliptic Integrals
+@subsection Legendre Form of Incomplete Elliptic Integrals
+
+@deftypefun double gsl_sf_ellint_F (double @var{phi}, double @var{k}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_F_e (double @var{phi}, double @var{k}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{F(\phi,k)}
+to the accuracy specified by the mode variable @var{mode}.
+Note that Abramowitz & Stegun define this function in terms of the
+parameter @math{m = k^2}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_E (double @var{phi}, double @var{k}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_E_e (double @var{phi}, double @var{k}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{E(\phi,k)}
+to the accuracy specified by the mode variable @var{mode}.
+Note that Abramowitz & Stegun define this function in terms of the
+parameter @math{m = k^2}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_P (double @var{phi}, double @var{k}, double @var{n}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_P_e (double @var{phi}, double @var{k}, double @var{n}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{\Pi(\phi,k,n)}
+to the accuracy specified by the mode variable @var{mode}.
+Note that Abramowitz & Stegun define this function in terms of the
+parameters @math{m = k^2} and @math{\sin^2(\alpha) = k^2}, with the
+change of sign @math{n \to -n}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_D (double @var{phi}, double @var{k}, double @var{n}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_D_e (double @var{phi}, double @var{k}, double @var{n}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These functions compute the incomplete elliptic integral
+@math{D(\phi,k)} which is defined through the Carlson form @math{RD(x,y,z)}
+by the following relation,
+@tex
+\beforedisplay
+$$
+D(\phi,k,n) = {1 \over 3} (\sin \phi)^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1).
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+D(\phi,k,n) = (1/3)(\sin(\phi))^3 RD (1-\sin^2(\phi), 1-k^2 \sin^2(\phi), 1).
+@end example
+@end ifinfo
+The argument @var{n} is not used and will be removed in a future release.
+
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@node Carlson Forms
+@subsection Carlson Forms
+
+@deftypefun double gsl_sf_ellint_RC (double @var{x}, double @var{y}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_RC_e (double @var{x}, double @var{y}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{RC(x,y)}
+to the accuracy specified by the mode variable @var{mode}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_RD (double @var{x}, double @var{y}, double @var{z}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_RD_e (double @var{x}, double @var{y}, double @var{z}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{RD(x,y,z)}
+to the accuracy specified by the mode variable @var{mode}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_RF (double @var{x}, double @var{y}, double @var{z}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_RF_e (double @var{x}, double @var{y}, double @var{z}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{RF(x,y,z)}
+to the accuracy specified by the mode variable @var{mode}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_ellint_RJ (double @var{x}, double @var{y}, double @var{z}, double @var{p}, gsl_mode_t @var{mode})
+@deftypefunx int gsl_sf_ellint_RJ_e (double @var{x}, double @var{y}, double @var{z}, double @var{p}, gsl_mode_t @var{mode}, gsl_sf_result * @var{result})
+These routines compute the incomplete elliptic integral @math{RJ(x,y,z,p)}
+to the accuracy specified by the mode variable @var{mode}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-elljac.texi b/gsl-1.9/doc/specfunc-elljac.texi
new file mode 100644
index 0000000..dead60f
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-elljac.texi
@@ -0,0 +1,13 @@
+@cindex Jacobi elliptic functions
+@cindex elliptic functions (Jacobi)
+
+The Jacobian Elliptic functions are defined in Abramowitz & Stegun,
+Chapter 16. The functions are declared in the header file
+@file{gsl_sf_elljac.h}.
+
+@deftypefun int gsl_sf_elljac_e (double @var{u}, double @var{m}, double * @var{sn}, double * @var{cn}, double * @var{dn})
+This function computes the Jacobian elliptic functions @math{sn(u|m)},
+@math{cn(u|m)}, @math{dn(u|m)} by descending Landen
+transformations.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-erf.texi b/gsl-1.9/doc/specfunc-erf.texi
new file mode 100644
index 0000000..6b28cde
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-erf.texi
@@ -0,0 +1,99 @@
+@cindex error function
+@cindex erf(x)
+@cindex erfc(x)
+
+The error function is described in Abramowitz & Stegun, Chapter 7. The
+functions in this section are declared in the header file
+@file{gsl_sf_erf.h}.
+
+@menu
+* Error Function::
+* Complementary Error Function::
+* Log Complementary Error Function::
+* Probability functions::
+@end menu
+
+@node Error Function
+@subsection Error Function
+
+@deftypefun double gsl_sf_erf (double @var{x})
+@deftypefunx int gsl_sf_erf_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the error function @c{$\erf(x)$}
+@math{erf(x)}, where
+@c{$\erf(x) = (2/\sqrt{\pi}) \int_0^x dt \exp(-t^2)$}
+@math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@node Complementary Error Function
+@subsection Complementary Error Function
+
+@deftypefun double gsl_sf_erfc (double @var{x})
+@deftypefunx int gsl_sf_erfc_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complementary error function
+@c{$\erfc(x) = 1 - \erf(x) = (2/\sqrt{\pi}) \int_x^\infty \exp(-t^2)$}
+@math{erfc(x) = 1 - erf(x) = (2/\sqrt(\pi)) \int_x^\infty \exp(-t^2)}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@node Log Complementary Error Function
+@subsection Log Complementary Error Function
+
+@deftypefun double gsl_sf_log_erfc (double @var{x})
+@deftypefunx int gsl_sf_log_erfc_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the logarithm of the complementary error function
+@math{\log(\erfc(x))}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@node Probability functions
+@subsection Probability functions
+
+The probability functions for the Normal or Gaussian distribution are
+described in Abramowitz & Stegun, Section 26.2.
+
+@deftypefun double gsl_sf_erf_Z (double @var{x})
+@deftypefunx int gsl_sf_erf_Z_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Gaussian probability density function
+@c{$Z(x) = (1/\sqrt{2\pi}) \exp(-x^2/2)$}
+@math{Z(x) = (1/\sqrt@{2\pi@}) \exp(-x^2/2)}.
+@end deftypefun
+
+@deftypefun double gsl_sf_erf_Q (double @var{x})
+@deftypefunx int gsl_sf_erf_Q_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the upper tail of the Gaussian probability
+function
+@c{$Q(x) = (1/\sqrt{2\pi}) \int_x^\infty dt \exp(-t^2/2)$}
+@math{Q(x) = (1/\sqrt@{2\pi@}) \int_x^\infty dt \exp(-t^2/2)}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@cindex hazard function, normal distribution
+@cindex Mill's ratio, inverse
+The @dfn{hazard function} for the normal distribution,
+also known as the inverse Mill's ratio, is defined as,
+@tex
+\beforedisplay
+$$
+h(x) = {Z(x)\over Q(x)} = \sqrt{2 \over \pi} {\exp(-x^2 / 2) \over \erfc(x/\sqrt 2)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+h(x) = Z(x)/Q(x) = \sqrt@{2/\pi@} \exp(-x^2 / 2) / \erfc(x/\sqrt 2)
+@end example
+
+@end ifinfo
+@noindent
+It decreases rapidly as @math{x} approaches @math{-\infty} and asymptotes
+to @math{h(x) \sim x} as @math{x} approaches @math{+\infty}.
+
+@deftypefun double gsl_sf_hazard (double @var{x})
+@deftypefunx int gsl_sf_hazard_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the hazard function for the normal distribution.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-exp.texi b/gsl-1.9/doc/specfunc-exp.texi
new file mode 100644
index 0000000..cbdf5ca
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-exp.texi
@@ -0,0 +1,135 @@
+@cindex exponential function
+@cindex exp
+
+The functions described in this section are declared in the header file
+@file{gsl_sf_exp.h}.
+
+@menu
+* Exponential Function::
+* Relative Exponential Functions::
+* Exponentiation With Error Estimate::
+@end menu
+
+@node Exponential Function
+@subsection Exponential Function
+
+@deftypefun double gsl_sf_exp (double @var{x})
+@deftypefunx int gsl_sf_exp_e (double @var{x}, gsl_sf_result * @var{result})
+These routines provide an exponential function @math{\exp(x)} using GSL
+semantics and error checking.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_exp_e10_e (double @var{x}, gsl_sf_result_e10 * @var{result})
+This function computes the exponential @math{\exp(x)} using the
+@code{gsl_sf_result_e10} type to return a result with extended range.
+This function may be useful if the value of @math{\exp(x)} would
+overflow the numeric range of @code{double}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_exp_mult (double @var{x}, double @var{y})
+@deftypefunx int gsl_sf_exp_mult_e (double @var{x}, double @var{y}, gsl_sf_result * @var{result})
+These routines exponentiate @var{x} and multiply by the factor @var{y}
+to return the product @math{y \exp(x)}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_exp_mult_e10_e (const double @var{x}, const double @var{y}, gsl_sf_result_e10 * @var{result})
+This function computes the product @math{y \exp(x)} using the
+@code{gsl_sf_result_e10} type to return a result with extended numeric
+range.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+
+@node Relative Exponential Functions
+@subsection Relative Exponential Functions
+
+@deftypefun double gsl_sf_expm1 (double @var{x})
+@deftypefunx int gsl_sf_expm1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the quantity @math{\exp(x)-1} using an algorithm
+that is accurate for small @math{x}.
+@comment Exceptional Return Values: GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_exprel (double @var{x})
+@deftypefunx int gsl_sf_exprel_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the quantity @math{(\exp(x)-1)/x} using an
+algorithm that is accurate for small @math{x}. For small @math{x} the
+algorithm is based on the expansion @math{(\exp(x)-1)/x = 1 + x/2 +
+x^2/(2*3) + x^3/(2*3*4) + \dots}.
+@comment Exceptional Return Values: GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_exprel_2 (double @var{x})
+@deftypefunx int gsl_sf_exprel_2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the quantity @math{2(\exp(x)-1-x)/x^2} using an
+algorithm that is accurate for small @math{x}. For small @math{x} the
+algorithm is based on the expansion @math{2(\exp(x)-1-x)/x^2 =
+1 + x/3 + x^2/(3*4) + x^3/(3*4*5) + \dots}.
+@comment Exceptional Return Values: GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_exprel_n (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_exprel_n_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the @math{N}-relative exponential, which is the
+@var{n}-th generalization of the functions @code{gsl_sf_exprel} and
+@code{gsl_sf_exprel2}. The @math{N}-relative exponential is given by,
+@tex
+\beforedisplay
+$$
+\eqalign{
+\hbox{exprel}_N(x)
+ &= N!/x^N \left(\exp(x) - \sum_{k=0}^{N-1} x^k/k!\right)\cr
+ &= 1 + x/(N+1) + x^2/((N+1)(N+2)) + \dots\cr
+ &= {}_1F_1(1,1+N,x)\cr
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+exprel_N(x) = N!/x^N (\exp(x) - \sum_@{k=0@}^@{N-1@} x^k/k!)
+ = 1 + x/(N+1) + x^2/((N+1)(N+2)) + ...
+ = 1F1 (1,1+N,x)
+@end example
+@end ifinfo
+@comment Exceptional Return Values:
+@end deftypefun
+
+
+
+@node Exponentiation With Error Estimate
+@subsection Exponentiation With Error Estimate
+
+
+@deftypefun int gsl_sf_exp_err_e (double @var{x}, double @var{dx}, gsl_sf_result * @var{result})
+This function exponentiates @var{x} with an associated absolute error
+@var{dx}.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun int gsl_sf_exp_err_e10_e (double @var{x}, double @var{dx}, gsl_sf_result_e10 * @var{result})
+This function exponentiates a quantity @var{x} with an associated absolute
+error @var{dx} using the @code{gsl_sf_result_e10} type to return a result with
+extended range.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun int gsl_sf_exp_mult_err_e (double @var{x}, double @var{dx}, double @var{y}, double @var{dy}, gsl_sf_result * @var{result})
+This routine computes the product @math{y \exp(x)} for the quantities
+@var{x}, @var{y} with associated absolute errors @var{dx}, @var{dy}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+@deftypefun int gsl_sf_exp_mult_err_e10_e (double @var{x}, double @var{dx}, double @var{y}, double @var{dy}, gsl_sf_result_e10 * @var{result})
+This routine computes the product @math{y \exp(x)} for the quantities
+@var{x}, @var{y} with associated absolute errors @var{dx}, @var{dy} using the
+@code{gsl_sf_result_e10} type to return a result with extended range.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-expint.texi b/gsl-1.9/doc/specfunc-expint.texi
new file mode 100644
index 0000000..2d68ccb
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-expint.texi
@@ -0,0 +1,155 @@
+@cindex exponential integrals
+@cindex integrals, exponential
+
+Information on the exponential integrals can be found in Abramowitz &
+Stegun, Chapter 5. These functions are declared in the header file
+@file{gsl_sf_expint.h}.
+
+@menu
+* Exponential Integral::
+* Ei(x)::
+* Hyperbolic Integrals::
+* Ei_3(x)::
+* Trigonometric Integrals::
+* Arctangent Integral::
+@end menu
+
+@node Exponential Integral
+@subsection Exponential Integral
+@cindex E1(x), E2(x), Ei(x)
+
+@deftypefun double gsl_sf_expint_E1 (double @var{x})
+@deftypefunx int gsl_sf_expint_E1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the exponential integral @math{E_1(x)},
+@tex
+\beforedisplay
+$$
+E_1(x) := \Re \int_1^\infty dt \exp(-xt)/t.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+E_1(x) := \Re \int_1^\infty dt \exp(-xt)/t.
+@end example
+
+@end ifinfo
+@noindent
+@comment Domain: x != 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_expint_E2 (double @var{x})
+@deftypefunx int gsl_sf_expint_E2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the second-order exponential integral @math{E_2(x)},
+@tex
+\beforedisplay
+$$
+E_2(x) := \Re \int_1^\infty dt \exp(-xt)/t^2.
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+E_2(x) := \Re \int_1^\infty dt \exp(-xt)/t^2.
+@end example
+
+@end ifinfo
+@noindent
+@comment Domain: x != 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@node Ei(x)
+@subsection Ei(x)
+
+@deftypefun double gsl_sf_expint_Ei (double @var{x})
+@deftypefunx int gsl_sf_expint_Ei_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the exponential integral @math{Ei(x)},
+@tex
+\beforedisplay
+$$
+Ei(x) := - PV\left(\int_{-x}^\infty dt \exp(-t)/t\right)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)
+@end example
+
+@end ifinfo
+@noindent
+where @math{PV} denotes the principal value of the integral.
+@comment Domain: x != 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Hyperbolic Integrals
+@subsection Hyperbolic Integrals
+@cindex hyperbolic integrals
+@cindex Shi(x)
+@cindex Chi(x)
+
+@deftypefun double gsl_sf_Shi (double @var{x})
+@deftypefunx int gsl_sf_Shi_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the integral @math{Shi(x) = \int_0^x dt \sinh(t)/t}.
+@comment Exceptional Return Values: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+@deftypefun double gsl_sf_Chi (double @var{x})
+@deftypefunx int gsl_sf_Chi_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the integral @math{ Chi(x) := \Re[ \gamma_E + \log(x) + \int_0^x dt (\cosh[t]-1)/t] }, where @math{\gamma_E} is the Euler constant (available as the macro @code{M_EULER}).
+@comment Domain: x != 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+
+@node Ei_3(x)
+@subsection Ei_3(x)
+
+@deftypefun double gsl_sf_expint_3 (double @var{x})
+@deftypefunx int gsl_sf_expint_3_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the third-order exponential integral
+@math{Ei_3(x) = \int_0^xdt \exp(-t^3)} for @c{$x \ge 0$}
+@math{x >= 0}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@node Trigonometric Integrals
+@subsection Trigonometric Integrals
+@cindex trigonometric integrals
+@cindex Si(x)
+@cindex Ci(x)
+@deftypefun double gsl_sf_Si (const double @var{x})
+@deftypefunx int gsl_sf_Si_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Sine integral
+@math{Si(x) = \int_0^x dt \sin(t)/t}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@deftypefun double gsl_sf_Ci (const double @var{x})
+@deftypefunx int gsl_sf_Ci_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Cosine integral @math{Ci(x) = -\int_x^\infty dt
+\cos(t)/t} for @math{x > 0}.
+@comment Domain: x > 0.0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@node Arctangent Integral
+@subsection Arctangent Integral
+@cindex arctangent integral
+@deftypefun double gsl_sf_atanint (double @var{x})
+@deftypefunx int gsl_sf_atanint_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Arctangent integral, which is defined as @math{AtanInt(x) = \int_0^x dt \arctan(t)/t}.
+@comment Domain:
+@comment Exceptional Return Values:
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-fermi-dirac.texi b/gsl-1.9/doc/specfunc-fermi-dirac.texi
new file mode 100644
index 0000000..f9314be
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-fermi-dirac.texi
@@ -0,0 +1,122 @@
+@cindex Fermi-Dirac function
+
+The functions described in this section are declared in the header file
+@file{gsl_sf_fermi_dirac.h}.
+
+@menu
+* Complete Fermi-Dirac Integrals::
+* Incomplete Fermi-Dirac Integrals::
+@end menu
+
+@node Complete Fermi-Dirac Integrals
+@subsection Complete Fermi-Dirac Integrals
+@cindex complete Fermi-Dirac integrals
+@cindex Fj(x), Fermi-Dirac integral
+The complete Fermi-Dirac integral @math{F_j(x)} is given by,
+@tex
+\beforedisplay
+$$
+F_j(x) := {1\over\Gamma(j+1)} \int_0^\infty dt {t^j \over (\exp(t-x) + 1)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+F_j(x) := (1/r\Gamma(j+1)) \int_0^\infty dt (t^j / (\exp(t-x) + 1))
+@end example
+@end ifinfo
+
+@deftypefun double gsl_sf_fermi_dirac_m1 (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_m1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral with an index of @math{-1}.
+This integral is given by
+@c{$F_{-1}(x) = e^x / (1 + e^x)$}
+@math{F_@{-1@}(x) = e^x / (1 + e^x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_0 (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral with an index of @math{0}.
+This integral is given by @math{F_0(x) = \ln(1 + e^x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_1 (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral with an index of @math{1},
+@math{F_1(x) = \int_0^\infty dt (t /(\exp(t-x)+1))}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_2 (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral with an index
+of @math{2},
+@math{F_2(x) = (1/2) \int_0^\infty dt (t^2 /(\exp(t-x)+1))}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_int (int @var{j}, double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_int_e (int @var{j}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral with an integer
+index of @math{j},
+@math{F_j(x) = (1/\Gamma(j+1)) \int_0^\infty dt (t^j /(\exp(t-x)+1))}.
+@comment Complete integral F_j(x) for integer j
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_mhalf (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_mhalf_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral
+@c{$F_{-1/2}(x)$}
+@math{F_@{-1/2@}(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_half (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_half_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral
+@c{$F_{1/2}(x)$}
+@math{F_@{1/2@}(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_fermi_dirac_3half (double @var{x})
+@deftypefunx int gsl_sf_fermi_dirac_3half_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the complete Fermi-Dirac integral
+@c{$F_{3/2}(x)$}
+@math{F_@{3/2@}(x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+
+@node Incomplete Fermi-Dirac Integrals
+@subsection Incomplete Fermi-Dirac Integrals
+@cindex incomplete Fermi-Dirac integral
+@cindex Fj(x,b), incomplete Fermi-Dirac integral
+The incomplete Fermi-Dirac integral @math{F_j(x,b)} is given by,
+@tex
+\beforedisplay
+$$
+F_j(x,b) := {1\over\Gamma(j+1)} \int_b^\infty dt {t^j \over (\exp(t-x) + 1)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+F_j(x,b) := (1/\Gamma(j+1)) \int_b^\infty dt (t^j / (\Exp(t-x) + 1))
+@end example
+@end ifinfo
+
+@deftypefun double gsl_sf_fermi_dirac_inc_0 (double @var{x}, double @var{b})
+@deftypefunx int gsl_sf_fermi_dirac_inc_0_e (double @var{x}, double @var{b}, gsl_sf_result * @var{result})
+These routines compute the incomplete Fermi-Dirac integral with an index
+of zero,
+@c{$F_0(x,b) = \ln(1 + e^{b-x}) - (b-x)$}
+@math{F_0(x,b) = \ln(1 + e^@{b-x@}) - (b-x)}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EDOM
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-gamma.texi b/gsl-1.9/doc/specfunc-gamma.texi
new file mode 100644
index 0000000..f15e7ef
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-gamma.texi
@@ -0,0 +1,314 @@
+The functions described in this section are declared
+in the header file @file{gsl_sf_gamma.h}.
+
+@menu
+* Gamma Functions::
+* Factorials::
+* Pochhammer Symbol::
+* Incomplete Gamma Functions::
+* Beta Functions::
+* Incomplete Beta Function::
+@end menu
+
+@node Gamma Functions
+@subsection Gamma Functions
+@cindex gamma functions
+
+The Gamma function is defined by the following integral,
+@tex
+\beforedisplay
+$$
+\Gamma(x) = \int_0^{\infty} dt \, t^{x-1} \exp(-t)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)
+@end example
+
+@end ifinfo
+@noindent
+It is related to the factorial function by @math{\Gamma(n)=(n-1)!}
+for positive integer @math{n}. Further information on the Gamma function
+can be found in Abramowitz & Stegun, Chapter 6. The functions
+described in this section are declared in the header file
+@file{gsl_sf_gamma.h}.
+
+@deftypefun double gsl_sf_gamma (double @var{x})
+@deftypefunx int gsl_sf_gamma_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Gamma function @math{\Gamma(x)}, subject to @math{x}
+not being a negative integer or zero. The function is computed using the real
+Lanczos method. The maximum value of @math{x} such that @math{\Gamma(x)} is not
+considered an overflow is given by the macro @code{GSL_SF_GAMMA_XMAX}
+and is 171.0.
+@comment exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EROUND
+@end deftypefun
+
+@deftypefun double gsl_sf_lngamma (double @var{x})
+@deftypefunx int gsl_sf_lngamma_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex logarithm of Gamma function
+These routines compute the logarithm of the Gamma function,
+@math{\log(\Gamma(x))}, subject to @math{x} not being a negative
+integer or zero. For @math{x<0} the real part of @math{\log(\Gamma(x))} is
+returned, which is equivalent to @math{\log(|\Gamma(x)|)}. The function
+is computed using the real Lanczos method.
+@comment exceptions: GSL_EDOM, GSL_EROUND
+@end deftypefun
+
+@deftypefun int gsl_sf_lngamma_sgn_e (double @var{x}, gsl_sf_result * @var{result_lg}, double * @var{sgn})
+This routine computes the sign of the gamma function and the logarithm of
+its magnitude, subject to @math{x} not being a negative integer or zero. The
+function is computed using the real Lanczos method. The value of the
+gamma function can be reconstructed using the relation @math{\Gamma(x) =
+sgn * \exp(resultlg)}.
+@comment exceptions: GSL_EDOM, GSL_EROUND
+@end deftypefun
+
+@deftypefun double gsl_sf_gammastar (double @var{x})
+@deftypefunx int gsl_sf_gammastar_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex Regulated Gamma function
+These routines compute the regulated Gamma Function @math{\Gamma^*(x)}
+for @math{x > 0}. The regulated gamma function is given by,
+@tex
+\beforedisplay
+$$
+\eqalign{
+\Gamma^*(x) &= \Gamma(x)/(\sqrt{2\pi} x^{(x-1/2)} \exp(-x))\cr
+ &= \left(1 + {1 \over 12x} + ...\right) \quad\hbox{for~} x\to \infty\cr
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Gamma^*(x) = \Gamma(x)/(\sqrt@{2\pi@} x^@{(x-1/2)@} \exp(-x))
+ = (1 + (1/12x) + ...) for x \to \infty
+@end example
+@end ifinfo
+and is a useful suggestion of Temme.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_gammainv (double @var{x})
+@deftypefunx int gsl_sf_gammainv_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex Reciprocal Gamma function
+These routines compute the reciprocal of the gamma function,
+@math{1/\Gamma(x)} using the real Lanczos method.
+@comment exceptions: GSL_EUNDRFLW, GSL_EROUND
+@end deftypefun
+
+@deftypefun int gsl_sf_lngamma_complex_e (double @var{zr}, double @var{zi}, gsl_sf_result * @var{lnr}, gsl_sf_result * @var{arg})
+@cindex Complex Gamma function
+This routine computes @math{\log(\Gamma(z))} for complex @math{z=z_r+i
+z_i} and @math{z} not a negative integer or zero, using the complex Lanczos
+method. The returned parameters are @math{lnr = \log|\Gamma(z)|} and
+@math{arg = \arg(\Gamma(z))} in @math{(-\pi,\pi]}. Note that the phase
+part (@var{arg}) is not well-determined when @math{|z|} is very large,
+due to inevitable roundoff in restricting to @math{(-\pi,\pi]}. This
+will result in a @code{GSL_ELOSS} error when it occurs. The absolute
+value part (@var{lnr}), however, never suffers from loss of precision.
+@comment exceptions: GSL_EDOM, GSL_ELOSS
+@end deftypefun
+
+@node Factorials
+@subsection Factorials
+@cindex factorial
+
+Although factorials can be computed from the Gamma function, using
+the relation @math{n! = \Gamma(n+1)} for non-negative integer @math{n},
+it is usually more efficient to call the functions in this section,
+particularly for small values of @math{n}, whose factorial values are
+maintained in hardcoded tables.
+
+@deftypefun double gsl_sf_fact (unsigned int @var{n})
+@deftypefunx int gsl_sf_fact_e (unsigned int @var{n}, gsl_sf_result * @var{result})
+@cindex factorial
+These routines compute the factorial @math{n!}. The factorial is
+related to the Gamma function by @math{n! = \Gamma(n+1)}.
+The maximum value of @math{n} such that @math{n!} is not
+considered an overflow is given by the macro @code{GSL_SF_FACT_NMAX}
+and is 170.
+@comment exceptions: GSL_EDOM, GSL_OVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_doublefact (unsigned int @var{n})
+@deftypefunx int gsl_sf_doublefact_e (unsigned int @var{n}, gsl_sf_result * @var{result})
+@cindex double factorial
+These routines compute the double factorial @math{n!! = n(n-2)(n-4) \dots}.
+The maximum value of @math{n} such that @math{n!!} is not
+considered an overflow is given by the macro @code{GSL_SF_DOUBLEFACT_NMAX}
+and is 297.
+@comment exceptions: GSL_EDOM, GSL_OVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_lnfact (unsigned int @var{n})
+@deftypefunx int gsl_sf_lnfact_e (unsigned int @var{n}, gsl_sf_result * @var{result})
+@cindex logarithm of factorial
+These routines compute the logarithm of the factorial of @var{n},
+@math{\log(n!)}. The algorithm is faster than computing
+@math{\ln(\Gamma(n+1))} via @code{gsl_sf_lngamma} for @math{n < 170},
+but defers for larger @var{n}.
+@comment exceptions: none
+@end deftypefun
+
+@deftypefun double gsl_sf_lndoublefact (unsigned int @var{n})
+@deftypefunx int gsl_sf_lndoublefact_e (unsigned int @var{n}, gsl_sf_result * @var{result})
+@cindex logarithm of double factorial
+These routines compute the logarithm of the double factorial of @var{n},
+@math{\log(n!!)}.
+@comment exceptions: none
+@end deftypefun
+
+@deftypefun double gsl_sf_choose (unsigned int @var{n}, unsigned int @var{m})
+@deftypefunx int gsl_sf_choose_e (unsigned int @var{n}, unsigned int @var{m}, gsl_sf_result * @var{result})
+@cindex combinatorial factor C(m,n)
+These routines compute the combinatorial factor @code{n choose m}
+@math{= n!/(m!(n-m)!)}
+@comment exceptions: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@deftypefun double gsl_sf_lnchoose (unsigned int @var{n}, unsigned int @var{m})
+@deftypefunx int gsl_sf_lnchoose_e (unsigned int @var{n}, unsigned int @var{m}, gsl_sf_result * @var{result})
+@cindex logarithm of combinatorial factor C(m,n)
+These routines compute the logarithm of @code{n choose m}. This is
+equivalent to the sum @math{\log(n!) - \log(m!) - \log((n-m)!)}.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_taylorcoeff (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_taylorcoeff_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+@cindex Taylor coefficients, computation of
+These routines compute the Taylor coefficient @math{x^n / n!} for
+@c{$x \ge 0$}
+@math{x >= 0},
+@c{$n \ge 0$}
+@math{n >= 0}.
+@comment exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@node Pochhammer Symbol
+@subsection Pochhammer Symbol
+
+@deftypefun double gsl_sf_poch (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_poch_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@cindex Pochhammer symbol
+@cindex Apell symbol, see Pochammer symbol
+These routines compute the Pochhammer symbol @math{(a)_x = \Gamma(a +
+x)/\Gamma(a)}, subject to @math{a} and @math{a+x} not being negative
+integers or zero. The Pochhammer symbol is also known as the Apell symbol and
+sometimes written as @math{(a,x)}.
+@comment exceptions: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@deftypefun double gsl_sf_lnpoch (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_lnpoch_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@cindex logarithm of Pochhammer symbol
+These routines compute the logarithm of the Pochhammer symbol,
+@math{\log((a)_x) = \log(\Gamma(a + x)/\Gamma(a))} for @math{a > 0},
+@math{a+x > 0}.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@deftypefun int gsl_sf_lnpoch_sgn_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result}, double * @var{sgn})
+These routines compute the sign of the Pochhammer symbol and the
+logarithm of its magnitude. The computed parameters are @math{result =
+\log(|(a)_x|)} and @math{sgn = \sgn((a)_x)} where @math{(a)_x =
+\Gamma(a + x)/\Gamma(a)}, subject to @math{a}, @math{a+x} not being
+negative integers or zero.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_pochrel (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_pochrel_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@cindex relative Pochhammer symbol
+These routines compute the relative Pochhammer symbol @math{((a)_x -
+1)/x} where @math{(a)_x = \Gamma(a + x)/\Gamma(a)}.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+
+@node Incomplete Gamma Functions
+@subsection Incomplete Gamma Functions
+
+@deftypefun double gsl_sf_gamma_inc (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_gamma_inc_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@cindex non-normalized incomplete Gamma function
+@cindex unnormalized incomplete Gamma function
+These functions compute the unnormalized incomplete Gamma Function
+@c{$\Gamma(a,x) = \int_x^\infty dt\, t^{(a-1)} \exp(-t)$}
+@math{\Gamma(a,x) = \int_x^\infty dt t^@{a-1@} \exp(-t)}
+for @math{a} real and @c{$x \ge 0$}
+@math{x >= 0}.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_gamma_inc_Q (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_gamma_inc_Q_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@cindex incomplete Gamma function
+These routines compute the normalized incomplete Gamma Function
+@c{$Q(a,x) = 1/\Gamma(a) \int_x^\infty dt\, t^{(a-1)} \exp(-t)$}
+@math{Q(a,x) = 1/\Gamma(a) \int_x^\infty dt t^@{a-1@} \exp(-t)}
+for @math{a > 0}, @c{$x \ge 0$}
+@math{x >= 0}.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_gamma_inc_P (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_gamma_inc_P_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@cindex complementary incomplete Gamma function
+These routines compute the complementary normalized incomplete Gamma Function
+@c{$P(a,x) = 1 - Q(a,x) = 1/\Gamma(a) \int_0^x dt\, t^{(a-1)} \exp(-t)$}
+@math{P(a,x) = 1 - Q(a,x) = 1/\Gamma(a) \int_0^x dt t^@{a-1@} \exp(-t)}
+for @math{a > 0}, @c{$x \ge 0$}
+@math{x >= 0}.
+
+Note that Abramowitz & Stegun call @math{P(a,x)} the incomplete gamma
+function (section 6.5).
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@node Beta Functions
+@subsection Beta Functions
+
+@deftypefun double gsl_sf_beta (double @var{a}, double @var{b})
+@deftypefunx int gsl_sf_beta_e (double @var{a}, double @var{b}, gsl_sf_result * @var{result})
+@cindex Beta function
+These routines compute the Beta Function, @math{B(a,b) =
+\Gamma(a)\Gamma(b)/\Gamma(a+b)} subject to @math{a} and @math{b} not
+being negative integers.
+@comment exceptions: GSL_EDOM, GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_lnbeta (double @var{a}, double @var{b})
+@deftypefunx int gsl_sf_lnbeta_e (double @var{a}, double @var{b}, gsl_sf_result * @var{result})
+@cindex logarithm of Beta function
+These routines compute the logarithm of the Beta Function, @math{\log(B(a,b))}
+subject to @math{a} and @math{b} not
+being negative integers.
+@comment exceptions: GSL_EDOM
+@end deftypefun
+
+@node Incomplete Beta Function
+@subsection Incomplete Beta Function
+
+@deftypefun double gsl_sf_beta_inc (double @var{a}, double @var{b}, double @var{x})
+@deftypefunx int gsl_sf_beta_inc_e (double @var{a}, double @var{b}, double @var{x}, gsl_sf_result * @var{result})
+@cindex incomplete Beta function, normalized
+@cindex normalized incomplete Beta function
+@cindex Beta function, incomplete normalized
+These routines compute the normalized incomplete Beta function
+@math{I_x(a,b)=B_x(a,b)/B(a,b)} where @c{$B_x(a,b) = \int_0^x t^{a-1} (1-t)^{b-1} dt$}
+@math{B_x(a,b) = \int_0^x t^@{a-1@} (1-t)^@{b-1@} dt}
+for @math{a > 0}, @math{b > 0}, and @c{$0 \le x \le 1$}
+@math{0 <= x <= 1}.
+@end deftypefun
+
+
+
+
+
diff --git a/gsl-1.9/doc/specfunc-gegenbauer.texi b/gsl-1.9/doc/specfunc-gegenbauer.texi
new file mode 100644
index 0000000..949c3dd
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-gegenbauer.texi
@@ -0,0 +1,42 @@
+@cindex Gegenbauer functions
+
+The Gegenbauer polynomials are defined in Abramowitz & Stegun, Chapter
+22, where they are known as Ultraspherical polynomials. The functions
+described in this section are declared in the header file
+@file{gsl_sf_gegenbauer.h}.
+
+@deftypefun double gsl_sf_gegenpoly_1 (double @var{lambda}, double @var{x})
+@deftypefunx double gsl_sf_gegenpoly_2 (double @var{lambda}, double @var{x})
+@deftypefunx double gsl_sf_gegenpoly_3 (double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_gegenpoly_1_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+@deftypefunx int gsl_sf_gegenpoly_2_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+@deftypefunx int gsl_sf_gegenpoly_3_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These functions evaluate the Gegenbauer polynomials
+@c{$C^{(\lambda)}_n(x)$}
+@math{C^@{(\lambda)@}_n(x)} using explicit
+representations for @math{n =1, 2, 3}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@deftypefun double gsl_sf_gegenpoly_n (int @var{n}, double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_gegenpoly_n_e (int @var{n}, double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These functions evaluate the Gegenbauer polynomial @c{$C^{(\lambda)}_n(x)$}
+@math{C^@{(\lambda)@}_n(x)} for a specific value of @var{n},
+@var{lambda}, @var{x} subject to @math{\lambda > -1/2}, @c{$n \ge 0$}
+@math{n >= 0}.
+@comment Domain: lambda > -1/2, n >= 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun int gsl_sf_gegenpoly_array (int @var{nmax}, double @var{lambda}, double @var{x}, double @var{result_array}[])
+This function computes an array of Gegenbauer polynomials
+@c{$C^{(\lambda)}_n(x)$}
+@math{C^@{(\lambda)@}_n(x)} for @math{n = 0, 1, 2, \dots, nmax}, subject
+to @math{\lambda > -1/2}, @c{$nmax \ge 0$}
+@math{nmax >= 0}.
+@comment Conditions: n = 0, 1, 2, ... nmax
+@comment Domain: lambda > -1/2, nmax >= 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-hyperg.texi b/gsl-1.9/doc/specfunc-hyperg.texi
new file mode 100644
index 0000000..c67eb8c
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-hyperg.texi
@@ -0,0 +1,108 @@
+@cindex hypergeometric functions
+@cindex confluent hypergeometric functions
+
+Hypergeometric functions are described in Abramowitz & Stegun, Chapters
+13 and 15. These functions are declared in the header file
+@file{gsl_sf_hyperg.h}.
+
+@deftypefun double gsl_sf_hyperg_0F1 (double @var{c}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_0F1_e (double @var{c}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the hypergeometric function @c{${}_0F_1(c,x)$}
+@math{0F1(c,x)}.
+@comment It is related to Bessel functions
+@comment 0F1[c,x] =
+@comment Gamma[c] x^(1/2(1-c)) I_(c-1)(2 Sqrt[x])
+@comment Gamma[c] (-x)^(1/2(1-c)) J_(c-1)(2 Sqrt[-x])
+@comment exceptions: GSL_EOVRFLW, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_1F1_int (int @var{m}, int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_1F1_int_e (int @var{m}, int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the confluent hypergeometric function
+@c{${}_1F_1(m,n,x) = M(m,n,x)$}
+@math{1F1(m,n,x) = M(m,n,x)} for integer parameters @var{m}, @var{n}.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_1F1 (double @var{a}, double @var{b}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_1F1_e (double @var{a}, double @var{b}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the confluent hypergeometric function
+@c{${}_1F_1(a,b,x) = M(a,b,x)$}
+@math{1F1(a,b,x) = M(a,b,x)} for general parameters @var{a}, @var{b}.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_U_int (int @var{m}, int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_U_int_e (int @var{m}, int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the confluent hypergeometric function
+@math{U(m,n,x)} for integer parameters @var{m}, @var{n}.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun int gsl_sf_hyperg_U_int_e10_e (int @var{m}, int @var{n}, double @var{x}, gsl_sf_result_e10 * @var{result})
+This routine computes the confluent hypergeometric function
+@math{U(m,n,x)} for integer parameters @var{m}, @var{n} using the
+@code{gsl_sf_result_e10} type to return a result with extended range.
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_U (double @var{a}, double @var{b}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_U_e (double @var{a}, double @var{b}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the confluent hypergeometric function @math{U(a,b,x)}.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun int gsl_sf_hyperg_U_e10_e (double @var{a}, double @var{b}, double @var{x}, gsl_sf_result_e10 * @var{result})
+This routine computes the confluent hypergeometric function
+@math{U(a,b,x)} using the @code{gsl_sf_result_e10} type to return a
+result with extended range.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_2F1 (double @var{a}, double @var{b}, double @var{c}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_2F1_e (double @var{a}, double @var{b}, double @var{c}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Gauss hypergeometric function
+@c{${}_2F_1(a,b,c,x)$}
+@math{2F1(a,b,c,x)} for @math{|x| < 1}.
+
+If the arguments @math{(a,b,c,x)} are too close to a singularity then
+the function can return the error code @code{GSL_EMAXITER} when the
+series approximation converges too slowly. This occurs in the region of
+@math{x=1}, @math{c - a - b = m} for integer m.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_2F1_conj (double @var{aR}, double @var{aI}, double @var{c}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_2F1_conj_e (double @var{aR}, double @var{aI}, double @var{c}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Gauss hypergeometric function
+@c{${}_2F_1(a_R + i a_I, aR - i aI, c, x)$}
+@math{2F1(a_R + i a_I, a_R - i a_I, c, x)} with complex parameters
+for @math{|x| < 1}.
+exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_2F1_renorm (double @var{a}, double @var{b}, double @var{c}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_2F1_renorm_e (double @var{a}, double @var{b}, double @var{c}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the renormalized Gauss hypergeometric function
+@c{${}_2F_1(a,b,c,x) / \Gamma(c)$}
+@math{2F1(a,b,c,x) / \Gamma(c)} for @math{|x| < 1}.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_2F1_conj_renorm (double @var{aR}, double @var{aI}, double @var{c}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_2F1_conj_renorm_e (double @var{aR}, double @var{aI}, double @var{c}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the renormalized Gauss hypergeometric function
+@c{${}_2F_1(a_R + i a_I, a_R - i a_I, c, x) / \Gamma(c)$}
+@math{2F1(a_R + i a_I, a_R - i a_I, c, x) / \Gamma(c)} for @math{|x| < 1}.
+@comment exceptions:
+@end deftypefun
+
+@deftypefun double gsl_sf_hyperg_2F0 (double @var{a}, double @var{b}, double @var{x})
+@deftypefunx int gsl_sf_hyperg_2F0_e (double @var{a}, double @var{b}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the hypergeometric function @c{${}_2F_0(a,b,x)$}
+@math{2F0(a,b,x)}. The series representation
+is a divergent hypergeometric series. However, for @math{x < 0} we
+have
+@c{${}_2F_0(a,b,x) = (-1/x)^a U(a,1+a-b,-1/x)$}
+@math{2F0(a,b,x) = (-1/x)^a U(a,1+a-b,-1/x)}
+@comment exceptions: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-laguerre.texi b/gsl-1.9/doc/specfunc-laguerre.texi
new file mode 100644
index 0000000..8672d59
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-laguerre.texi
@@ -0,0 +1,40 @@
+@cindex Laguerre functions
+@cindex confluent hypergeometric function
+
+The generalized Laguerre polynomials are defined in terms of confluent
+hypergeometric functions as
+@c{$L^a_n(x) = ((a+1)_n / n!) {}_1F_1(-n,a+1,x)$}
+@math{L^a_n(x) = ((a+1)_n / n!) 1F1(-n,a+1,x)}, and are sometimes referred to as the
+associated Laguerre polynomials. They are related to the plain
+Laguerre polynomials @math{L_n(x)} by @math{L^0_n(x) = L_n(x)} and
+@c{$L^k_n(x) = (-1)^k (d^k/dx^k) L_{(n+k)}(x)$}
+@math{L^k_n(x) = (-1)^k (d^k/dx^k) L_(n+k)(x)}. For
+more information see Abramowitz & Stegun, Chapter 22.
+
+The functions described in this section are
+declared in the header file @file{gsl_sf_laguerre.h}.
+
+@deftypefun double gsl_sf_laguerre_1 (double @var{a}, double @var{x})
+@deftypefunx double gsl_sf_laguerre_2 (double @var{a}, double @var{x})
+@deftypefunx double gsl_sf_laguerre_3 (double @var{a}, double @var{x})
+@deftypefunx int gsl_sf_laguerre_1_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@deftypefunx int gsl_sf_laguerre_2_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+@deftypefunx int gsl_sf_laguerre_3_e (double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+These routines evaluate the generalized Laguerre polynomials
+@math{L^a_1(x)}, @math{L^a_2(x)}, @math{L^a_3(x)} using explicit
+representations.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@deftypefun double gsl_sf_laguerre_n (const int @var{n}, const double @var{a}, const double @var{x})
+@deftypefunx int gsl_sf_laguerre_n_e (int @var{n}, double @var{a}, double @var{x}, gsl_sf_result * @var{result})
+These routines evaluate the generalized Laguerre polynomials
+@math{L^a_n(x)} for @math{a > -1},
+@c{$n \ge 0$}
+@math{n >= 0}.
+
+@comment Domain: a > -1.0, n >= 0
+@comment Evaluate generalized Laguerre polynomials.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-lambert.texi b/gsl-1.9/doc/specfunc-lambert.texi
new file mode 100644
index 0000000..c05d23d
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-lambert.texi
@@ -0,0 +1,28 @@
+@cindex W function
+@cindex Lambert function
+
+Lambert's W functions, @math{W(x)}, are defined to be solutions
+of the equation @math{W(x) \exp(W(x)) = x}. This function has
+multiple branches for @math{x < 0}; however, it has only
+two real-valued branches. We define @math{W_0(x)} to be the
+principal branch, where @math{W > -1} for @math{x < 0}, and
+@c{$W_{-1}(x)$}
+@math{W_@{-1@}(x)} to be the other real branch, where
+@math{W < -1} for @math{x < 0}. The Lambert functions are
+declared in the header file @file{gsl_sf_lambert.h}.
+
+
+@deftypefun double gsl_sf_lambert_W0 (double @var{x})
+@deftypefunx int gsl_sf_lambert_W0_e (double @var{x}, gsl_sf_result * @var{result})
+These compute the principal branch of the Lambert W function, @math{W_0(x)}.
+@comment exceptions: GSL_EDOM, GSL_EMAXITER
+@end deftypefun
+
+@deftypefun double gsl_sf_lambert_Wm1 (double @var{x})
+@deftypefunx int gsl_sf_lambert_Wm1_e (double @var{x}, gsl_sf_result * @var{result})
+These compute the secondary real-valued branch of the Lambert W function,
+@c{$W_{-1}(x)$}
+@math{W_@{-1@}(x)}.
+@comment exceptions: GSL_EDOM, GSL_EMAXITER
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-legendre.texi b/gsl-1.9/doc/specfunc-legendre.texi
new file mode 100644
index 0000000..4be1005
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-legendre.texi
@@ -0,0 +1,272 @@
+@cindex Legendre functions
+@cindex spherical harmonics
+@cindex conical functions
+@cindex hyperbolic space
+
+The Legendre Functions and Legendre Polynomials are described in
+Abramowitz & Stegun, Chapter 8. These functions are declared in
+the header file @file{gsl_sf_legendre.h}.
+
+@menu
+* Legendre Polynomials::
+* Associated Legendre Polynomials and Spherical Harmonics::
+* Conical Functions::
+* Radial Functions for Hyperbolic Space::
+@end menu
+
+@node Legendre Polynomials
+@subsection Legendre Polynomials
+
+@deftypefun double gsl_sf_legendre_P1 (double @var{x})
+@deftypefunx double gsl_sf_legendre_P2 (double @var{x})
+@deftypefunx double gsl_sf_legendre_P3 (double @var{x})
+@deftypefunx int gsl_sf_legendre_P1_e (double @var{x}, gsl_sf_result * @var{result})
+@deftypefunx int gsl_sf_legendre_P2_e (double @var{x}, gsl_sf_result * @var{result})
+@deftypefunx int gsl_sf_legendre_P3_e (double @var{x}, gsl_sf_result * @var{result})
+These functions evaluate the Legendre polynomials
+@c{$P_l(x)$}
+@math{P_l(x)} using explicit
+representations for @math{l=1, 2, 3}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@deftypefun double gsl_sf_legendre_Pl (int @var{l}, double @var{x})
+@deftypefunx int gsl_sf_legendre_Pl_e (int @var{l}, double @var{x}, gsl_sf_result * @var{result})
+These functions evaluate the Legendre polynomial @c{$P_l(x)$}
+@math{P_l(x)} for a specific value of @var{l},
+@var{x} subject to @c{$l \ge 0$}
+@math{l >= 0},
+@c{$|x| \le 1$}
+@math{|x| <= 1}
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun int gsl_sf_legendre_Pl_array (int @var{lmax}, double @var{x}, double @var{result_array}[])
+@deftypefunx int gsl_sf_legendre_Pl_deriv_array (int @var{lmax}, double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[])
+
+These functions compute an array of Legendre polynomials
+@math{P_l(x)}, and optionally their derivatives @math{dP_l(x)/dx},
+for @math{l = 0, \dots, lmax},
+@c{$|x| \le 1$}
+@math{|x| <= 1}
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_legendre_Q0 (double @var{x})
+@deftypefunx int gsl_sf_legendre_Q0_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Legendre function @math{Q_0(x)} for @math{x >
+-1}, @c{$x \ne 1$}
+@math{x != 1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_legendre_Q1 (double @var{x})
+@deftypefunx int gsl_sf_legendre_Q1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Legendre function @math{Q_1(x)} for @math{x >
+-1}, @c{$x \ne 1$}
+@math{x != 1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_legendre_Ql (int @var{l}, double @var{x})
+@deftypefunx int gsl_sf_legendre_Ql_e (int @var{l}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Legendre function @math{Q_l(x)} for @math{x >
+-1}, @c{$x \ne 1$}
+@math{x != 1} and @c{$l \ge 0$}
+@math{l >= 0}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@node Associated Legendre Polynomials and Spherical Harmonics
+@subsection Associated Legendre Polynomials and Spherical Harmonics
+
+The following functions compute the associated Legendre Polynomials
+@math{P_l^m(x)}. Note that this function grows combinatorially with
+@math{l} and can overflow for @math{l} larger than about 150. There is
+no trouble for small @math{m}, but overflow occurs when @math{m} and
+@math{l} are both large. Rather than allow overflows, these functions
+refuse to calculate @math{P_l^m(x)} and return @code{GSL_EOVRFLW} when
+they can sense that @math{l} and @math{m} are too big.
+
+If you want to calculate a spherical harmonic, then @emph{do not} use
+these functions. Instead use @code{gsl_sf_legendre_sphPlm} below,
+which uses a similar recursion, but with the normalized functions.
+
+@deftypefun double gsl_sf_legendre_Plm (int @var{l}, int @var{m}, double @var{x})
+@deftypefunx int gsl_sf_legendre_Plm_e (int @var{l}, int @var{m}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the associated Legendre polynomial
+@math{P_l^m(x)} for @c{$m \ge 0$}
+@math{m >= 0}, @c{$l \ge m$}
+@math{l >= m}, @c{$|x| \le 1$}
+@math{|x| <= 1}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_legendre_Plm_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[])
+@deftypefunx int gsl_sf_legendre_Plm_deriv_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[])
+These functions compute an array of Legendre polynomials
+@math{P_l^m(x)}, and optionally their derivatives @math{dP_l^m(x)/dx},
+for @c{$m \ge 0$}
+@math{m >= 0}, @c{$l = |m|, \dots, lmax$}
+@math{l = |m|, ..., lmax}, @c{$|x| \le 1$}
+@math{|x| <= 1}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@deftypefun double gsl_sf_legendre_sphPlm (int @var{l}, int @var{m}, double @var{x})
+@deftypefunx int gsl_sf_legendre_sphPlm_e (int @var{l}, int @var{m}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the normalized associated Legendre polynomial
+@c{$\sqrt{(2l+1)/(4\pi)} \sqrt{(l-m)!/(l+m)!} P_l^m(x)$}
+@math{$\sqrt@{(2l+1)/(4\pi)@} \sqrt@{(l-m)!/(l+m)!@} P_l^m(x)$} suitable
+for use in spherical harmonics. The parameters must satisfy @c{$m \ge 0$}
+@math{m >= 0}, @c{$l \ge m$}
+@math{l >= m}, @c{$|x| \le 1$}
+@math{|x| <= 1}. Theses routines avoid the overflows
+that occur for the standard normalization of @math{P_l^m(x)}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun int gsl_sf_legendre_sphPlm_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[])
+@deftypefunx int gsl_sf_legendre_sphPlm_deriv_array (int @var{lmax}, int @var{m}, double @var{x}, double @var{result_array}[], double @var{result_deriv_array}[])
+These functions compute an array of normalized associated Legendre functions
+@c{$\sqrt{(2l+1)/(4\pi)} \sqrt{(l-m)!/(l+m)!} P_l^m(x)$}
+@math{$\sqrt@{(2l+1)/(4\pi)@} \sqrt@{(l-m)!/(l+m)!@} P_l^m(x)$},
+and optionally their derivatives,
+for @c{$m \ge 0$}
+@math{m >= 0}, @c{$l = |m|, \dots, lmax$}
+@math{l = |m|, ..., lmax}, @c{$|x| \le 1$}
+@math{|x| <= 1.0}
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun int gsl_sf_legendre_array_size (const int @var{lmax}, const int @var{m})
+This function returns the size of @var{result_array}[] needed for the array
+versions of @math{P_l^m(x)}, @math{@var{lmax} - @var{m} + 1}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@node Conical Functions
+@subsection Conical Functions
+
+The Conical Functions @c{$P^\mu_{-(1/2)+i\lambda}(x)$}
+@math{P^\mu_@{-(1/2)+i\lambda@}(x)} and @c{$Q^\mu_{-(1/2)+i\lambda}$}
+@math{Q^\mu_@{-(1/2)+i\lambda@}}
+are described in Abramowitz & Stegun, Section 8.12.
+
+@deftypefun double gsl_sf_conicalP_half (double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_conicalP_half_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the irregular Spherical Conical Function
+@c{$P^{1/2}_{-1/2 + i \lambda}(x)$}
+@math{P^@{1/2@}_@{-1/2 + i \lambda@}(x)} for @math{x > -1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_conicalP_mhalf (double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_conicalP_mhalf_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the regular Spherical Conical Function
+@c{$P^{-1/2}_{-1/2 + i \lambda}(x)$}
+@math{P^@{-1/2@}_@{-1/2 + i \lambda@}(x)} for @math{x > -1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_conicalP_0 (double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_conicalP_0_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the conical function
+@c{$P^0_{-1/2 + i \lambda}(x)$}
+@math{P^0_@{-1/2 + i \lambda@}(x)}
+for @math{x > -1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_conicalP_1 (double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_conicalP_1_e (double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the conical function
+@c{$P^1_{-1/2 + i \lambda}(x)$}
+@math{P^1_@{-1/2 + i \lambda@}(x)} for @math{x > -1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_conicalP_sph_reg (int @var{l}, double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_conicalP_sph_reg_e (int @var{l}, double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Regular Spherical Conical Function
+@c{$P^{-1/2-l}_{-1/2 + i \lambda}(x)$}
+@math{P^@{-1/2-l@}_@{-1/2 + i \lambda@}(x)} for @math{x > -1}, @c{$l \ge -1$}
+@math{l >= -1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_conicalP_cyl_reg (int @var{m}, double @var{lambda}, double @var{x})
+@deftypefunx int gsl_sf_conicalP_cyl_reg_e (int @var{m}, double @var{lambda}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Regular Cylindrical Conical Function
+@c{$P^{-m}_{-1/2 + i \lambda}(x)$}
+@math{P^@{-m@}_@{-1/2 + i \lambda@}(x)} for @math{x > -1}, @c{$m \ge -1$}
+@math{m >= -1}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+
+@node Radial Functions for Hyperbolic Space
+@subsection Radial Functions for Hyperbolic Space
+
+The following spherical functions are specializations of Legendre
+functions which give the regular eigenfunctions of the Laplacian on a
+3-dimensional hyperbolic space @math{H3d}. Of particular interest is
+the flat limit, @math{\lambda \to \infty}, @math{\eta \to 0},
+@math{\lambda\eta} fixed.
+
+@deftypefun double gsl_sf_legendre_H3d_0 (double @var{lambda}, double @var{eta})
+@deftypefunx int gsl_sf_legendre_H3d_0_e (double @var{lambda}, double @var{eta}, gsl_sf_result * @var{result})
+These routines compute the zeroth radial eigenfunction of the Laplacian on the
+3-dimensional hyperbolic space,
+@c{$$L^{H3d}_0(\lambda,\eta) := {\sin(\lambda\eta) \over \lambda\sinh(\eta)}$$}
+@math{L^@{H3d@}_0(\lambda,\eta) := \sin(\lambda\eta)/(\lambda\sinh(\eta))}
+for @c{$\eta \ge 0$}
+@math{\eta >= 0}.
+In the flat limit this takes the form
+@c{$L^{H3d}_0(\lambda,\eta) = j_0(\lambda\eta)$}
+@math{L^@{H3d@}_0(\lambda,\eta) = j_0(\lambda\eta)}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_legendre_H3d_1 (double @var{lambda}, double @var{eta})
+@deftypefunx int gsl_sf_legendre_H3d_1_e (double @var{lambda}, double @var{eta}, gsl_sf_result * @var{result})
+These routines compute the first radial eigenfunction of the Laplacian on
+the 3-dimensional hyperbolic space,
+@c{$$L^{H3d}_1(\lambda,\eta) := {1\over\sqrt{\lambda^2 + 1}} {\left(\sin(\lambda \eta)\over \lambda \sinh(\eta)\right)} \left(\coth(\eta) - \lambda \cot(\lambda\eta)\right)$$}
+@math{L^@{H3d@}_1(\lambda,\eta) := 1/\sqrt@{\lambda^2 + 1@} \sin(\lambda \eta)/(\lambda \sinh(\eta)) (\coth(\eta) - \lambda \cot(\lambda\eta))}
+for @c{$\eta \ge 0$}
+@math{\eta >= 0}.
+In the flat limit this takes the form
+@c{$L^{H3d}_1(\lambda,\eta) = j_1(\lambda\eta)$}
+@math{L^@{H3d@}_1(\lambda,\eta) = j_1(\lambda\eta)}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_legendre_H3d (int @var{l}, double @var{lambda}, double @var{eta})
+@deftypefunx int gsl_sf_legendre_H3d_e (int @var{l}, double @var{lambda}, double @var{eta}, gsl_sf_result * @var{result})
+These routines compute the @var{l}-th radial eigenfunction of the
+Laplacian on the 3-dimensional hyperbolic space @c{$\eta \ge 0$}
+@math{\eta >= 0}, @c{$l \ge 0$}
+@math{l >= 0}. In the flat limit this takes the form
+@c{$L^{H3d}_l(\lambda,\eta) = j_l(\lambda\eta)$}
+@math{L^@{H3d@}_l(\lambda,\eta) = j_l(\lambda\eta)}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun int gsl_sf_legendre_H3d_array (int @var{lmax}, double @var{lambda}, double @var{eta}, double @var{result_array}[])
+This function computes an array of radial eigenfunctions
+@c{$L^{H3d}_l( \lambda, \eta)$}
+@math{L^@{H3d@}_l(\lambda, \eta)}
+for @c{$0 \le l \le lmax$}
+@math{0 <= l <= lmax}.
+@comment Exceptional Return Values:
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-log.texi b/gsl-1.9/doc/specfunc-log.texi
new file mode 100644
index 0000000..75279e8
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-log.texi
@@ -0,0 +1,47 @@
+@cindex logarithm and related functions
+
+Information on the properties of the Logarithm function can be found in
+Abramowitz & Stegun, Chapter 4. The functions described in this section
+are declared in the header file @file{gsl_sf_log.h}.
+
+@deftypefun double gsl_sf_log (double @var{x})
+@deftypefunx int gsl_sf_log_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the logarithm of @var{x}, @math{\log(x)}, for
+@math{x > 0}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_log_abs (double @var{x})
+@deftypefunx int gsl_sf_log_abs_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the logarithm of the magnitude of @var{x},
+@math{\log(|x|)}, for @math{x \ne 0}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun int gsl_sf_complex_log_e (double @var{zr}, double @var{zi}, gsl_sf_result * @var{lnr}, gsl_sf_result * @var{theta})
+This routine computes the complex logarithm of @math{z = z_r + i
+z_i}. The results are returned as @var{lnr}, @var{theta} such that
+@math{\exp(lnr + i \theta) = z_r + i z_i}, where @math{\theta} lies in
+the range @math{[-\pi,\pi]}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_log_1plusx (double @var{x})
+@deftypefunx int gsl_sf_log_1plusx_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute @math{\log(1 + x)} for @math{x > -1} using an
+algorithm that is accurate for small @math{x}.
+@comment Domain: x > -1.0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_log_1plusx_mx (double @var{x})
+@deftypefunx int gsl_sf_log_1plusx_mx_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute @math{\log(1 + x) - x} for @math{x > -1} using an
+algorithm that is accurate for small @math{x}.
+@comment Domain: x > -1.0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-mathieu.texi b/gsl-1.9/doc/specfunc-mathieu.texi
new file mode 100644
index 0000000..dddec1d
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-mathieu.texi
@@ -0,0 +1,257 @@
+@cindex Mathieu functions
+
+The routines described in this section compute the angular and radial
+Mathieu functions, and their characteristic values. Mathieu
+functions are the solutions of the following two differential
+equations:
+@tex
+\beforedisplay
+$$
+\eqalign{
+{{d^2 y}\over{d v^2}}& + (a - 2q\cos 2v)y = 0, \cr
+{{d^2 f}\over{d u^2}}& - (a - 2q\cosh 2u)f = 0.
+}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+d^2y/dv^2 + (a - 2q\cos 2v)y = 0
+d^2f/du^2 - (a - 2q\cosh 2u)f = 0
+@end example
+
+@end ifinfo
+@noindent
+The angular Mathieu functions @math{ce_r(x,q)}, @math{se_r(x,q)} are
+the even and odd periodic solutions of the first equation, which is known as Mathieu's equation. These exist
+only for the discrete sequence of characteristic values @math{a=a_r(q)}
+(even-periodic) and @math{a=b_r(q)} (odd-periodic).
+
+The radial Mathieu functions @c{$Mc^{(j)}_{r}(z,q)$}
+@math{Mc^@{(j)@}_@{r@}(z,q)}, @c{$Ms^{(j)}_@{r@}(z,q)$}
+@math{Ms^@{(j)@}_@{r@}(z,q)} are the solutions of the second equation,
+which is referred to as Mathieu's modified equation. The
+radial Mathieu functions of the first, second, third and fourth kind
+are denoted by the parameter @math{j}, which takes the value 1, 2, 3
+or 4.
+
+@comment The angular Mathieu functions can be divided into four types as
+@comment @tex
+@comment \beforedisplay
+@comment $$
+@comment \eqalign{
+@comment x & = \sum_{m=0}^\infty A_{2m+p} \cos(2m+p)\phi, \quad p = 0, 1, \cr
+@comment x & = \sum_{m=0}^\infty B_{2m+p} \sin(2m+p)\phi, \quad p = 0, 1.
+@comment }
+@comment $$
+@comment \afterdisplay
+@comment @end tex
+@comment @ifinfo
+
+@comment @example
+@comment x = \sum_(m=0)^\infty A_(2m+p) \cos(2m+p)\phi, p = 0, 1,
+@comment x = \sum_(m=0)^\infty B_(2m+p) \sin(2m+p)\phi, p = 0, 1.
+@comment @end example
+
+@comment @end ifinfo
+@comment @noindent
+@comment The nomenclature used for the angular Mathieu functions is @math{ce_n}
+@comment for the first solution and @math{se_n} for the second.
+
+@comment Similar solutions exist for the radial Mathieu functions by replacing
+@comment the trigonometric functions with their corresponding hyperbolic
+@comment functions as shown below.
+@comment @tex
+@comment \beforedisplay
+@comment $$
+@comment \eqalign{
+@comment x & = \sum_{m=0}^\infty A_{2m+p} \cosh(2m+p)u, \quad p = 0, 1, \cr
+@comment x & = \sum_{m=0}^\infty B_{2m+p} \sinh(2m+p)u, \quad p = 0, 1.
+@comment }
+@comment $$
+@comment \afterdisplay
+@comment @end tex
+@comment @ifinfo
+
+@comment @example
+@comment x = \sum_(m=0)^\infty A_(2m+p) \cosh(2m+p)u, p = 0, 1,
+@comment x = \sum_(m=0)^\infty B_(2m+p) \sinh(2m+p)u, p = 0, 1.
+@comment @end example
+
+@comment @end ifinfo
+@comment @noindent
+@comment The nomenclature used for the radial Mathieu functions is @math{Mc_n}
+@comment for the first solution and @math{Ms_n} for the second. The hyperbolic
+@comment series do not always converge at an acceptable rate. Therefore most
+@comment texts on the subject suggest using the following equivalent equations
+@comment that are expanded in series of Bessel and Hankel functions.
+@comment @tex
+@comment \beforedisplay
+@comment $$
+@comment \eqalign{
+@comment Mc_{2n}^{(j)}(x,q) & = \sum_{m=0}^\infty (-1)^{r+k}
+@comment A_{2m}^{2n}(q)\left[J_m(u_1)Z_m^{(j)}(u_2) +
+@comment J_m(u_1)Z_m^{(j)}(u_2)\right]/A_2^{2n} \cr
+@comment Mc_{2n+1}^{(j)}(x,q) & = \sum_{m=0}^\infty (-1)^{r+k}
+@comment A_{2m+1}^{2n+1}(q)\left[J_m(u_1)Z_{m+1}^{(j)}(u_2) +
+@comment J_{m+1}(u_1)Z_m^{(j)}(u_2)\right]/A_1^{2n+1} \cr
+@comment Ms_{2n}^{(j)}(x,q) & = \sum_{m=1}^\infty (-1)^{r+k}
+@comment B_{2m}^{2n}(q)\left[J_{m-1}(u_1)Z_{m+1}^{(j)}(u_2) +
+@comment J_{m+1}(u_1)Z_{m-1}^{(j)}(u_2)\right]/B_2^{2n} \cr
+@comment Ms_{2n+1}^{(j)}(x,q) & = \sum_{m=0}^\infty (-1)^{r+k}
+@comment B_{2m+1}^{2n+1}(q)\left[J_m(u_1)Z_{m+1}^{(j)}(u_2) +
+@comment J_{m+1}(u_1)Z_m^{(j)}(u_2)\right]/B_1^{2n+1}
+@comment }
+@comment $$
+@comment \afterdisplay
+@comment @end tex
+@comment @ifinfo
+
+@comment @example
+@comment Mc_(2n)^(j)(x,q) = \sum_(m=0)^\infty (-1)^(r+k) A_(2m)^(2n)(q)
+@comment [J_m(u_1)Z_m^(j)(u_2) + J_m(u_1)Z_m^(j)(u_2)]/A_2^(2n)
+@comment Mc_(2n+1)^(j)(x,q) = \sum_(m=0)^\infty (-1)^(r+k) A_(2m+1)^(2n+1)(q)
+@comment [J_m(u_1)Z_(m+1)^(j)(u_2) + J_(m+1)(u_1)Z_m^(j)(u_2)]/A_1^(2n+1)
+@comment Ms_(2n)^(j)(x,q) = \sum_(m=1)^\infty (-1)^(r+k) B_(2m)^(2n)(q)
+@comment [J_(m-1)(u_1)Z_(m+1)^(j)(u_2) + J_(m+1)(u_1)Z_(m-1)^(j)(u_2)]/B_2^(2n)
+@comment Ms_(2n+1)^(j)(x,q) = \sum_(m=0)^\infty (-1)^(r+k) B_(2m+1)^(2n+1)(q)
+@comment [J_m(u_1)Z_(m+1)^(j)(u_2) + J_(m+1)(u_1)Z_m^(j)(u_2)]/B_1^(2n+1)
+@comment @end example
+
+@comment @end ifinfo
+@comment @noindent
+@comment where @c{$u_1 = \sqrt{q} \exp(-x)$}
+@comment @math{u_1 = \sqrt@{q@} \exp(-x)} and @c{$u_2 = \sqrt@{q@} \exp(x)$}
+@comment @math{u_2 = \sqrt@{q@} \exp(x)} and
+@comment @tex
+@comment \beforedisplay
+@comment $$
+@comment \eqalign{
+@comment Z_m^{(1)}(u) & = J_m(u) \cr
+@comment Z_m^{(2)}(u) & = Y_m(u) \cr
+@comment Z_m^{(3)}(u) & = H_m^{(1)}(u) \cr
+@comment Z_m^{(4)}(u) & = H_m^{(2)}(u)
+@comment }
+@comment $$
+@comment \afterdisplay
+@comment @end tex
+@comment @ifinfo
+
+@comment @example
+@comment Z_m^(1)(u) = J_m(u)
+@comment Z_m^(2)(u) = Y_m(u)
+@comment Z_m^(3)(u) = H_m^(1)(u)
+@comment Z_m^(4)(u) = H_m^(2)(u)
+@comment @end example
+
+@comment @end ifinfo
+@comment @noindent
+@comment where @math{J_m(u)}, @math{Y_m(u)}, @math{H_m^{(1)}(u)}, and
+@comment @math{H_m^{(2)}(u)} are the regular and irregular Bessel functions and
+@comment the Hankel functions, respectively.
+
+For more information on the Mathieu functions, see Abramowitz and
+Stegun, Chapter 20. These functions are defined in the header file
+@file{gsl_sf_mathieu.h}.
+
+@menu
+* Mathieu Function Workspace::
+* Mathieu Function Characteristic Values::
+* Angular Mathieu Functions::
+* Radial Mathieu Functions::
+@end menu
+
+@node Mathieu Function Workspace
+@subsection Mathieu Function Workspace
+
+The Mathieu functions can be computed for a single order or
+for multiple orders, using array-based routines. The array-based
+routines require a preallocated workspace.
+
+@deftypefun {gsl_sf_mathieu_workspace *} gsl_sf_mathieu_alloc (size_t @var{n}, double @var{qmax})
+This function returns a workspace for the array versions of the
+Mathieu routines. The arguments @var{n} and @var{qmax} specify the
+maximum order and @math{q}-value of Mathieu functions which can be
+computed with this workspace.
+
+@comment This is required in order to properly
+@comment terminate the infinite eigenvalue matrix for high precision solutions.
+@comment The characteristic values for all orders @math{0 \to n} are stored in
+@comment the work structure array element @kbd{work->char_value}.
+@end deftypefun
+
+@deftypefun void gsl_sf_mathieu_free (gsl_sf_mathieu_workspace @var{*work})
+This function frees the workspace @var{work}.
+@end deftypefun
+
+@node Mathieu Function Characteristic Values
+@subsection Mathieu Function Characteristic Values
+@cindex Mathieu Function Characteristic Values
+
+@deftypefun int gsl_sf_mathieu_a (int @var{n}, double @var{q}, gsl_sf_result @var{*result})
+@deftypefunx int gsl_sf_mathieu_b (int @var{n}, double @var{q}, gsl_sf_result @var{*result})
+These routines compute the characteristic values @math{a_n(q)},
+@math{b_n(q)} of the Mathieu functions @math{ce_n(q,x)} and
+@math{se_n(q,x)}, respectively.
+@end deftypefun
+
+@deftypefun int gsl_sf_mathieu_a_array (int @var{order_min}, int @var{order_max}, double @var{q}, gsl_sf_mathieu_workspace @var{*work}, double @var{result_array}[])
+@deftypefunx int gsl_sf_mathieu_b_array (int @var{order_min}, int @var{order_max}, double @var{q}, gsl_sf_mathieu_workspace @var{*work}, double @var{result_array}[])
+These routines compute a series of Mathieu characteristic values
+@math{a_n(q)}, @math{b_n(q)} for @math{n} from @var{order_min} to
+@var{order_max} inclusive, storing the results in the array @var{result_array}.
+@end deftypefun
+
+@node Angular Mathieu Functions
+@subsection Angular Mathieu Functions
+@cindex Angular Mathieu Functions
+@cindex @math{ce(q,x)}, Mathieu function
+@cindex @math{se(q,x)}, Mathieu function
+
+@deftypefun int gsl_sf_mathieu_ce (int @var{n}, double @var{q}, double @var{x}, gsl_sf_result @var{*result})
+@deftypefunx int gsl_sf_mathieu_se (int @var{n}, double @var{q}, double @var{x}, gsl_sf_result @var{*result})
+These routines compute the angular Mathieu functions @math{ce_n(q,x)}
+and @math{se_n(q,x)}, respectively.
+@end deftypefun
+
+@deftypefun int gsl_sf_mathieu_ce_array (int @var{nmin}, int @var{nmax}, double @var{q}, double @var{x}, gsl_sf_mathieu_workspace @var{*work}, double @var{result_array}[])
+@deftypefunx int gsl_sf_mathieu_se_array (int @var{nmin}, int @var{nmax}, double @var{q}, double @var{x}, gsl_sf_mathieu_workspace @var{*work}, double @var{result_array}[])
+These routines compute a series of the angular Mathieu functions
+@math{ce_n(q,x)} and @math{se_n(q,x)} of order @math{n} from
+@var{nmin} to @var{nmax} inclusive, storing the results in the array
+@var{result_array}.
+@end deftypefun
+
+@node Radial Mathieu Functions
+@subsection Radial Mathieu Functions
+@cindex Radial Mathieu Functions
+
+@deftypefun int gsl_sf_mathieu_Mc (int @var{j}, int @var{n}, double @var{q}, double @var{x}, gsl_sf_result @var{*result})
+@deftypefunx int gsl_sf_mathieu_Ms (int @var{j}, int @var{n}, double @var{q}, double @var{x}, gsl_sf_result @var{*result})
+These routines compute the radial @var{j}-th kind Mathieu functions
+@c{$Mc_n^{(j)}(q,x)$}
+@math{Mc_n^@{(j)@}(q,x)} and
+@c{$Ms_n^{(j)}(q,x)$}
+@math{Ms_n^@{(j)@}(q,x)} of order @var{n}.
+
+The allowed values of @var{j} are 1 and 2.
+The functions for @math{j = 3,4} can be computed as
+@c{$M_n^{(3)} = M_n^{(1)} + iM_n^{(2)}$}
+@math{M_n^@{(3)@} = M_n^@{(1)@} + iM_n^@{(2)@}} and
+@c{$M_n^{(4)} = M_n^{(1)} - iM_n^{(2)}$}
+@math{M_n^@{(4)@} = M_n^@{(1)@} - iM_n^@{(2)@}},
+where
+@c{$M_n^{(j)} = Mc_n^{(j)}$}
+@math{M_n^@{(j)@} = Mc_n^@{(j)@}} or
+@c{$Ms_n^{(j)}$}
+@math{Ms_n^@{(j)@}}.
+@end deftypefun
+
+@deftypefun int gsl_sf_mathieu_Mc_array (int @var{j}, int @var{nmin}, int @var{nmax}, double @var{q}, double @var{x}, gsl_sf_mathieu_workspace @var{*work}, double @var{result_array}[])
+@deftypefunx int gsl_sf_mathieu_Ms_array (int @var{j}, int @var{nmin}, int @var{nmax}, double @var{q}, double @var{x}, gsl_sf_mathieu_workspace @var{*work}, double @var{result_array}[])
+These routines compute a series of the radial Mathieu functions of
+kind @var{j}, with order from @var{nmin} to @var{nmax} inclusive, storing the
+results in the array @var{result_array}.
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-pow-int.texi b/gsl-1.9/doc/specfunc-pow-int.texi
new file mode 100644
index 0000000..f05469a
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-pow-int.texi
@@ -0,0 +1,22 @@
+@cindex power function
+@cindex integer powers
+
+The following functions are equivalent to the function @code{gsl_pow_int}
+(@pxref{Small integer powers}) with an error estimate. These functions are
+declared in the header file @file{gsl_sf_pow_int.h}.
+
+@deftypefun double gsl_sf_pow_int (double @var{x}, int @var{n})
+@deftypefunx int gsl_sf_pow_int_e (double @var{x}, int @var{n}, gsl_sf_result * @var{result})
+These routines compute the power @math{x^n} for integer @var{n}. The
+power is computed using the minimum number of multiplications. For
+example, @math{x^8} is computed as @math{((x^2)^2)^2}, requiring only 3
+multiplications. For reasons of efficiency, these functions do not
+check for overflow or underflow conditions.
+@end deftypefun
+
+@example
+#include <gsl/gsl_sf_pow_int.h>
+/* compute 3.0**12 */
+double y = gsl_sf_pow_int(3.0, 12);
+@end example
+
diff --git a/gsl-1.9/doc/specfunc-psi.texi b/gsl-1.9/doc/specfunc-psi.texi
new file mode 100644
index 0000000..8bbef3b
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-psi.texi
@@ -0,0 +1,90 @@
+@cindex psi function
+@cindex digamma function
+@cindex polygamma functions
+
+The polygamma functions of order @math{n} are defined by
+@tex
+\beforedisplay
+$$
+\psi^{(n)}(x) = \left(d \over dx\right)^n \psi(x) = \left(d \over dx\right)^{n+1} \log(\Gamma(x))
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\psi^@{(n)@}(x) = (d/dx)^n \psi(x) = (d/dx)^@{n+1@} \log(\Gamma(x))
+@end example
+
+@end ifinfo
+@noindent
+where @math{\psi(x) = \Gamma'(x)/\Gamma(x)} is known as the digamma function.
+These functions are declared in the header file @file{gsl_sf_psi.h}.
+
+@menu
+* Digamma Function::
+* Trigamma Function::
+* Polygamma Function::
+@end menu
+
+@node Digamma Function
+@subsection Digamma Function
+
+@deftypefun double gsl_sf_psi_int (int @var{n})
+@deftypefunx int gsl_sf_psi_int_e (int @var{n}, gsl_sf_result * @var{result})
+These routines compute the digamma function @math{\psi(n)} for positive
+integer @var{n}. The digamma function is also called the Psi function.
+@comment Domain: n integer, n > 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_psi (double @var{x})
+@deftypefunx int gsl_sf_psi_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the digamma function @math{\psi(x)} for general
+@math{x}, @math{x \ne 0}.
+@comment Domain: x != 0.0, -1.0, -2.0, ...
+@comment Exceptional Return Values: GSL_EDOM, GSL_ELOSS
+@end deftypefun
+
+
+@deftypefun double gsl_sf_psi_1piy (double @var{y})
+@deftypefunx int gsl_sf_psi_1piy_e (double @var{y}, gsl_sf_result * @var{result})
+These routines compute the real part of the digamma function on the line
+@math{1+i y}, @math{\Re[\psi(1 + i y)]}.
+@comment exceptions: none
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@node Trigamma Function
+@subsection Trigamma Function
+
+@deftypefun double gsl_sf_psi_1_int (int @var{n})
+@deftypefunx int gsl_sf_psi_1_int_e (int @var{n}, gsl_sf_result * @var{result})
+These routines compute the Trigamma function @math{\psi'(n)} for
+positive integer @math{n}.
+@comment Domain: n integer, n > 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_psi_1 (double @var{x})
+@deftypefunx int gsl_sf_psi_1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the Trigamma function @math{\psi'(x)} for
+general @math{x}.
+@comment Domain: x != 0.0, -1.0, -2.0, ...
+@comment Exceptional Return Values: GSL_EDOM, GSL_ELOSS
+@end deftypefun
+
+@node Polygamma Function
+@subsection Polygamma Function
+
+@deftypefun double gsl_sf_psi_n (int @var{n}, double @var{x})
+@deftypefunx int gsl_sf_psi_n_e (int @var{n}, double @var{x}, gsl_sf_result * @var{result})
+These routines compute the polygamma function @c{$\psi^{(n)}(x)$}
+@math{\psi^@{(n)@}(x)} for
+@c{$n \ge 0$}
+@math{n >= 0}, @math{x > 0}.
+@comment Domain: n >= 0, x > 0.0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-synchrotron.texi b/gsl-1.9/doc/specfunc-synchrotron.texi
new file mode 100644
index 0000000..d02d4e3
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-synchrotron.texi
@@ -0,0 +1,24 @@
+@cindex synchrotron functions
+
+The functions described in this section are declared in the header file
+@file{gsl_sf_synchrotron.h}.
+
+@deftypefun double gsl_sf_synchrotron_1 (double @var{x})
+@deftypefunx int gsl_sf_synchrotron_1_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the first synchrotron function
+@c{$x \int_x^\infty dt K_{5/3}(t)$}
+@math{x \int_x^\infty dt K_@{5/3@}(t)} for @c{$x \ge 0$}
+@math{x >= 0}.
+@comment Domain: x >= 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_synchrotron_2 (double @var{x})
+@deftypefunx int gsl_sf_synchrotron_2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the second synchrotron function
+@c{$x K_{2/3}(x)$}
+@math{x K_@{2/3@}(x)} for @c{$x \ge 0$}
+@math{x >= 0}.
+@comment Domain: x >= 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-transport.texi b/gsl-1.9/doc/specfunc-transport.texi
new file mode 100644
index 0000000..7337d5c
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-transport.texi
@@ -0,0 +1,34 @@
+@cindex transport functions
+
+The transport functions @math{J(n,x)} are defined by the integral
+representations
+@c{$J(n,x) := \int_0^x dt \, t^n e^t /(e^t - 1)^2$}
+@math{J(n,x) := \int_0^x dt t^n e^t /(e^t - 1)^2}.
+They are declared in the header file @file{gsl_sf_transport.h}.
+
+@deftypefun double gsl_sf_transport_2 (double @var{x})
+@deftypefunx int gsl_sf_transport_2_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the transport function @math{J(2,x)}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+
+@deftypefun double gsl_sf_transport_3 (double @var{x})
+@deftypefunx int gsl_sf_transport_3_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the transport function @math{J(3,x)}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+
+@deftypefun double gsl_sf_transport_4 (double @var{x})
+@deftypefunx int gsl_sf_transport_4_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the transport function @math{J(4,x)}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
+
+
+@deftypefun double gsl_sf_transport_5 (double @var{x})
+@deftypefunx int gsl_sf_transport_5_e (double @var{x}, gsl_sf_result * @var{result})
+These routines compute the transport function @math{J(5,x)}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW
+@end deftypefun
diff --git a/gsl-1.9/doc/specfunc-trig.texi b/gsl-1.9/doc/specfunc-trig.texi
new file mode 100644
index 0000000..547b2a1
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-trig.texi
@@ -0,0 +1,160 @@
+@cindex trigonometric functions
+
+The library includes its own trigonometric functions in order to provide
+consistency across platforms and reliable error estimates. These
+functions are declared in the header file @file{gsl_sf_trig.h}.
+
+@menu
+* Circular Trigonometric Functions::
+* Trigonometric Functions for Complex Arguments::
+* Hyperbolic Trigonometric Functions::
+* Conversion Functions::
+* Restriction Functions::
+* Trigonometric Functions With Error Estimates::
+@end menu
+
+@node Circular Trigonometric Functions
+@subsection Circular Trigonometric Functions
+
+@deftypefun double gsl_sf_sin (double @var{x})
+@deftypefunx int gsl_sf_sin_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex sine function, special functions
+These routines compute the sine function @math{\sin(x)}.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun double gsl_sf_cos (double @var{x})
+@deftypefunx int gsl_sf_cos_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex cosine function, special functions
+These routines compute the cosine function @math{\cos(x)}.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun double gsl_sf_hypot (double @var{x}, double @var{y})
+@deftypefunx int gsl_sf_hypot_e (double @var{x}, double @var{y}, gsl_sf_result * @var{result})
+@cindex hypot function, special functions
+These routines compute the hypotenuse function @c{$\sqrt{x^2 + y^2}$}
+@math{\sqrt@{x^2 + y^2@}} avoiding overflow and underflow.
+@comment Exceptional Return Values:
+@end deftypefun
+
+@deftypefun double gsl_sf_sinc (double @var{x})
+@deftypefunx int gsl_sf_sinc_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex complex sinc function, special functions
+These routines compute @math{\sinc(x) = \sin(\pi x) / (\pi x)} for any
+value of @var{x}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+@node Trigonometric Functions for Complex Arguments
+@subsection Trigonometric Functions for Complex Arguments
+
+@deftypefun int gsl_sf_complex_sin_e (double @var{zr}, double @var{zi}, gsl_sf_result * @var{szr}, gsl_sf_result * @var{szi})
+@cindex complex sine function, special functions
+This function computes the complex sine, @math{\sin(z_r + i z_i)} storing
+the real and imaginary parts in @var{szr}, @var{szi}.
+@comment Exceptional Return Values: GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_complex_cos_e (double @var{zr}, double @var{zi}, gsl_sf_result * @var{czr}, gsl_sf_result * @var{czi})
+@cindex complex cosine function, special functions
+This function computes the complex cosine, @math{\cos(z_r + i z_i)} storing
+the real and imaginary parts in @var{szr}, @var{szi}.
+@comment Exceptional Return Values: GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun int gsl_sf_complex_logsin_e (double @var{zr}, double @var{zi}, gsl_sf_result * @var{lszr}, gsl_sf_result * @var{lszi})
+@cindex complex log sine function, special functions
+This function computes the logarithm of the complex sine,
+@math{\log(\sin(z_r + i z_i))} storing the real and imaginary parts in
+@var{szr}, @var{szi}.
+@comment Exceptional Return Values: GSL_EDOM, GSL_ELOSS
+@end deftypefun
+
+@node Hyperbolic Trigonometric Functions
+@subsection Hyperbolic Trigonometric Functions
+
+@deftypefun double gsl_sf_lnsinh (double @var{x})
+@deftypefunx int gsl_sf_lnsinh_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex logarithm of sinh function, special functions
+These routines compute @math{\log(\sinh(x))} for @math{x > 0}.
+@comment Domain: x > 0
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@deftypefun double gsl_sf_lncosh (double @var{x})
+@deftypefunx int gsl_sf_lncosh_e (double @var{x}, gsl_sf_result * @var{result})
+@cindex logarithm of cosh function, special functions
+These routines compute @math{\log(\cosh(x))} for any @var{x}.
+@comment Exceptional Return Values: none
+@end deftypefun
+
+
+@node Conversion Functions
+@subsection Conversion Functions
+@cindex polar to rectangular conversion
+@cindex rectangular to polar conversion
+
+@deftypefun int gsl_sf_polar_to_rect (double @var{r}, double @var{theta}, gsl_sf_result * @var{x}, gsl_sf_result * @var{y});
+This function converts the polar coordinates (@var{r},@var{theta}) to
+rectilinear coordinates (@var{x},@var{y}), @math{x = r\cos(\theta)},
+@math{y = r\sin(\theta)}.
+@comment Exceptional Return Values: GSL_ELOSS
+@end deftypefun
+
+@deftypefun int gsl_sf_rect_to_polar (double @var{x}, double @var{y}, gsl_sf_result * @var{r}, gsl_sf_result * @var{theta})
+This function converts the rectilinear coordinates (@var{x},@var{y}) to
+polar coordinates (@var{r},@var{theta}), such that @math{x =
+r\cos(\theta)}, @math{y = r\sin(\theta)}. The argument @var{theta}
+lies in the range @math{[-\pi, \pi]}.
+@comment Exceptional Return Values: GSL_EDOM
+@end deftypefun
+
+@node Restriction Functions
+@subsection Restriction Functions
+@cindex angular reduction
+@cindex reduction of angular variables
+
+@deftypefun double gsl_sf_angle_restrict_symm (double @var{theta})
+@deftypefunx int gsl_sf_angle_restrict_symm_e (double * @var{theta})
+These routines force the angle @var{theta} to lie in the range
+@math{(-\pi,\pi]}.
+
+Note that the mathematical value of @math{\pi} is slightly greater
+than @code{M_PI}, so the machine numbers @code{M_PI} and @code{-M_PI}
+are included in the range.
+@comment Exceptional Return Values: GSL_ELOSS
+@end deftypefun
+
+@deftypefun double gsl_sf_angle_restrict_pos (double @var{theta})
+@deftypefunx int gsl_sf_angle_restrict_pos_e (double * @var{theta})
+These routines force the angle @var{theta} to lie in the range @math{[0,
+2\pi)}.
+
+Note that the mathematical value of @math{2\pi} is slightly greater
+than @code{2*M_PI}, so the machine number @code{2*M_PI} is included in
+the range.
+
+@comment Exceptional Return Values: GSL_ELOSS
+@end deftypefun
+
+
+@node Trigonometric Functions With Error Estimates
+@subsection Trigonometric Functions With Error Estimates
+
+@deftypefun int gsl_sf_sin_err_e (double @var{x}, double @var{dx}, gsl_sf_result * @var{result})
+This routine computes the sine of an angle @var{x} with an associated
+absolute error @var{dx},
+@c{$\sin(x \pm dx)$}
+@math{\sin(x \pm dx)}. Note that this function is provided in the error-handling form only since
+its purpose is to compute the propagated error.
+@end deftypefun
+
+@deftypefun int gsl_sf_cos_err_e (double @var{x}, double @var{dx}, gsl_sf_result * @var{result})
+This routine computes the cosine of an angle @var{x} with an associated
+absolute error @var{dx},
+@c{$\cos(x \pm dx)$}
+@math{\cos(x \pm dx)}. Note that this function is provided in the error-handling form only since
+its purpose is to compute the propagated error.
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc-zeta.texi b/gsl-1.9/doc/specfunc-zeta.texi
new file mode 100644
index 0000000..a773212
--- /dev/null
+++ b/gsl-1.9/doc/specfunc-zeta.texi
@@ -0,0 +1,98 @@
+@cindex Zeta functions
+
+The Riemann zeta function is defined in Abramowitz & Stegun, Section
+23.2. The functions described in this section are declared in the
+header file @file{gsl_sf_zeta.h}.
+
+@menu
+* Riemann Zeta Function::
+* Riemann Zeta Function Minus One::
+* Hurwitz Zeta Function::
+* Eta Function::
+@end menu
+
+@node Riemann Zeta Function
+@subsection Riemann Zeta Function
+
+The Riemann zeta function is defined by the infinite sum
+@c{$\zeta(s) = \sum_{k=1}^\infty k^{-s}$}
+@math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}}.
+
+@deftypefun double gsl_sf_zeta_int (int @var{n})
+@deftypefunx int gsl_sf_zeta_int_e (int @var{n}, gsl_sf_result * @var{result})
+These routines compute the Riemann zeta function @math{\zeta(n)}
+for integer @var{n},
+@math{n \ne 1}.
+@comment Domain: n integer, n != 1
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_zeta (double @var{s})
+@deftypefunx int gsl_sf_zeta_e (double @var{s}, gsl_sf_result * @var{result})
+These routines compute the Riemann zeta function @math{\zeta(s)}
+for arbitrary @var{s},
+@math{s \ne 1}.
+@comment Domain: s != 1.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@node Riemann Zeta Function Minus One
+@subsection Riemann Zeta Function Minus One
+
+For large positive argument, the Riemann zeta function approaches one.
+In this region the fractional part is interesting, and therefore we
+need a function to evaluate it explicitly.
+
+@deftypefun double gsl_sf_zetam1_int (int @var{n})
+@deftypefunx int gsl_sf_zetam1_int_e (int @var{n}, gsl_sf_result * @var{result})
+These routines compute @math{\zeta(n) - 1} for integer @var{n},
+@math{n \ne 1}.
+@comment Domain: n integer, n != 1
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_zetam1 (double @var{s})
+@deftypefunx int gsl_sf_zetam1_e (double @var{s}, gsl_sf_result * @var{result})
+These routines compute @math{\zeta(s) - 1} for arbitrary @var{s},
+@math{s \ne 1}.
+@comment Domain: s != 1.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EOVRFLW
+@end deftypefun
+
+
+@node Hurwitz Zeta Function
+@subsection Hurwitz Zeta Function
+
+The Hurwitz zeta function is defined by
+@c{$\zeta(s,q) = \sum_0^\infty (k+q)^{-s}$}
+@math{\zeta(s,q) = \sum_0^\infty (k+q)^@{-s@}}.
+
+@deftypefun double gsl_sf_hzeta (double @var{s}, double @var{q})
+@deftypefunx int gsl_sf_hzeta_e (double @var{s}, double @var{q}, gsl_sf_result * @var{result})
+These routines compute the Hurwitz zeta function @math{\zeta(s,q)} for
+@math{s > 1}, @math{q > 0}.
+@comment Domain: s > 1.0, q > 0.0
+@comment Exceptional Return Values: GSL_EDOM, GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+
+@node Eta Function
+@subsection Eta Function
+
+The eta function is defined by
+@c{$\eta(s) = (1-2^{1-s}) \zeta(s)$}
+@math{\eta(s) = (1-2^@{1-s@}) \zeta(s)}.
+
+@deftypefun double gsl_sf_eta_int (int @var{n})
+@deftypefunx int gsl_sf_eta_int_e (int @var{n}, gsl_sf_result * @var{result})
+These routines compute the eta function @math{\eta(n)} for integer @var{n}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
+@deftypefun double gsl_sf_eta (double @var{s})
+@deftypefunx int gsl_sf_eta_e (double @var{s}, gsl_sf_result * @var{result})
+These routines compute the eta function @math{\eta(s)} for arbitrary @var{s}.
+@comment Exceptional Return Values: GSL_EUNDRFLW, GSL_EOVRFLW
+@end deftypefun
+
diff --git a/gsl-1.9/doc/specfunc.texi b/gsl-1.9/doc/specfunc.texi
new file mode 100644
index 0000000..50c93c3
--- /dev/null
+++ b/gsl-1.9/doc/specfunc.texi
@@ -0,0 +1,352 @@
+@cindex special functions
+
+This chapter describes the GSL special function library. The library
+includes routines for calculating the values of Airy functions, Bessel
+functions, Clausen functions, Coulomb wave functions, Coupling
+coefficients, the Dawson function, Debye functions, Dilogarithms,
+Elliptic integrals, Jacobi elliptic functions, Error functions,
+Exponential integrals, Fermi-Dirac functions, Gamma functions,
+Gegenbauer functions, Hypergeometric functions, Laguerre functions,
+Legendre functions and Spherical Harmonics, the Psi (Digamma) Function,
+Synchrotron functions, Transport functions, Trigonometric functions and
+Zeta functions. Each routine also computes an estimate of the numerical
+error in the calculated value of the function.
+
+The functions in this chapter are declared in individual header files,
+such as @file{gsl_sf_airy.h}, @file{gsl_sf_bessel.h}, etc. The complete
+set of header files can be included using the file @file{gsl_sf.h}.
+
+@menu
+* Special Function Usage::
+* The gsl_sf_result struct::
+* Special Function Modes::
+* Airy Functions and Derivatives::
+* Bessel Functions::
+* Clausen Functions::
+* Coulomb Functions::
+* Coupling Coefficients::
+* Dawson Function::
+* Debye Functions::
+* Dilogarithm::
+* Elementary Operations::
+* Elliptic Integrals::
+* Elliptic Functions (Jacobi)::
+* Error Functions::
+* Exponential Functions::
+* Exponential Integrals::
+* Fermi-Dirac Function::
+* Gamma and Beta Functions::
+* Gegenbauer Functions::
+* Hypergeometric Functions::
+* Laguerre Functions::
+* Lambert W Functions::
+* Legendre Functions and Spherical Harmonics::
+* Logarithm and Related Functions::
+* Mathieu Functions::
+* Power Function::
+* Psi (Digamma) Function::
+* Synchrotron Functions::
+* Transport Functions::
+* Trigonometric Functions::
+* Zeta Functions::
+* Special Functions Examples::
+* Special Functions References and Further Reading::
+@end menu
+
+@node Special Function Usage
+@section Usage
+
+The special functions are available in two calling conventions, a
+@dfn{natural form} which returns the numerical value of the function and
+an @dfn{error-handling form} which returns an error code. The two types
+of function provide alternative ways of accessing the same underlying
+code.
+
+The @dfn{natural form} returns only the value of the function and can be
+used directly in mathematical expressions. For example, the following
+function call will compute the value of the Bessel function
+@math{J_0(x)},
+
+@example
+double y = gsl_sf_bessel_J0 (x);
+@end example
+
+@noindent
+There is no way to access an error code or to estimate the error using
+this method. To allow access to this information the alternative
+error-handling form stores the value and error in a modifiable argument,
+
+@example
+gsl_sf_result result;
+int status = gsl_sf_bessel_J0_e (x, &result);
+@end example
+
+@noindent
+The error-handling functions have the suffix @code{_e}. The returned
+status value indicates error conditions such as overflow, underflow or
+loss of precision. If there are no errors the error-handling functions
+return @code{GSL_SUCCESS}.
+
+@node The gsl_sf_result struct
+@section The gsl_sf_result struct
+@cindex gsl_sf_result
+@cindex gsl_sf_result_e10
+
+The error handling form of the special functions always calculate an
+error estimate along with the value of the result. Therefore,
+structures are provided for amalgamating a value and error estimate.
+These structures are declared in the header file @file{gsl_sf_result.h}.
+
+The @code{gsl_sf_result} struct contains value and error fields.
+
+@example
+typedef struct
+@{
+ double val;
+ double err;
+@} gsl_sf_result;
+@end example
+
+@noindent
+The field @var{val} contains the value and the field @var{err} contains
+an estimate of the absolute error in the value.
+
+In some cases, an overflow or underflow can be detected and handled by a
+function. In this case, it may be possible to return a scaling exponent
+as well as an error/value pair in order to save the result from
+exceeding the dynamic range of the built-in types. The
+@code{gsl_sf_result_e10} struct contains value and error fields as well
+as an exponent field such that the actual result is obtained as
+@code{result * 10^(e10)}.
+
+@example
+typedef struct
+@{
+ double val;
+ double err;
+ int e10;
+@} gsl_sf_result_e10;
+@end example
+
+@node Special Function Modes
+@section Modes
+
+The goal of the library is to achieve double precision accuracy wherever
+possible. However the cost of evaluating some special functions to
+double precision can be significant, particularly where very high order
+terms are required. In these cases a @code{mode} argument allows the
+accuracy of the function to be reduced in order to improve performance.
+The following precision levels are available for the mode argument,
+
+@table @code
+@item GSL_PREC_DOUBLE
+Double-precision, a relative accuracy of approximately @c{$2 \times 10^{-16}$}
+@math{2 * 10^-16}.
+@item GSL_PREC_SINGLE
+Single-precision, a relative accuracy of approximately @c{$1 \times 10^{-7}$}
+@math{10^-7}.
+@item GSL_PREC_APPROX
+Approximate values, a relative accuracy of approximately @c{$5 \times 10^{-4}$}
+@math{5 * 10^-4}.
+@end table
+
+@noindent
+The approximate mode provides the fastest evaluation at the lowest
+accuracy.
+
+@node Airy Functions and Derivatives
+@section Airy Functions and Derivatives
+@include specfunc-airy.texi
+
+@node Bessel Functions
+@section Bessel Functions
+@include specfunc-bessel.texi
+
+@node Clausen Functions
+@section Clausen Functions
+@include specfunc-clausen.texi
+
+@node Coulomb Functions
+@section Coulomb Functions
+@include specfunc-coulomb.texi
+
+@node Coupling Coefficients
+@section Coupling Coefficients
+@include specfunc-coupling.texi
+
+@node Dawson Function
+@section Dawson Function
+@include specfunc-dawson.texi
+
+@node Debye Functions
+@section Debye Functions
+@include specfunc-debye.texi
+
+@node Dilogarithm
+@section Dilogarithm
+@include specfunc-dilog.texi
+
+@node Elementary Operations
+@section Elementary Operations
+@include specfunc-elementary.texi
+
+@node Elliptic Integrals
+@section Elliptic Integrals
+@include specfunc-ellint.texi
+
+@node Elliptic Functions (Jacobi)
+@section Elliptic Functions (Jacobi)
+@include specfunc-elljac.texi
+
+@node Error Functions
+@section Error Functions
+@include specfunc-erf.texi
+
+@node Exponential Functions
+@section Exponential Functions
+@include specfunc-exp.texi
+
+@node Exponential Integrals
+@section Exponential Integrals
+@include specfunc-expint.texi
+
+@node Fermi-Dirac Function
+@section Fermi-Dirac Function
+@include specfunc-fermi-dirac.texi
+
+@node Gamma and Beta Functions
+@section Gamma and Beta Functions
+@include specfunc-gamma.texi
+
+@node Gegenbauer Functions
+@section Gegenbauer Functions
+@include specfunc-gegenbauer.texi
+
+@node Hypergeometric Functions
+@section Hypergeometric Functions
+@include specfunc-hyperg.texi
+
+@node Laguerre Functions
+@section Laguerre Functions
+@include specfunc-laguerre.texi
+
+@node Lambert W Functions
+@section Lambert W Functions
+@include specfunc-lambert.texi
+
+@node Legendre Functions and Spherical Harmonics
+@section Legendre Functions and Spherical Harmonics
+@include specfunc-legendre.texi
+
+@node Logarithm and Related Functions
+@section Logarithm and Related Functions
+@include specfunc-log.texi
+
+@node Mathieu Functions
+@section Mathieu Functions
+@include specfunc-mathieu.texi
+
+@node Power Function
+@section Power Function
+@include specfunc-pow-int.texi
+
+@node Psi (Digamma) Function
+@section Psi (Digamma) Function
+@include specfunc-psi.texi
+
+@node Synchrotron Functions
+@section Synchrotron Functions
+@include specfunc-synchrotron.texi
+
+@node Transport Functions
+@section Transport Functions
+@include specfunc-transport.texi
+
+@node Trigonometric Functions
+@section Trigonometric Functions
+@include specfunc-trig.texi
+
+@node Zeta Functions
+@section Zeta Functions
+@include specfunc-zeta.texi
+
+@node Special Functions Examples
+@section Examples
+
+The following example demonstrates the use of the error handling form of
+the special functions, in this case to compute the Bessel function
+@math{J_0(5.0)},
+
+@example
+@verbatiminclude examples/specfun_e.c
+@end example
+
+@noindent
+Here are the results of running the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/specfun_e.out
+@end example
+
+@noindent
+The next program computes the same quantity using the natural form of
+the function. In this case the error term @var{result.err} and return
+status are not accessible.
+
+@example
+@verbatiminclude examples/specfun.c
+@end example
+
+@noindent
+The results of the function are the same,
+
+@example
+$ ./a.out
+@verbatiminclude examples/specfun.out
+@end example
+
+
+
+@node Special Functions References and Further Reading
+@section References and Further Reading
+
+The library follows the conventions of @cite{Abramowitz & Stegun} where
+possible,
+@itemize @asis
+@item
+Abramowitz & Stegun (eds.), @cite{Handbook of Mathematical Functions}
+@end itemize
+
+@noindent
+The following papers contain information on the algorithms used
+to compute the special functions,
+@cindex MISCFUN
+@itemize @asis
+@item
+MISCFUN: A software package to compute uncommon special functions.
+@cite{ACM Trans.@: Math.@: Soft.}, vol.@: 22, 1996, 288--301
+
+@item
+G.N. Watson, A Treatise on the Theory of Bessel Functions,
+2nd Edition (Cambridge University Press, 1944).
+
+@item
+G. Nemeth, Mathematical Approximations of Special Functions,
+Nova Science Publishers, ISBN 1-56072-052-2
+
+@item
+B.C. Carlson, Special Functions of Applied Mathematics (1977)
+
+@item
+W.J. Thompson, Atlas for Computing Mathematical Functions, John Wiley & Sons,
+New York (1997).
+
+@item
+Y.Y. Luke, Algorithms for the Computation of Mathematical Functions, Academic
+Press, New York (1977).
+
+@comment @item
+@comment Fermi-Dirac functions of orders @math{-1/2}, @math{1/2}, @math{3/2}, and
+@comment @math{5/2}. @cite{ACM Trans. Math. Soft.}, vol. 24, 1998, 1-12.
+@end itemize
diff --git a/gsl-1.9/doc/stamp-vti b/gsl-1.9/doc/stamp-vti
new file mode 100644
index 0000000..391fb64
--- /dev/null
+++ b/gsl-1.9/doc/stamp-vti
@@ -0,0 +1,4 @@
+@set UPDATED 20 February 2007
+@set UPDATED-MONTH February 2007
+@set EDITION 1.9
+@set VERSION 1.9
diff --git a/gsl-1.9/doc/statistics.texi b/gsl-1.9/doc/statistics.texi
new file mode 100644
index 0000000..c289278
--- /dev/null
+++ b/gsl-1.9/doc/statistics.texi
@@ -0,0 +1,741 @@
+@cindex statistics
+@cindex mean
+@cindex standard deviation
+@cindex variance
+@cindex estimated standard deviation
+@cindex estimated variance
+@cindex t-test
+@cindex range
+@cindex min
+@cindex max
+
+This chapter describes the statistical functions in the library. The
+basic statistical functions include routines to compute the mean,
+variance and standard deviation. More advanced functions allow you to
+calculate absolute deviations, skewness, and kurtosis as well as the
+median and arbitrary percentiles. The algorithms use recurrence
+relations to compute average quantities in a stable way, without large
+intermediate values that might overflow.
+
+The functions are available in versions for datasets in the standard
+floating-point and integer types. The versions for double precision
+floating-point data have the prefix @code{gsl_stats} and are declared in
+the header file @file{gsl_statistics_double.h}. The versions for integer
+data have the prefix @code{gsl_stats_int} and are declared in the header
+file @file{gsl_statistics_int.h}.
+
+@menu
+* Mean and standard deviation and variance::
+* Absolute deviation::
+* Higher moments (skewness and kurtosis)::
+* Autocorrelation::
+* Covariance::
+* Weighted Samples::
+* Maximum and Minimum values::
+* Median and Percentiles::
+* Example statistical programs::
+* Statistics References and Further Reading::
+@end menu
+
+@node Mean and standard deviation and variance
+@section Mean, Standard Deviation and Variance
+
+@deftypefun double gsl_stats_mean (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the arithmetic mean of @var{data}, a dataset of
+length @var{n} with stride @var{stride}. The arithmetic mean, or
+@dfn{sample mean}, is denoted by @math{\Hat\mu} and defined as,
+@tex
+\beforedisplay
+$$
+{\Hat\mu} = {1 \over N} \sum x_i
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\mu = (1/N) \sum x_i
+@end example
+
+@end ifinfo
+@noindent
+where @math{x_i} are the elements of the dataset @var{data}. For
+samples drawn from a gaussian distribution the variance of
+@math{\Hat\mu} is @math{\sigma^2 / N}.
+@end deftypefun
+
+@deftypefun double gsl_stats_variance (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the estimated, or @dfn{sample}, variance of
+@var{data}, a dataset of length @var{n} with stride @var{stride}. The
+estimated variance is denoted by @math{\Hat\sigma^2} and is defined by,
+@tex
+\beforedisplay
+$$
+{\Hat\sigma}^2 = {1 \over (N-1)} \sum (x_i - {\Hat\mu})^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\sigma^2 = (1/(N-1)) \sum (x_i - \Hat\mu)^2
+@end example
+
+@end ifinfo
+@noindent
+where @math{x_i} are the elements of the dataset @var{data}. Note that
+the normalization factor of @math{1/(N-1)} results from the derivation
+of @math{\Hat\sigma^2} as an unbiased estimator of the population
+variance @math{\sigma^2}. For samples drawn from a gaussian distribution
+the variance of @math{\Hat\sigma^2} itself is @math{2 \sigma^4 / N}.
+
+This function computes the mean via a call to @code{gsl_stats_mean}. If
+you have already computed the mean then you can pass it directly to
+@code{gsl_stats_variance_m}.
+@end deftypefun
+
+@deftypefun double gsl_stats_variance_m (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean})
+This function returns the sample variance of @var{data} relative to the
+given value of @var{mean}. The function is computed with @math{\Hat\mu}
+replaced by the value of @var{mean} that you supply,
+@tex
+\beforedisplay
+$$
+{\Hat\sigma}^2 = {1 \over (N-1)} \sum (x_i - mean)^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\sigma^2 = (1/(N-1)) \sum (x_i - mean)^2
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_stats_sd (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+@deftypefunx double gsl_stats_sd_m (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean})
+The standard deviation is defined as the square root of the variance.
+These functions return the square root of the corresponding variance
+functions above.
+@end deftypefun
+
+@deftypefun double gsl_stats_variance_with_fixed_mean (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean})
+This function computes an unbiased estimate of the variance of
+@var{data} when the population mean @var{mean} of the underlying
+distribution is known @emph{a priori}. In this case the estimator for
+the variance uses the factor @math{1/N} and the sample mean
+@math{\Hat\mu} is replaced by the known population mean @math{\mu},
+@tex
+\beforedisplay
+$$
+{\Hat\sigma}^2 = {1 \over N} \sum (x_i - \mu)^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\sigma^2 = (1/N) \sum (x_i - \mu)^2
+@end example
+@end ifinfo
+@end deftypefun
+
+
+@deftypefun double gsl_stats_sd_with_fixed_mean (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean})
+This function calculates the standard deviation of @var{data} for a
+fixed population mean @var{mean}. The result is the square root of the
+corresponding variance function.
+@end deftypefun
+
+@node Absolute deviation
+@section Absolute deviation
+
+@deftypefun double gsl_stats_absdev (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function computes the absolute deviation from the mean of
+@var{data}, a dataset of length @var{n} with stride @var{stride}. The
+absolute deviation from the mean is defined as,
+@tex
+\beforedisplay
+$$
+absdev = {1 \over N} \sum |x_i - {\Hat\mu}|
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+absdev = (1/N) \sum |x_i - \Hat\mu|
+@end example
+
+@end ifinfo
+@noindent
+where @math{x_i} are the elements of the dataset @var{data}. The
+absolute deviation from the mean provides a more robust measure of the
+width of a distribution than the variance. This function computes the
+mean of @var{data} via a call to @code{gsl_stats_mean}.
+@end deftypefun
+
+@deftypefun double gsl_stats_absdev_m (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean})
+This function computes the absolute deviation of the dataset @var{data}
+relative to the given value of @var{mean},
+@tex
+\beforedisplay
+$$
+absdev = {1 \over N} \sum |x_i - mean|
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+absdev = (1/N) \sum |x_i - mean|
+@end example
+
+@end ifinfo
+@noindent
+This function is useful if you have already computed the mean of
+@var{data} (and want to avoid recomputing it), or wish to calculate the
+absolute deviation relative to another value (such as zero, or the
+median).
+@end deftypefun
+
+@node Higher moments (skewness and kurtosis)
+@section Higher moments (skewness and kurtosis)
+
+@deftypefun double gsl_stats_skew (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function computes the skewness of @var{data}, a dataset of length
+@var{n} with stride @var{stride}. The skewness is defined as,
+@tex
+\beforedisplay
+$$
+skew = {1 \over N} \sum
+ {\left( x_i - {\Hat\mu} \over {\Hat\sigma} \right)}^3
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+skew = (1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^3
+@end example
+
+@end ifinfo
+@noindent
+where @math{x_i} are the elements of the dataset @var{data}. The skewness
+measures the asymmetry of the tails of a distribution.
+
+The function computes the mean and estimated standard deviation of
+@var{data} via calls to @code{gsl_stats_mean} and @code{gsl_stats_sd}.
+@end deftypefun
+
+@deftypefun double gsl_stats_skew_m_sd (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean}, double @var{sd})
+This function computes the skewness of the dataset @var{data} using the
+given values of the mean @var{mean} and standard deviation @var{sd},
+@tex
+\beforedisplay
+$$
+skew = {1 \over N}
+ \sum {\left( x_i - mean \over sd \right)}^3
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+skew = (1/N) \sum ((x_i - mean)/sd)^3
+@end example
+
+@end ifinfo
+@noindent
+These functions are useful if you have already computed the mean and
+standard deviation of @var{data} and want to avoid recomputing them.
+@end deftypefun
+
+@deftypefun double gsl_stats_kurtosis (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function computes the kurtosis of @var{data}, a dataset of length
+@var{n} with stride @var{stride}. The kurtosis is defined as,
+@tex
+\beforedisplay
+$$
+kurtosis = \left( {1 \over N} \sum
+ {\left(x_i - {\Hat\mu} \over {\Hat\sigma} \right)}^4
+ \right)
+ - 3
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+kurtosis = ((1/N) \sum ((x_i - \Hat\mu)/\Hat\sigma)^4) - 3
+@end example
+
+@end ifinfo
+@noindent
+The kurtosis measures how sharply peaked a distribution is, relative to
+its width. The kurtosis is normalized to zero for a gaussian
+distribution.
+@end deftypefun
+
+@deftypefun double gsl_stats_kurtosis_m_sd (const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{mean}, double @var{sd})
+This function computes the kurtosis of the dataset @var{data} using the
+given values of the mean @var{mean} and standard deviation @var{sd},
+@tex
+\beforedisplay
+$$
+kurtosis = {1 \over N}
+ \left( \sum {\left(x_i - mean \over sd \right)}^4 \right)
+ - 3
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+kurtosis = ((1/N) \sum ((x_i - mean)/sd)^4) - 3
+@end example
+
+@end ifinfo
+@noindent
+This function is useful if you have already computed the mean and
+standard deviation of @var{data} and want to avoid recomputing them.
+@end deftypefun
+
+@node Autocorrelation
+@section Autocorrelation
+
+@deftypefun double gsl_stats_lag1_autocorrelation (const double @var{data}[], const size_t @var{stride}, const size_t @var{n})
+This function computes the lag-1 autocorrelation of the dataset @var{data}.
+@tex
+\beforedisplay
+$$
+a_1 = {\sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i-1} - \Hat\mu)
+\over
+\sum_{i = 1}^{n} (x_{i} - \Hat\mu) (x_{i} - \Hat\mu)}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+a_1 = @{\sum_@{i = 1@}^@{n@} (x_@{i@} - \Hat\mu) (x_@{i-1@} - \Hat\mu)
+ \over
+ \sum_@{i = 1@}^@{n@} (x_@{i@} - \Hat\mu) (x_@{i@} - \Hat\mu)@}
+@end example
+@end ifinfo
+@end deftypefun
+
+
+@deftypefun double gsl_stats_lag1_autocorrelation_m (const double @var{data}[], const size_t @var{stride}, const size_t @var{n}, const double @var{mean})
+This function computes the lag-1 autocorrelation of the dataset
+@var{data} using the given value of the mean @var{mean}.
+
+@end deftypefun
+
+@node Covariance
+@section Covariance
+@cindex covariance, of two datasets
+
+@deftypefun double gsl_stats_covariance (const double @var{data1}[], const size_t @var{stride1}, const double @var{data2}[], const size_t @var{stride2}, const size_t @var{n})
+This function computes the covariance of the datasets @var{data1} and
+@var{data2} which must both be of the same length @var{n}.
+@tex
+\beforedisplay
+$$
+covar = {1 \over (n - 1)} \sum_{i = 1}^{n} (x_{i} - \Hat x) (y_{i} - \Hat y)
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+covar = (1/(n - 1)) \sum_@{i = 1@}^@{n@} (x_i - \Hat x) (y_i - \Hat y)
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_stats_covariance_m (const double @var{data1}[], const size_t @var{stride1}, const double @var{data2}[], const size_t @var{stride2}, const size_t @var{n}, const double @var{mean1}, const double @var{mean2})
+This function computes the covariance of the datasets @var{data1} and
+@var{data2} using the given values of the means, @var{mean1} and
+@var{mean2}. This is useful if you have already computed the means of
+@var{data1} and @var{data2} and want to avoid recomputing them.
+@end deftypefun
+
+
+@node Weighted Samples
+@section Weighted Samples
+
+The functions described in this section allow the computation of
+statistics for weighted samples. The functions accept an array of
+samples, @math{x_i}, with associated weights, @math{w_i}. Each sample
+@math{x_i} is considered as having been drawn from a Gaussian
+distribution with variance @math{\sigma_i^2}. The sample weight
+@math{w_i} is defined as the reciprocal of this variance, @math{w_i =
+1/\sigma_i^2}. Setting a weight to zero corresponds to removing a
+sample from a dataset.
+
+@deftypefun double gsl_stats_wmean (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the weighted mean of the dataset @var{data} with
+stride @var{stride} and length @var{n}, using the set of weights @var{w}
+with stride @var{wstride} and length @var{n}. The weighted mean is defined as,
+@tex
+\beforedisplay
+$$
+{\Hat\mu} = {{\sum w_i x_i} \over {\sum w_i}}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\mu = (\sum w_i x_i) / (\sum w_i)
+@end example
+@end ifinfo
+@end deftypefun
+
+
+@deftypefun double gsl_stats_wvariance (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the estimated variance of the dataset @var{data}
+with stride @var{stride} and length @var{n}, using the set of weights
+@var{w} with stride @var{wstride} and length @var{n}. The estimated
+variance of a weighted dataset is defined as,
+@tex
+\beforedisplay
+$$
+\Hat\sigma^2 = {{\sum w_i} \over {(\sum w_i)^2 - \sum (w_i^2)}}
+ \sum w_i (x_i - \Hat\mu)^2
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\sigma^2 = ((\sum w_i)/((\sum w_i)^2 - \sum (w_i^2)))
+ \sum w_i (x_i - \Hat\mu)^2
+@end example
+
+@end ifinfo
+@noindent
+Note that this expression reduces to an unweighted variance with the
+familiar @math{1/(N-1)} factor when there are @math{N} equal non-zero
+weights.
+@end deftypefun
+
+@deftypefun double gsl_stats_wvariance_m (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{wmean})
+This function returns the estimated variance of the weighted dataset
+@var{data} using the given weighted mean @var{wmean}.
+@end deftypefun
+
+@deftypefun double gsl_stats_wsd (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+The standard deviation is defined as the square root of the variance.
+This function returns the square root of the corresponding variance
+function @code{gsl_stats_wvariance} above.
+@end deftypefun
+
+@deftypefun double gsl_stats_wsd_m (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{wmean})
+This function returns the square root of the corresponding variance
+function @code{gsl_stats_wvariance_m} above.
+@end deftypefun
+
+@deftypefun double gsl_stats_wvariance_with_fixed_mean (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, const double @var{mean})
+This function computes an unbiased estimate of the variance of weighted
+dataset @var{data} when the population mean @var{mean} of the underlying
+distribution is known @emph{a priori}. In this case the estimator for
+the variance replaces the sample mean @math{\Hat\mu} by the known
+population mean @math{\mu},
+@tex
+\beforedisplay
+$$
+\Hat\sigma^2 = {{\sum w_i (x_i - \mu)^2} \over {\sum w_i}}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\Hat\sigma^2 = (\sum w_i (x_i - \mu)^2) / (\sum w_i)
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_stats_wsd_with_fixed_mean (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, const double @var{mean})
+The standard deviation is defined as the square root of the variance.
+This function returns the square root of the corresponding variance
+function above.
+@end deftypefun
+
+@deftypefun double gsl_stats_wabsdev (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function computes the weighted absolute deviation from the weighted
+mean of @var{data}. The absolute deviation from the mean is defined as,
+@tex
+\beforedisplay
+$$
+absdev = {{\sum w_i |x_i - \Hat\mu|} \over {\sum w_i}}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+absdev = (\sum w_i |x_i - \Hat\mu|) / (\sum w_i)
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_stats_wabsdev_m (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{wmean})
+This function computes the absolute deviation of the weighted dataset
+@var{data} about the given weighted mean @var{wmean}.
+@end deftypefun
+
+@deftypefun double gsl_stats_wskew (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function computes the weighted skewness of the dataset @var{data}.
+@tex
+\beforedisplay
+$$
+skew = {{\sum w_i ((x_i - xbar)/\sigma)^3} \over {\sum w_i}}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+skew = (\sum w_i ((x_i - xbar)/\sigma)^3) / (\sum w_i)
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_stats_wskew_m_sd (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{wmean}, double @var{wsd})
+This function computes the weighted skewness of the dataset @var{data}
+using the given values of the weighted mean and weighted standard
+deviation, @var{wmean} and @var{wsd}.
+@end deftypefun
+
+@deftypefun double gsl_stats_wkurtosis (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function computes the weighted kurtosis of the dataset @var{data}.
+
+@tex
+\beforedisplay
+$$
+kurtosis = {{\sum w_i ((x_i - xbar)/sigma)^4} \over {\sum w_i}} - 3
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+kurtosis = ((\sum w_i ((x_i - xbar)/sigma)^4) / (\sum w_i)) - 3
+@end example
+@end ifinfo
+@end deftypefun
+
+@deftypefun double gsl_stats_wkurtosis_m_sd (const double @var{w}[], size_t @var{wstride}, const double @var{data}[], size_t @var{stride}, size_t @var{n}, double @var{wmean}, double @var{wsd})
+This function computes the weighted kurtosis of the dataset @var{data}
+using the given values of the weighted mean and weighted standard
+deviation, @var{wmean} and @var{wsd}.
+@end deftypefun
+
+@node Maximum and Minimum values
+@section Maximum and Minimum values
+
+The following functions find the maximum and minimum values of a
+dataset (or their indices). If the data contains @code{NaN}s then a
+@code{NaN} will be returned, since the maximum or minimum value is
+undefined. For functions which return an index, the location of the
+first @code{NaN} in the array is returned.
+
+@deftypefun double gsl_stats_max (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the maximum value in @var{data}, a dataset of
+length @var{n} with stride @var{stride}. The maximum value is defined
+as the value of the element @math{x_i} which satisfies @c{$x_i \ge x_j$}
+@math{x_i >= x_j} for all @math{j}.
+
+If you want instead to find the element with the largest absolute
+magnitude you will need to apply @code{fabs} or @code{abs} to your data
+before calling this function.
+@end deftypefun
+
+@deftypefun double gsl_stats_min (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the minimum value in @var{data}, a dataset of
+length @var{n} with stride @var{stride}. The minimum value is defined
+as the value of the element @math{x_i} which satisfies @c{$x_i \le x_j$}
+@math{x_i <= x_j} for all @math{j}.
+
+If you want instead to find the element with the smallest absolute
+magnitude you will need to apply @code{fabs} or @code{abs} to your data
+before calling this function.
+@end deftypefun
+
+@deftypefun void gsl_stats_minmax (double * @var{min}, double * @var{max}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function finds both the minimum and maximum values @var{min},
+@var{max} in @var{data} in a single pass.
+@end deftypefun
+
+@deftypefun size_t gsl_stats_max_index (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the index of the maximum value in @var{data}, a
+dataset of length @var{n} with stride @var{stride}. The maximum value is
+defined as the value of the element @math{x_i} which satisfies
+@c{$x_i \ge x_j$}
+@math{x_i >= x_j} for all @math{j}. When there are several equal maximum
+elements then the first one is chosen.
+@end deftypefun
+
+@deftypefun size_t gsl_stats_min_index (const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the index of the minimum value in @var{data}, a
+dataset of length @var{n} with stride @var{stride}. The minimum value
+is defined as the value of the element @math{x_i} which satisfies
+@c{$x_i \ge x_j$}
+@math{x_i >= x_j} for all @math{j}. When there are several equal
+minimum elements then the first one is chosen.
+@end deftypefun
+
+@deftypefun void gsl_stats_minmax_index (size_t * @var{min_index}, size_t * @var{max_index}, const double @var{data}[], size_t @var{stride}, size_t @var{n})
+This function returns the indexes @var{min_index}, @var{max_index} of
+the minimum and maximum values in @var{data} in a single pass.
+@end deftypefun
+
+@node Median and Percentiles
+@section Median and Percentiles
+
+The median and percentile functions described in this section operate on
+sorted data. For convenience we use @dfn{quantiles}, measured on a scale
+of 0 to 1, instead of percentiles (which use a scale of 0 to 100).
+
+@deftypefun double gsl_stats_median_from_sorted_data (const double @var{sorted_data}[], size_t @var{stride}, size_t @var{n})
+This function returns the median value of @var{sorted_data}, a dataset
+of length @var{n} with stride @var{stride}. The elements of the array
+must be in ascending numerical order. There are no checks to see
+whether the data are sorted, so the function @code{gsl_sort} should
+always be used first.
+
+When the dataset has an odd number of elements the median is the value
+of element @math{(n-1)/2}. When the dataset has an even number of
+elements the median is the mean of the two nearest middle values,
+elements @math{(n-1)/2} and @math{n/2}. Since the algorithm for
+computing the median involves interpolation this function always returns
+a floating-point number, even for integer data types.
+@end deftypefun
+
+@deftypefun double gsl_stats_quantile_from_sorted_data (const double @var{sorted_data}[], size_t @var{stride}, size_t @var{n}, double @var{f})
+This function returns a quantile value of @var{sorted_data}, a
+double-precision array of length @var{n} with stride @var{stride}. The
+elements of the array must be in ascending numerical order. The
+quantile is determined by the @var{f}, a fraction between 0 and 1. For
+example, to compute the value of the 75th percentile @var{f} should have
+the value 0.75.
+
+There are no checks to see whether the data are sorted, so the function
+@code{gsl_sort} should always be used first.
+
+The quantile is found by interpolation, using the formula
+@tex
+\beforedisplay
+$$
+\hbox{quantile} = (1 - \delta) x_i + \delta x_{i+1}
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+quantile = (1 - \delta) x_i + \delta x_@{i+1@}
+@end example
+
+@end ifinfo
+@noindent
+where @math{i} is @code{floor}(@math{(n - 1)f}) and @math{\delta} is
+@math{(n-1)f - i}.
+
+Thus the minimum value of the array (@code{data[0*stride]}) is given by
+@var{f} equal to zero, the maximum value (@code{data[(n-1)*stride]}) is
+given by @var{f} equal to one and the median value is given by @var{f}
+equal to 0.5. Since the algorithm for computing quantiles involves
+interpolation this function always returns a floating-point number, even
+for integer data types.
+@end deftypefun
+
+
+@comment @node Statistical tests
+@comment @section Statistical tests
+
+@comment FIXME, do more work on the statistical tests
+
+@comment -@deftypefun double gsl_stats_ttest (const double @var{data1}[], double @var{data2}[], size_t @var{n1}, size_t @var{n2})
+@comment -@deftypefunx Statistics double gsl_stats_int_ttest (const double @var{data1}[], double @var{data2}[], size_t @var{n1}, size_t @var{n2})
+
+@comment The function @code{gsl_stats_ttest} computes the t-test statistic for
+@comment the two arrays @var{data1}[] and @var{data2}[], of lengths @var{n1} and
+@comment -@var{n2} respectively.
+
+@comment The t-test statistic measures the difference between the means of two
+@comment datasets.
+
+@node Example statistical programs
+@section Examples
+Here is a basic example of how to use the statistical functions:
+
+@example
+@verbatiminclude examples/stat.c
+@end example
+
+The program should produce the following output,
+
+@example
+@verbatiminclude examples/stat.out
+@end example
+
+
+Here is an example using sorted data,
+
+@example
+@verbatiminclude examples/statsort.c
+@end example
+
+This program should produce the following output,
+
+@example
+@verbatiminclude examples/statsort.out
+@end example
+
+@node Statistics References and Further Reading
+@section References and Further Reading
+
+The standard reference for almost any topic in statistics is the
+multi-volume @cite{Advanced Theory of Statistics} by Kendall and Stuart.
+
+@itemize @asis
+@item
+Maurice Kendall, Alan Stuart, and J. Keith Ord.
+@cite{The Advanced Theory of Statistics} (multiple volumes)
+reprinted as @cite{Kendall's Advanced Theory of Statistics}.
+Wiley, ISBN 047023380X.
+@end itemize
+
+@noindent
+Many statistical concepts can be more easily understood by a Bayesian
+approach. The following book by Gelman, Carlin, Stern and Rubin gives a
+comprehensive coverage of the subject.
+
+@itemize @asis
+@item
+Andrew Gelman, John B. Carlin, Hal S. Stern, Donald B. Rubin.
+@cite{Bayesian Data Analysis}.
+Chapman & Hall, ISBN 0412039915.
+@end itemize
+
+@noindent
+For physicists the Particle Data Group provides useful reviews of
+Probability and Statistics in the ``Mathematical Tools'' section of its
+Annual Review of Particle Physics.
+
+@itemize @asis
+@item
+@cite{Review of Particle Properties}
+R.M. Barnett et al., Physical Review D54, 1 (1996)
+@end itemize
+
+@noindent
+The Review of Particle Physics is available online at
+the website @uref{http://pdg.lbl.gov/}.
+
+
diff --git a/gsl-1.9/doc/sum.texi b/gsl-1.9/doc/sum.texi
new file mode 100644
index 0000000..9b11675
--- /dev/null
+++ b/gsl-1.9/doc/sum.texi
@@ -0,0 +1,186 @@
+@cindex acceleration of series
+@cindex summation, acceleration
+@cindex series, acceleration
+@cindex u-transform for series
+@cindex Levin u-transform
+@cindex convergence, accelerating a series
+
+The functions described in this chapter accelerate the convergence of a
+series using the Levin @math{u}-transform. This method takes a small number of
+terms from the start of a series and uses a systematic approximation to
+compute an extrapolated value and an estimate of its error. The
+@math{u}-transform works for both convergent and divergent series, including
+asymptotic series.
+
+These functions are declared in the header file @file{gsl_sum.h}.
+
+@menu
+* Acceleration functions::
+* Acceleration functions without error estimation::
+* Example of accelerating a series::
+* Series Acceleration References::
+@end menu
+
+@node Acceleration functions
+@section Acceleration functions
+
+The following functions compute the full Levin @math{u}-transform of a series
+with its error estimate. The error estimate is computed by propagating
+rounding errors from each term through to the final extrapolation.
+
+These functions are intended for summing analytic series where each term
+is known to high accuracy, and the rounding errors are assumed to
+originate from finite precision. They are taken to be relative errors of
+order @code{GSL_DBL_EPSILON} for each term.
+
+The calculation of the error in the extrapolated value is an
+@math{O(N^2)} process, which is expensive in time and memory. A faster
+but less reliable method which estimates the error from the convergence
+of the extrapolated value is described in the next section. For the
+method described here a full table of intermediate values and
+derivatives through to @math{O(N)} must be computed and stored, but this
+does give a reliable error estimate.
+
+@deftypefun {gsl_sum_levin_u_workspace *} gsl_sum_levin_u_alloc (size_t @var{n})
+This function allocates a workspace for a Levin @math{u}-transform of @var{n}
+terms. The size of the workspace is @math{O(2n^2 + 3n)}.
+@end deftypefun
+
+@deftypefun void gsl_sum_levin_u_free (gsl_sum_levin_u_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_sum_levin_u_accel (const double * @var{array}, size_t @var{array_size}, gsl_sum_levin_u_workspace * @var{w}, double * @var{sum_accel}, double * @var{abserr})
+This function takes the terms of a series in @var{array} of size
+@var{array_size} and computes the extrapolated limit of the series using
+a Levin @math{u}-transform. Additional working space must be provided in
+@var{w}. The extrapolated sum is stored in @var{sum_accel}, with an
+estimate of the absolute error stored in @var{abserr}. The actual
+term-by-term sum is returned in @code{w->sum_plain}. The algorithm
+calculates the truncation error (the difference between two successive
+extrapolations) and round-off error (propagated from the individual
+terms) to choose an optimal number of terms for the extrapolation.
+All the terms of the series passed in through @var{array} should be non-zero.
+@end deftypefun
+
+
+@node Acceleration functions without error estimation
+@section Acceleration functions without error estimation
+
+The functions described in this section compute the Levin @math{u}-transform of
+series and attempt to estimate the error from the ``truncation error'' in
+the extrapolation, the difference between the final two approximations.
+Using this method avoids the need to compute an intermediate table of
+derivatives because the error is estimated from the behavior of the
+extrapolated value itself. Consequently this algorithm is an @math{O(N)}
+process and only requires @math{O(N)} terms of storage. If the series
+converges sufficiently fast then this procedure can be acceptable. It
+is appropriate to use this method when there is a need to compute many
+extrapolations of series with similar convergence properties at high-speed.
+For example, when numerically integrating a function defined by a
+parameterized series where the parameter varies only slightly. A
+reliable error estimate should be computed first using the full
+algorithm described above in order to verify the consistency of the
+results.
+
+@deftypefun {gsl_sum_levin_utrunc_workspace *} gsl_sum_levin_utrunc_alloc (size_t @var{n})
+This function allocates a workspace for a Levin @math{u}-transform of @var{n}
+terms, without error estimation. The size of the workspace is
+@math{O(3n)}.
+@end deftypefun
+
+@deftypefun void gsl_sum_levin_utrunc_free (gsl_sum_levin_utrunc_workspace * @var{w})
+This function frees the memory associated with the workspace @var{w}.
+@end deftypefun
+
+@deftypefun int gsl_sum_levin_utrunc_accel (const double * @var{array}, size_t @var{array_size}, gsl_sum_levin_utrunc_workspace * @var{w}, double * @var{sum_accel}, double * @var{abserr_trunc})
+This function takes the terms of a series in @var{array} of size
+@var{array_size} and computes the extrapolated limit of the series using
+a Levin @math{u}-transform. Additional working space must be provided in
+@var{w}. The extrapolated sum is stored in @var{sum_accel}. The actual
+term-by-term sum is returned in @code{w->sum_plain}. The algorithm
+terminates when the difference between two successive extrapolations
+reaches a minimum or is sufficiently small. The difference between these
+two values is used as estimate of the error and is stored in
+@var{abserr_trunc}. To improve the reliability of the algorithm the
+extrapolated values are replaced by moving averages when calculating the
+truncation error, smoothing out any fluctuations.
+@end deftypefun
+
+
+@node Example of accelerating a series
+@section Examples
+
+The following code calculates an estimate of @math{\zeta(2) = \pi^2 / 6}
+using the series,
+@tex
+\beforedisplay
+$$
+\zeta(2) = 1 + 1/2^2 + 1/3^2 + 1/4^2 + \dots
+$$
+\afterdisplay
+@end tex
+@ifinfo
+
+@example
+\zeta(2) = 1 + 1/2^2 + 1/3^2 + 1/4^2 + ...
+@end example
+
+@end ifinfo
+@noindent
+After @var{N} terms the error in the sum is @math{O(1/N)}, making direct
+summation of the series converge slowly.
+
+@example
+@verbatiminclude examples/sum.c
+@end example
+
+@noindent
+The output below shows that the Levin @math{u}-transform is able to obtain an
+estimate of the sum to 1 part in
+@c{$10^{10}$}
+@math{10^10} using the first eleven terms of the series. The
+error estimate returned by the function is also accurate, giving
+the correct number of significant digits.
+
+@example
+$ ./a.out
+@verbatiminclude examples/sum.out
+@end example
+
+@noindent
+Note that a direct summation of this series would require
+@c{$10^{10}$}
+@math{10^10} terms to achieve the same precision as the accelerated
+sum does in 13 terms.
+
+@node Series Acceleration References
+@section References and Further Reading
+
+The algorithms used by these functions are described in the following papers,
+
+@itemize @asis
+@item
+T. Fessler, W.F. Ford, D.A. Smith,
+@sc{hurry}: An acceleration algorithm for scalar sequences and series
+@cite{ACM Transactions on Mathematical Software}, 9(3):346--354, 1983.
+and Algorithm 602 9(3):355--357, 1983.
+@end itemize
+
+@noindent
+The theory of the @math{u}-transform was presented by Levin,
+
+@itemize @asis
+@item
+D. Levin,
+Development of Non-Linear Transformations for Improving Convergence of
+Sequences, @cite{Intern.@: J.@: Computer Math.} B3:371--388, 1973.
+@end itemize
+
+@noindent
+A review paper on the Levin Transform is available online,
+@itemize @asis
+@item
+Herbert H. H. Homeier, Scalar Levin-Type Sequence Transformations,
+@uref{http://arxiv.org/abs/math/0005209}.
+@end itemize
diff --git a/gsl-1.9/doc/texinfo.tex b/gsl-1.9/doc/texinfo.tex
new file mode 100644
index 0000000..c93912a
--- /dev/null
+++ b/gsl-1.9/doc/texinfo.tex
@@ -0,0 +1,7086 @@
+% texinfo.tex -- TeX macros to handle Texinfo files.
+%
+% Load plain if necessary, i.e., if running under initex.
+\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+%
+\def\texinfoversion{2004-11-25.16}
+%
+% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software
+% Foundation, Inc.
+%
+% This texinfo.tex file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU General Public License as
+% published by the Free Software Foundation; either version 2, or (at
+% your option) any later version.
+%
+% This texinfo.tex file is distributed in the hope that it will be
+% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this texinfo.tex file; see the file COPYING. If not, write
+% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA 02111-1307, USA.
+%
+% As a special exception, when this file is read by TeX when processing
+% a Texinfo source document, you may use the result without
+% restriction. (This has been our intent since Texinfo was invented.)
+%
+% Please try the latest version of texinfo.tex before submitting bug
+% reports; you can get the latest version from:
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+% ftp://tug.org/tex/texinfo.tex
+% (and all CTAN mirrors, see http://www.ctan.org).
+% The texinfo.tex in any given distribution could well be out
+% of date, so if that's what you're using, please check.
+%
+% Send bug reports to bug-texinfo@gnu.org. Please include including a
+% complete document in each bug report with which we can reproduce the
+% problem. Patches are, of course, greatly appreciated.
+%
+% To process a Texinfo manual with TeX, it's most reliable to use the
+% texi2dvi shell script that comes with the distribution. For a simple
+% manual foo.texi, however, you can get away with this:
+% tex foo.texi
+% texindex foo.??
+% tex foo.texi
+% tex foo.texi
+% dvips foo.dvi -o # or whatever; this makes foo.ps.
+% The extra TeX runs get the cross-reference information correct.
+% Sometimes one run after texindex suffices, and sometimes you need more
+% than two; texi2dvi does it as many times as necessary.
+%
+% It is possible to adapt texinfo.tex for other languages, to some
+% extent. You can get the existing language-specific files from the
+% full Texinfo distribution.
+%
+% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
+
+
+\message{Loading texinfo [version \texinfoversion]:}
+
+% If in a .fmt file, print the version number
+% and turn on active characters that we couldn't do earlier because
+% they might have appeared in the input file name.
+\everyjob{\message{[Texinfo version \texinfoversion]}%
+ \catcode`+=\active \catcode`\_=\active}
+
+\message{Basics,}
+\chardef\other=12
+
+% We never want plain's \outer definition of \+ in Texinfo.
+% For @tex, we can use \tabalign.
+\let\+ = \relax
+
+% Save some plain tex macros whose names we will redefine.
+\let\ptexb=\b
+\let\ptexbullet=\bullet
+\let\ptexc=\c
+\let\ptexcomma=\,
+\let\ptexdot=\.
+\let\ptexdots=\dots
+\let\ptexend=\end
+\let\ptexequiv=\equiv
+\let\ptexexclam=\!
+\let\ptexfootnote=\footnote
+\let\ptexgtr=>
+\let\ptexhat=^
+\let\ptexi=\i
+\let\ptexindent=\indent
+\let\ptexinsert=\insert
+\let\ptexlbrace=\{
+\let\ptexless=<
+\let\ptexnewwrite\newwrite
+\let\ptexnoindent=\noindent
+\let\ptexplus=+
+\let\ptexrbrace=\}
+\let\ptexslash=\/
+\let\ptexstar=\*
+\let\ptext=\t
+
+% If this character appears in an error message or help string, it
+% starts a new line in the output.
+\newlinechar = `^^J
+
+% Use TeX 3.0's \inputlineno to get the line number, for better error
+% messages, but if we're using an old version of TeX, don't do anything.
+%
+\ifx\inputlineno\thisisundefined
+ \let\linenumber = \empty % Pre-3.0.
+\else
+ \def\linenumber{l.\the\inputlineno:\space}
+\fi
+
+% Set up fixed words for English if not already set.
+\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi
+\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi
+\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi
+\ifx\putwordin\undefined \gdef\putwordin{in}\fi
+\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi
+\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
+\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi
+\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi
+\ifx\putwordof\undefined \gdef\putwordof{of}\fi
+\ifx\putwordon\undefined \gdef\putwordon{on}\fi
+\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi
+\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi
+\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi
+\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi
+\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi
+\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi
+\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi
+%
+\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
+\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
+\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
+\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
+\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
+\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
+\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
+\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
+\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
+\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
+\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
+\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
+%
+\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi
+\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi
+\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi
+\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi
+\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi
+
+% In some macros, we cannot use the `\? notation---the left quote is
+% in some cases the escape char.
+\chardef\colonChar = `\:
+\chardef\commaChar = `\,
+\chardef\dotChar = `\.
+\chardef\exclamChar= `\!
+\chardef\questChar = `\?
+\chardef\semiChar = `\;
+\chardef\underChar = `\_
+
+\chardef\spaceChar = `\ %
+\chardef\spacecat = 10
+\def\spaceisspace{\catcode\spaceChar=\spacecat}
+
+% Ignore a token.
+%
+\def\gobble#1{}
+
+% The following is used inside several \edef's.
+\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
+
+% Hyphenation fixes.
+\hyphenation{
+ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
+ ap-pen-dix bit-map bit-maps
+ data-base data-bases eshell fall-ing half-way long-est man-u-script
+ man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
+ par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
+ spell-ing spell-ings
+ stand-alone strong-est time-stamp time-stamps which-ever white-space
+ wide-spread wrap-around
+}
+
+% Margin to add to right of even pages, to left of odd pages.
+\newdimen\bindingoffset
+\newdimen\normaloffset
+\newdimen\pagewidth \newdimen\pageheight
+
+% For a final copy, take out the rectangles
+% that mark overfull boxes (in case you have decided
+% that the text looks ok even though it passes the margin).
+%
+\def\finalout{\overfullrule=0pt}
+
+% @| inserts a changebar to the left of the current line. It should
+% surround any changed text. This approach does *not* work if the
+% change spans more than two lines of output. To handle that, we would
+% have adopt a much more difficult approach (putting marks into the main
+% vertical list for the beginning and end of each change).
+%
+\def\|{%
+ % \vadjust can only be used in horizontal mode.
+ \leavevmode
+ %
+ % Append this vertical mode material after the current line in the output.
+ \vadjust{%
+ % We want to insert a rule with the height and depth of the current
+ % leading; that is exactly what \strutbox is supposed to record.
+ \vskip-\baselineskip
+ %
+ % \vadjust-items are inserted at the left edge of the type. So
+ % the \llap here moves out into the left-hand margin.
+ \llap{%
+ %
+ % For a thicker or thinner bar, change the `1pt'.
+ \vrule height\baselineskip width1pt
+ %
+ % This is the space between the bar and the text.
+ \hskip 12pt
+ }%
+ }%
+}
+
+% Sometimes it is convenient to have everything in the transcript file
+% and nothing on the terminal. We don't just call \tracingall here,
+% since that produces some useless output on the terminal. We also make
+% some effort to order the tracing commands to reduce output in the log
+% file; cf. trace.sty in LaTeX.
+%
+\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
+\def\loggingall{%
+ \tracingstats2
+ \tracingpages1
+ \tracinglostchars2 % 2 gives us more in etex
+ \tracingparagraphs1
+ \tracingoutput1
+ \tracingmacros2
+ \tracingrestores1
+ \showboxbreadth\maxdimen \showboxdepth\maxdimen
+ \ifx\eTeXversion\undefined\else % etex gives us more logging
+ \tracingscantokens1
+ \tracingifs1
+ \tracinggroups1
+ \tracingnesting2
+ \tracingassigns1
+ \fi
+ \tracingcommands3 % 3 gives us more in etex
+ \errorcontextlines16
+}%
+
+% add check for \lastpenalty to plain's definitions. If the last thing
+% we did was a \nobreak, we don't want to insert more space.
+%
+\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
+ \removelastskip\penalty-50\smallskip\fi\fi}
+\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
+ \removelastskip\penalty-100\medskip\fi\fi}
+\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
+ \removelastskip\penalty-200\bigskip\fi\fi}
+
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+%
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
+%
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
+%
+\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
+\newdimen\cornerlong \cornerlong=1pc
+\newdimen\cornerthick \cornerthick=.3pt
+\newdimen\topandbottommargin \topandbottommargin=.75in
+
+% Main output routine.
+\chardef\PAGE = 255
+\output = {\onepageout{\pagecontents\PAGE}}
+
+\newbox\headlinebox
+\newbox\footlinebox
+
+% \onepageout takes a vbox as an argument. Note that \pagecontents
+% does insertions, but you have to call it yourself.
+\def\onepageout#1{%
+ \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
+ %
+ \ifodd\pageno \advance\hoffset by \bindingoffset
+ \else \advance\hoffset by -\bindingoffset\fi
+ %
+ % Do this outside of the \shipout so @code etc. will be expanded in
+ % the headline as they should be, not taken literally (outputting ''code).
+ \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
+ \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
+ %
+ {%
+ % Have to do this stuff outside the \shipout because we want it to
+ % take effect in \write's, yet the group defined by the \vbox ends
+ % before the \shipout runs.
+ %
+ \escapechar = `\\ % use backslash in output files.
+ \indexdummies % don't expand commands in the output.
+ \normalturnoffactive % \ in index entries must not stay \, e.g., if
+ % the page break happens to be in the middle of an example.
+ \shipout\vbox{%
+ % Do this early so pdf references go to the beginning of the page.
+ \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
+ %
+ \ifcropmarks \vbox to \outervsize\bgroup
+ \hsize = \outerhsize
+ \vskip-\topandbottommargin
+ \vtop to0pt{%
+ \line{\ewtop\hfil\ewtop}%
+ \nointerlineskip
+ \line{%
+ \vbox{\moveleft\cornerthick\nstop}%
+ \hfill
+ \vbox{\moveright\cornerthick\nstop}%
+ }%
+ \vss}%
+ \vskip\topandbottommargin
+ \line\bgroup
+ \hfil % center the page within the outer (page) hsize.
+ \ifodd\pageno\hskip\bindingoffset\fi
+ \vbox\bgroup
+ \fi
+ %
+ \unvbox\headlinebox
+ \pagebody{#1}%
+ \ifdim\ht\footlinebox > 0pt
+ % Only leave this space if the footline is nonempty.
+ % (We lessened \vsize for it in \oddfootingxxx.)
+ % The \baselineskip=24pt in plain's \makefootline has no effect.
+ \vskip 2\baselineskip
+ \unvbox\footlinebox
+ \fi
+ %
+ \ifcropmarks
+ \egroup % end of \vbox\bgroup
+ \hfil\egroup % end of (centering) \line\bgroup
+ \vskip\topandbottommargin plus1fill minus1fill
+ \boxmaxdepth = \cornerthick
+ \vbox to0pt{\vss
+ \line{%
+ \vbox{\moveleft\cornerthick\nsbot}%
+ \hfill
+ \vbox{\moveright\cornerthick\nsbot}%
+ }%
+ \nointerlineskip
+ \line{\ewbot\hfil\ewbot}%
+ }%
+ \egroup % \vbox from first cropmarks clause
+ \fi
+ }% end of \shipout\vbox
+ }% end of group with \normalturnoffactive
+ \advancepageno
+ \ifnum\outputpenalty>-20000 \else\dosupereject\fi
+}
+
+\newinsert\margin \dimen\margin=\maxdimen
+
+\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
+{\catcode`\@ =11
+\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
+% marginal hacks, juha@viisa.uucp (Juha Takala)
+\ifvoid\margin\else % marginal info is present
+ \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
+\dimen@=\dp#1 \unvbox#1
+\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
+\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
+}
+
+% Here are the rules for the cropmarks. Note that they are
+% offset so that the space between them is truly \outerhsize or \outervsize
+% (P. A. MacKay, 12 November, 1986)
+%
+\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
+\def\nstop{\vbox
+ {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
+\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
+\def\nsbot{\vbox
+ {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
+
+% Parse an argument, then pass it to #1. The argument is the rest of
+% the input line (except we remove a trailing comment). #1 should be a
+% macro which expects an ordinary undelimited TeX argument.
+%
+\def\parsearg{\parseargusing{}}
+\def\parseargusing#1#2{%
+ \def\next{#2}%
+ \begingroup
+ \obeylines
+ \spaceisspace
+ #1%
+ \parseargline\empty% Insert the \empty token, see \finishparsearg below.
+}
+
+{\obeylines %
+ \gdef\parseargline#1^^M{%
+ \endgroup % End of the group started in \parsearg.
+ \argremovecomment #1\comment\ArgTerm%
+ }%
+}
+
+% First remove any @comment, then any @c comment.
+\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
+\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
+
+% Each occurence of `\^^M' or `<space>\^^M' is replaced by a single space.
+%
+% \argremovec might leave us with trailing space, e.g.,
+% @end itemize @c foo
+% This space token undergoes the same procedure and is eventually removed
+% by \finishparsearg.
+%
+\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
+\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
+\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
+ \def\temp{#3}%
+ \ifx\temp\empty
+ % We cannot use \next here, as it holds the macro to run;
+ % thus we reuse \temp.
+ \let\temp\finishparsearg
+ \else
+ \let\temp\argcheckspaces
+ \fi
+ % Put the space token in:
+ \temp#1 #3\ArgTerm
+}
+
+% If a _delimited_ argument is enclosed in braces, they get stripped; so
+% to get _exactly_ the rest of the line, we had to prevent such situation.
+% We prepended an \empty token at the very beginning and we expand it now,
+% just before passing the control to \next.
+% (Similarily, we have to think about #3 of \argcheckspacesY above: it is
+% either the null string, or it ends with \^^M---thus there is no danger
+% that a pair of braces would be stripped.
+%
+% But first, we have to remove the trailing space token.
+%
+\def\finishparsearg#1 \ArgTerm{\expandafter\next\expandafter{#1}}
+
+% \parseargdef\foo{...}
+% is roughly equivalent to
+% \def\foo{\parsearg\Xfoo}
+% \def\Xfoo#1{...}
+%
+% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
+% favourite TeX trick. --kasal, 16nov03
+
+\def\parseargdef#1{%
+ \expandafter \doparseargdef \csname\string#1\endcsname #1%
+}
+\def\doparseargdef#1#2{%
+ \def#2{\parsearg#1}%
+ \def#1##1%
+}
+
+% Several utility definitions with active space:
+{
+ \obeyspaces
+ \gdef\obeyedspace{ }
+
+ % Make each space character in the input produce a normal interword
+ % space in the output. Don't allow a line break at this space, as this
+ % is used only in environments like @example, where each line of input
+ % should produce a line of output anyway.
+ %
+ \gdef\sepspaces{\obeyspaces\let =\tie}
+
+ % If an index command is used in an @example environment, any spaces
+ % therein should become regular spaces in the raw index file, not the
+ % expansion of \tie (\leavevmode \penalty \@M \ ).
+ \gdef\unsepspaces{\let =\space}
+}
+
+
+\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
+
+% Define the framework for environments in texinfo.tex. It's used like this:
+%
+% \envdef\foo{...}
+% \def\Efoo{...}
+%
+% It's the responsibility of \envdef to insert \begingroup before the
+% actual body; @end closes the group after calling \Efoo. \envdef also
+% defines \thisenv, so the current environment is known; @end checks
+% whether the environment name matches. The \checkenv macro can also be
+% used to check whether the current environment is the one expected.
+%
+% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
+% are not treated as enviroments; they don't open a group. (The
+% implementation of @end takes care not to call \endgroup in this
+% special case.)
+
+
+% At runtime, environments start with this:
+\def\startenvironment#1{\begingroup\def\thisenv{#1}}
+% initialize
+\let\thisenv\empty
+
+% ... but they get defined via ``\envdef\foo{...}'':
+\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
+\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
+
+% Check whether we're in the right environment:
+\def\checkenv#1{%
+ \def\temp{#1}%
+ \ifx\thisenv\temp
+ \else
+ \badenverr
+ \fi
+}
+
+% Evironment mismatch, #1 expected:
+\def\badenverr{%
+ \errhelp = \EMsimple
+ \errmessage{This command can appear only \inenvironment\temp,
+ not \inenvironment\thisenv}%
+}
+\def\inenvironment#1{%
+ \ifx#1\empty
+ out of any environment%
+ \else
+ in environment \expandafter\string#1%
+ \fi
+}
+
+% @end foo executes the definition of \Efoo.
+% But first, it executes a specialized version of \checkenv
+%
+\parseargdef\end{%
+ \if 1\csname iscond.#1\endcsname
+ \else
+ % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03
+ \expandafter\checkenv\csname#1\endcsname
+ \csname E#1\endcsname
+ \endgroup
+ \fi
+}
+
+\newhelp\EMsimple{Press RETURN to continue.}
+
+
+%% Simple single-character @ commands
+
+% @@ prints an @
+% Kludge this until the fonts are right (grr).
+\def\@{{\tt\char64}}
+
+% This is turned off because it was never documented
+% and you can use @w{...} around a quote to suppress ligatures.
+%% Define @` and @' to be the same as ` and '
+%% but suppressing ligatures.
+%\def\`{{`}}
+%\def\'{{'}}
+
+% Used to generate quoted braces.
+\def\mylbrace {{\tt\char123}}
+\def\myrbrace {{\tt\char125}}
+\let\{=\mylbrace
+\let\}=\myrbrace
+\begingroup
+ % Definitions to produce \{ and \} commands for indices,
+ % and @{ and @} for the aux file.
+ \catcode`\{ = \other \catcode`\} = \other
+ \catcode`\[ = 1 \catcode`\] = 2
+ \catcode`\! = 0 \catcode`\\ = \other
+ !gdef!lbracecmd[\{]%
+ !gdef!rbracecmd[\}]%
+ !gdef!lbraceatcmd[@{]%
+ !gdef!rbraceatcmd[@}]%
+!endgroup
+
+% @comma{} to avoid , parsing problems.
+\let\comma = ,
+
+% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
+% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
+\let\, = \c
+\let\dotaccent = \.
+\def\ringaccent#1{{\accent23 #1}}
+\let\tieaccent = \t
+\let\ubaraccent = \b
+\let\udotaccent = \d
+
+% Other special characters: @questiondown @exclamdown @ordf @ordm
+% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
+\def\questiondown{?`}
+\def\exclamdown{!`}
+\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
+\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
+
+% Dotless i and dotless j, used for accents.
+\def\imacro{i}
+\def\jmacro{j}
+\def\dotless#1{%
+ \def\temp{#1}%
+ \ifx\temp\imacro \ptexi
+ \else\ifx\temp\jmacro \j
+ \else \errmessage{@dotless can be used only with i or j}%
+ \fi\fi
+}
+
+% The \TeX{} logo, as in plain, but resetting the spacing so that a
+% period following counts as ending a sentence. (Idea found in latex.)
+%
+\edef\TeX{\TeX \spacefactor=1000 }
+
+% @LaTeX{} logo. Not quite the same results as the definition in
+% latex.ltx, since we use a different font for the raised A; it's most
+% convenient for us to use an explicitly smaller font, rather than using
+% the \scriptstyle font (since we don't reset \scriptstyle and
+% \scriptscriptstyle).
+%
+\def\LaTeX{%
+ L\kern-.36em
+ {\setbox0=\hbox{T}%
+ \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}%
+ \kern-.15em
+ \TeX
+}
+
+% Be sure we're in horizontal mode when doing a tie, since we make space
+% equivalent to this in @example-like environments. Otherwise, a space
+% at the beginning of a line will start with \penalty -- and
+% since \penalty is valid in vertical mode, we'd end up putting the
+% penalty on the vertical list instead of in the new paragraph.
+{\catcode`@ = 11
+ % Avoid using \@M directly, because that causes trouble
+ % if the definition is written into an index file.
+ \global\let\tiepenalty = \@M
+ \gdef\tie{\leavevmode\penalty\tiepenalty\ }
+}
+
+% @: forces normal size whitespace following.
+\def\:{\spacefactor=1000 }
+
+% @* forces a line break.
+\def\*{\hfil\break\hbox{}\ignorespaces}
+
+% @/ allows a line break.
+\let\/=\allowbreak
+
+% @. is an end-of-sentence period.
+\def\.{.\spacefactor=3000 }
+
+% @! is an end-of-sentence bang.
+\def\!{!\spacefactor=3000 }
+
+% @? is an end-of-sentence query.
+\def\?{?\spacefactor=3000 }
+
+% @w prevents a word break. Without the \leavevmode, @w at the
+% beginning of a paragraph, when TeX is still in vertical mode, would
+% produce a whole line of output instead of starting the paragraph.
+\def\w#1{\leavevmode\hbox{#1}}
+
+% @group ... @end group forces ... to be all on one page, by enclosing
+% it in a TeX vbox. We use \vtop instead of \vbox to construct the box
+% to keep its height that of a normal line. According to the rules for
+% \topskip (p.114 of the TeXbook), the glue inserted is
+% max (\topskip - \ht (first item), 0). If that height is large,
+% therefore, no glue is inserted, and the space between the headline and
+% the text is small, which looks bad.
+%
+% Another complication is that the group might be very large. This can
+% cause the glue on the previous page to be unduly stretched, because it
+% does not have much material. In this case, it's better to add an
+% explicit \vfill so that the extra space is at the bottom. The
+% threshold for doing this is if the group is more than \vfilllimit
+% percent of a page (\vfilllimit can be changed inside of @tex).
+%
+\newbox\groupbox
+\def\vfilllimit{0.7}
+%
+\envdef\group{%
+ \ifnum\catcode`\^^M=\active \else
+ \errhelp = \groupinvalidhelp
+ \errmessage{@group invalid in context where filling is enabled}%
+ \fi
+ \startsavinginserts
+ %
+ \setbox\groupbox = \vtop\bgroup
+ % Do @comment since we are called inside an environment such as
+ % @example, where each end-of-line in the input causes an
+ % end-of-line in the output. We don't want the end-of-line after
+ % the `@group' to put extra space in the output. Since @group
+ % should appear on a line by itself (according to the Texinfo
+ % manual), we don't worry about eating any user text.
+ \comment
+}
+%
+% The \vtop produces a box with normal height and large depth; thus, TeX puts
+% \baselineskip glue before it, and (when the next line of text is done)
+% \lineskip glue after it. Thus, space below is not quite equal to space
+% above. But it's pretty close.
+\def\Egroup{%
+ % To get correct interline space between the last line of the group
+ % and the first line afterwards, we have to propagate \prevdepth.
+ \endgraf % Not \par, as it may have been set to \lisppar.
+ \global\dimen1 = \prevdepth
+ \egroup % End the \vtop.
+ % \dimen0 is the vertical size of the group's box.
+ \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox
+ % \dimen2 is how much space is left on the page (more or less).
+ \dimen2 = \pageheight \advance\dimen2 by -\pagetotal
+ % if the group doesn't fit on the current page, and it's a big big
+ % group, force a page break.
+ \ifdim \dimen0 > \dimen2
+ \ifdim \pagetotal < \vfilllimit\pageheight
+ \page
+ \fi
+ \fi
+ \box\groupbox
+ \prevdepth = \dimen1
+ \checkinserts
+}
+%
+% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
+% message, so this ends up printing `@group can only ...'.
+%
+\newhelp\groupinvalidhelp{%
+group can only be used in environments such as @example,^^J%
+where each line of input produces a line of output.}
+
+% @need space-in-mils
+% forces a page break if there is not space-in-mils remaining.
+
+\newdimen\mil \mil=0.001in
+
+% Old definition--didn't work.
+%\parseargdef\need{\par %
+%% This method tries to make TeX break the page naturally
+%% if the depth of the box does not fit.
+%{\baselineskip=0pt%
+%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak
+%\prevdepth=-1000pt
+%}}
+
+\parseargdef\need{%
+ % Ensure vertical mode, so we don't make a big box in the middle of a
+ % paragraph.
+ \par
+ %
+ % If the @need value is less than one line space, it's useless.
+ \dimen0 = #1\mil
+ \dimen2 = \ht\strutbox
+ \advance\dimen2 by \dp\strutbox
+ \ifdim\dimen0 > \dimen2
+ %
+ % Do a \strut just to make the height of this box be normal, so the
+ % normal leading is inserted relative to the preceding line.
+ % And a page break here is fine.
+ \vtop to #1\mil{\strut\vfil}%
+ %
+ % TeX does not even consider page breaks if a penalty added to the
+ % main vertical list is 10000 or more. But in order to see if the
+ % empty box we just added fits on the page, we must make it consider
+ % page breaks. On the other hand, we don't want to actually break the
+ % page after the empty box. So we use a penalty of 9999.
+ %
+ % There is an extremely small chance that TeX will actually break the
+ % page at this \penalty, if there are no other feasible breakpoints in
+ % sight. (If the user is using lots of big @group commands, which
+ % almost-but-not-quite fill up a page, TeX will have a hard time doing
+ % good page breaking, for example.) However, I could not construct an
+ % example where a page broke at this \penalty; if it happens in a real
+ % document, then we can reconsider our strategy.
+ \penalty9999
+ %
+ % Back up by the size of the box, whether we did a page break or not.
+ \kern -#1\mil
+ %
+ % Do not allow a page break right after this kern.
+ \nobreak
+ \fi
+}
+
+% @br forces paragraph break (and is undocumented).
+
+\let\br = \par
+
+% @page forces the start of a new page.
+%
+\def\page{\par\vfill\supereject}
+
+% @exdent text....
+% outputs text on separate line in roman font, starting at standard page margin
+
+% This records the amount of indent in the innermost environment.
+% That's how much \exdent should take out.
+\newskip\exdentamount
+
+% This defn is used inside fill environments such as @defun.
+\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
+
+% This defn is used inside nofill environments such as @example.
+\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
+ \leftline{\hskip\leftskip{\rm#1}}}}
+
+% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
+% paragraph. For more general purposes, use the \margin insertion
+% class. WHICH is `l' or `r'.
+%
+\newskip\inmarginspacing \inmarginspacing=1cm
+\def\strutdepth{\dp\strutbox}
+%
+\def\doinmargin#1#2{\strut\vadjust{%
+ \nobreak
+ \kern-\strutdepth
+ \vtop to \strutdepth{%
+ \baselineskip=\strutdepth
+ \vss
+ % if you have multiple lines of stuff to put here, you'll need to
+ % make the vbox yourself of the appropriate size.
+ \ifx#1l%
+ \llap{\ignorespaces #2\hskip\inmarginspacing}%
+ \else
+ \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
+ \fi
+ \null
+ }%
+}}
+\def\inleftmargin{\doinmargin l}
+\def\inrightmargin{\doinmargin r}
+%
+% @inmargin{TEXT [, RIGHT-TEXT]}
+% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
+% else use TEXT for both).
+%
+\def\inmargin#1{\parseinmargin #1,,\finish}
+\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \def\lefttext{#1}% have both texts
+ \def\righttext{#2}%
+ \else
+ \def\lefttext{#1}% have only one text
+ \def\righttext{#1}%
+ \fi
+ %
+ \ifodd\pageno
+ \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
+ \else
+ \def\temp{\inleftmargin\lefttext}%
+ \fi
+ \temp
+}
+
+% @include file insert text of that file as input.
+%
+\def\include{\parseargusing\filenamecatcodes\includezzz}
+\def\includezzz#1{%
+ \pushthisfilestack
+ \def\thisfile{#1}%
+ {%
+ \makevalueexpandable
+ \def\temp{\input #1 }%
+ \expandafter
+ }\temp
+ \popthisfilestack
+}
+\def\filenamecatcodes{%
+ \catcode`\\=\other
+ \catcode`~=\other
+ \catcode`^=\other
+ \catcode`_=\other
+ \catcode`|=\other
+ \catcode`<=\other
+ \catcode`>=\other
+ \catcode`+=\other
+ \catcode`-=\other
+}
+
+\def\pushthisfilestack{%
+ \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
+}
+\def\pushthisfilestackX{%
+ \expandafter\pushthisfilestackY\thisfile\StackTerm
+}
+\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
+ \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
+}
+
+\def\popthisfilestack{\errthisfilestackempty}
+\def\errthisfilestackempty{\errmessage{Internal error:
+ the stack of filenames is empty.}}
+
+\def\thisfile{}
+
+% @center line
+% outputs that line, centered.
+%
+\parseargdef\center{%
+ \ifhmode
+ \let\next\centerH
+ \else
+ \let\next\centerV
+ \fi
+ \next{\hfil \ignorespaces#1\unskip \hfil}%
+}
+\def\centerH#1{%
+ {%
+ \hfil\break
+ \advance\hsize by -\leftskip
+ \advance\hsize by -\rightskip
+ \line{#1}%
+ \break
+ }%
+}
+\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
+
+% @sp n outputs n lines of vertical space
+
+\parseargdef\sp{\vskip #1\baselineskip}
+
+% @comment ...line which is ignored...
+% @c is the same as @comment
+% @ignore ... @end ignore is another way to write a comment
+
+\def\comment{\begingroup \catcode`\^^M=\other%
+\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+\commentxxx}
+{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+
+\let\c=\comment
+
+% @paragraphindent NCHARS
+% We'll use ems for NCHARS, close enough.
+% NCHARS can also be the word `asis' or `none'.
+% We cannot feasibly implement @paragraphindent asis, though.
+%
+\def\asisword{asis} % no translation, these are keywords
+\def\noneword{none}
+%
+\parseargdef\paragraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \defaultparindent = 0pt
+ \else
+ \defaultparindent = #1em
+ \fi
+ \fi
+ \parindent = \defaultparindent
+}
+
+% @exampleindent NCHARS
+% We'll use ems for NCHARS like @paragraphindent.
+% It seems @exampleindent asis isn't necessary, but
+% I preserve it to make it similar to @paragraphindent.
+\parseargdef\exampleindent{%
+ \def\temp{#1}%
+ \ifx\temp\asisword
+ \else
+ \ifx\temp\noneword
+ \lispnarrowing = 0pt
+ \else
+ \lispnarrowing = #1em
+ \fi
+ \fi
+}
+
+% @firstparagraphindent WORD
+% If WORD is `none', then suppress indentation of the first paragraph
+% after a section heading. If WORD is `insert', then do indent at such
+% paragraphs.
+%
+% The paragraph indentation is suppressed or not by calling
+% \suppressfirstparagraphindent, which the sectioning commands do.
+% We switch the definition of this back and forth according to WORD.
+% By default, we suppress indentation.
+%
+\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
+\def\insertword{insert}
+%
+\parseargdef\firstparagraphindent{%
+ \def\temp{#1}%
+ \ifx\temp\noneword
+ \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
+ \else\ifx\temp\insertword
+ \let\suppressfirstparagraphindent = \relax
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @firstparagraphindent option `\temp'}%
+ \fi\fi
+}
+
+% Here is how we actually suppress indentation. Redefine \everypar to
+% \kern backwards by \parindent, and then reset itself to empty.
+%
+% We also make \indent itself not actually do anything until the next
+% paragraph.
+%
+\gdef\dosuppressfirstparagraphindent{%
+ \gdef\indent{%
+ \restorefirstparagraphindent
+ \indent
+ }%
+ \gdef\noindent{%
+ \restorefirstparagraphindent
+ \noindent
+ }%
+ \global\everypar = {%
+ \kern -\parindent
+ \restorefirstparagraphindent
+ }%
+}
+
+\gdef\restorefirstparagraphindent{%
+ \global \let \indent = \ptexindent
+ \global \let \noindent = \ptexnoindent
+ \global \everypar = {}%
+}
+
+
+% @asis just yields its argument. Used with @table, for example.
+%
+\def\asis#1{#1}
+
+% @math outputs its argument in math mode.
+%
+% One complication: _ usually means subscripts, but it could also mean
+% an actual _ character, as in @math{@var{some_variable} + 1}. So make
+% _ active, and distinguish by seeing if the current family is \slfam,
+% which is what @var uses.
+{
+ \catcode\underChar = \active
+ \gdef\mathunderscore{%
+ \catcode\underChar=\active
+ \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
+ }
+}
+% Another complication: we want \\ (and @\) to output a \ character.
+% FYI, plain.tex uses \\ as a temporary control sequence (why?), but
+% this is not advertised and we don't care. Texinfo does not
+% otherwise define @\.
+%
+% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
+\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
+%
+\def\math{%
+ \tex
+ \mathunderscore
+ \let\\ = \mathbackslash
+ \mathactive
+ $\finishmath
+}
+\def\finishmath#1{#1$\endgroup} % Close the group opened by \tex.
+
+% Some active characters (such as <) are spaced differently in math.
+% We have to reset their definitions in case the @math was an argument
+% to a command which sets the catcodes (such as @item or @section).
+%
+{
+ \catcode`^ = \active
+ \catcode`< = \active
+ \catcode`> = \active
+ \catcode`+ = \active
+ \gdef\mathactive{%
+ \let^ = \ptexhat
+ \let< = \ptexless
+ \let> = \ptexgtr
+ \let+ = \ptexplus
+ }
+}
+
+% @bullet and @minus need the same treatment as @math, just above.
+\def\bullet{$\ptexbullet$}
+\def\minus{$-$}
+
+% @dots{} outputs an ellipsis using the current font.
+% We do .5em per period so that it has the same spacing in a typewriter
+% font as three actual period characters.
+%
+\def\dots{%
+ \leavevmode
+ \hbox to 1.5em{%
+ \hskip 0pt plus 0.25fil
+ .\hfil.\hfil.%
+ \hskip 0pt plus 0.5fil
+ }%
+}
+
+% @enddots{} is an end-of-sentence ellipsis.
+%
+\def\enddots{%
+ \dots
+ \spacefactor=3000
+}
+
+% @comma{} is so commas can be inserted into text without messing up
+% Texinfo's parsing.
+%
+\let\comma = ,
+
+% @refill is a no-op.
+\let\refill=\relax
+
+% If working on a large document in chapters, it is convenient to
+% be able to disable indexing, cross-referencing, and contents, for test runs.
+% This is done with @novalidate (before @setfilename).
+%
+\newif\iflinks \linkstrue % by default we want the aux files.
+\let\novalidate = \linksfalse
+
+% @setfilename is done at the beginning of every texinfo file.
+% So open here the files we need to have open while reading the input.
+% This makes it possible to make a .fmt file for texinfo.
+\def\setfilename{%
+ \fixbackslash % Turn off hack to swallow `\input texinfo'.
+ \iflinks
+ \tryauxfile
+ % Open the new aux file. TeX will close it automatically at exit.
+ \immediate\openout\auxfile=\jobname.aux
+ \fi % \openindices needs to do some work in any case.
+ \openindices
+ \let\setfilename=\comment % Ignore extra @setfilename cmds.
+ %
+ % If texinfo.cnf is present on the system, read it.
+ % Useful for site-wide @afourpaper, etc.
+ \openin 1 texinfo.cnf
+ \ifeof 1 \else \input texinfo.cnf \fi
+ \closein 1
+ %
+ \comment % Ignore the actual filename.
+}
+
+% Called from \setfilename.
+%
+\def\openindices{%
+ \newindex{cp}%
+ \newcodeindex{fn}%
+ \newcodeindex{vr}%
+ \newcodeindex{tp}%
+ \newcodeindex{ky}%
+ \newcodeindex{pg}%
+}
+
+% @bye.
+\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
+
+
+\message{pdf,}
+% adobe `portable' document format
+\newcount\tempnum
+\newcount\lnkcount
+\newtoks\filename
+\newcount\filenamelength
+\newcount\pgn
+\newtoks\toksA
+\newtoks\toksB
+\newtoks\toksC
+\newtoks\toksD
+\newbox\boxA
+\newcount\countA
+\newif\ifpdf
+\newif\ifpdfmakepagedest
+
+% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
+% can be set). So we test for \relax and 0 as well as \undefined,
+% borrowed from ifpdf.sty.
+\ifx\pdfoutput\undefined
+\else
+ \ifx\pdfoutput\relax
+ \else
+ \ifcase\pdfoutput
+ \else
+ \pdftrue
+ \fi
+ \fi
+\fi
+%
+\ifpdf
+ \input pdfcolor
+ \pdfcatalog{/PageMode /UseOutlines}%
+ \def\dopdfimage#1#2#3{%
+ \def\imagewidth{#2}%
+ \def\imageheight{#3}%
+ % without \immediate, pdftex seg faults when the same image is
+ % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.)
+ \ifnum\pdftexversion < 14
+ \immediate\pdfimage
+ \else
+ \immediate\pdfximage
+ \fi
+ \ifx\empty\imagewidth\else width \imagewidth \fi
+ \ifx\empty\imageheight\else height \imageheight \fi
+ \ifnum\pdftexversion<13
+ #1.pdf%
+ \else
+ {#1.pdf}%
+ \fi
+ \ifnum\pdftexversion < 14 \else
+ \pdfrefximage \pdflastximage
+ \fi}
+ \def\pdfmkdest#1{{%
+ % We have to set dummies so commands such as @code in a section title
+ % aren't expanded.
+ \atdummies
+ \normalturnoffactive
+ \pdfdest name{#1} xyz%
+ }}
+ \def\pdfmkpgn#1{#1}
+ \let\linkcolor = \Blue % was Cyan, but that seems light?
+ \def\endlink{\Black\pdfendlink}
+ % Adding outlines to PDF; macros for calculating structure of outlines
+ % come from Petr Olsak
+ \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
+ \else \csname#1\endcsname \fi}
+ \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
+ \advance\tempnum by 1
+ \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
+ %
+ % #1 is the section text. #2 is the pdf expression for the number
+ % of subentries (or empty, for subsubsections). #3 is the node
+ % text, which might be empty if this toc entry had no
+ % corresponding node. #4 is the page number.
+ %
+ \def\dopdfoutline#1#2#3#4{%
+ % Generate a link to the node text if that exists; else, use the
+ % page number. We could generate a destination for the section
+ % text in the case where a section has no node, but it doesn't
+ % seem worthwhile, since most documents are normally structured.
+ \def\pdfoutlinedest{#3}%
+ \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}\fi
+ %
+ \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{#1}%
+ }
+ %
+ \def\pdfmakeoutlines{%
+ \begingroup
+ % Thanh's hack / proper braces in bookmarks
+ \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace
+ \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace
+ %
+ % Read toc silently, to get counts of subentries for \pdfoutline.
+ \def\numchapentry##1##2##3##4{%
+ \def\thischapnum{##2}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsecentry##1##2##3##4{%
+ \advancenumber{chap\thischapnum}%
+ \def\thissecnum{##2}%
+ \def\thissubsecnum{0}%
+ }%
+ \def\numsubsecentry##1##2##3##4{%
+ \advancenumber{sec\thissecnum}%
+ \def\thissubsecnum{##2}%
+ }%
+ \def\numsubsubsecentry##1##2##3##4{%
+ \advancenumber{subsec\thissubsecnum}%
+ }%
+ \def\thischapnum{0}%
+ \def\thissecnum{0}%
+ \def\thissubsecnum{0}%
+ %
+ % use \def rather than \let here because we redefine \chapentry et
+ % al. a second time, below.
+ \def\appentry{\numchapentry}%
+ \def\appsecentry{\numsecentry}%
+ \def\appsubsecentry{\numsubsecentry}%
+ \def\appsubsubsecentry{\numsubsubsecentry}%
+ \def\unnchapentry{\numchapentry}%
+ \def\unnsecentry{\numsecentry}%
+ \def\unnsubsecentry{\numsubsecentry}%
+ \def\unnsubsubsecentry{\numsubsubsecentry}%
+ \input \jobname.toc
+ %
+ % Read toc second time, this time actually producing the outlines.
+ % The `-' means take the \expnumber as the absolute number of
+ % subentries, which we calculated on our first read of the .toc above.
+ %
+ % We use the node names as the destinations.
+ \def\numchapentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
+ \def\numsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
+ \def\numsubsecentry##1##2##3##4{%
+ \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
+ \def\numsubsubsecentry##1##2##3##4{% count is always zero
+ \dopdfoutline{##1}{}{##3}{##4}}%
+ %
+ % PDF outlines are displayed using system fonts, instead of
+ % document fonts. Therefore we cannot use special characters,
+ % since the encoding is unknown. For example, the eogonek from
+ % Latin 2 (0xea) gets translated to a | character. Info from
+ % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
+ %
+ % xx to do this right, we have to translate 8-bit characters to
+ % their "best" equivalent, based on the @documentencoding. Right
+ % now, I guess we'll just let the pdf reader have its way.
+ \indexnofonts
+ \turnoffactive
+ \input \jobname.toc
+ \endgroup
+ }
+ %
+ \def\makelinks #1,{%
+ \def\params{#1}\def\E{END}%
+ \ifx\params\E
+ \let\nextmakelinks=\relax
+ \else
+ \let\nextmakelinks=\makelinks
+ \ifnum\lnkcount>0,\fi
+ \picknum{#1}%
+ \startlink attr{/Border [0 0 0]}
+ goto name{\pdfmkpgn{\the\pgn}}%
+ \linkcolor #1%
+ \advance\lnkcount by 1%
+ \endlink
+ \fi
+ \nextmakelinks
+ }
+ \def\picknum#1{\expandafter\pn#1}
+ \def\pn#1{%
+ \def\p{#1}%
+ \ifx\p\lbrace
+ \let\nextpn=\ppn
+ \else
+ \let\nextpn=\ppnn
+ \def\first{#1}
+ \fi
+ \nextpn
+ }
+ \def\ppn#1{\pgn=#1\gobble}
+ \def\ppnn{\pgn=\first}
+ \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,}
+ \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+ \ifx\PP\D\let\nextsp\relax
+ \else\let\nextsp\skipspaces
+ \ifx\p\space\else\addtokens{\filename}{\PP}%
+ \advance\filenamelength by 1
+ \fi
+ \fi
+ \nextsp}
+ \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
+ \ifnum\pdftexversion < 14
+ \let \startlink \pdfannotlink
+ \else
+ \let \startlink \pdfstartlink
+ \fi
+ \def\pdfurl#1{%
+ \begingroup
+ \normalturnoffactive\def\@{@}%
+ \makevalueexpandable
+ \leavevmode\Red
+ \startlink attr{/Border [0 0 0]}%
+ user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
+ \endgroup}
+ \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
+ \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
+ \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
+ \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
+ \def\maketoks{%
+ \expandafter\poptoks\the\toksA|ENDTOKS|\relax
+ \ifx\first0\adn0
+ \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
+ \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
+ \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
+ \else
+ \ifnum0=\countA\else\makelink\fi
+ \ifx\first.\let\next=\done\else
+ \let\next=\maketoks
+ \addtokens{\toksB}{\the\toksD}
+ \ifx\first,\addtokens{\toksB}{\space}\fi
+ \fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \next}
+ \def\makelink{\addtokens{\toksB}%
+ {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
+ \def\pdflink#1{%
+ \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
+ \linkcolor #1\endlink}
+ \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
+\else
+ \let\pdfmkdest = \gobble
+ \let\pdfurl = \gobble
+ \let\endlink = \relax
+ \let\linkcolor = \relax
+ \let\pdfmakeoutlines = \relax
+\fi % \ifx\pdfoutput
+
+
+\message{fonts,}
+
+% Change the current font style to #1, remembering it in \curfontstyle.
+% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
+% italics, not bold italics.
+%
+\def\setfontstyle#1{%
+ \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
+ \csname ten#1\endcsname % change the current font
+}
+
+% Select #1 fonts with the current style.
+%
+\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
+
+\def\rm{\fam=0 \setfontstyle{rm}}
+\def\it{\fam=\itfam \setfontstyle{it}}
+\def\sl{\fam=\slfam \setfontstyle{sl}}
+\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
+\def\tt{\fam=\ttfam \setfontstyle{tt}}
+
+% Texinfo sort of supports the sans serif font style, which plain TeX does not.
+% So we set up a \sf.
+\newfam\sffam
+\def\sf{\fam=\sffam \setfontstyle{sf}}
+\let\li = \sf % Sometimes we call it \li, not \sf.
+
+% We don't need math for this font style.
+\def\ttsl{\setfontstyle{ttsl}}
+
+% Default leading.
+\newdimen\textleading \textleading = 13.2pt
+
+% Set the baselineskip to #1, and the lineskip and strut size
+% correspondingly. There is no deep meaning behind these magic numbers
+% used as factors; they just match (closely enough) what Knuth defined.
+%
+\def\lineskipfactor{.08333}
+\def\strutheightpercent{.70833}
+\def\strutdepthpercent {.29167}
+%
+\def\setleading#1{%
+ \normalbaselineskip = #1\relax
+ \normallineskip = \lineskipfactor\normalbaselineskip
+ \normalbaselines
+ \setbox\strutbox =\hbox{%
+ \vrule width0pt height\strutheightpercent\baselineskip
+ depth \strutdepthpercent \baselineskip
+ }%
+}
+
+% Set the font macro #1 to the font named #2, adding on the
+% specified font prefix (normally `cm').
+% #3 is the font's design size, #4 is a scale factor
+\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4}
+
+% Use cm as the default font prefix.
+% To specify the font prefix, you must define \fontprefix
+% before you read in texinfo.tex.
+\ifx\fontprefix\undefined
+\def\fontprefix{cm}
+\fi
+% Support font families that don't use the same naming scheme as CM.
+\def\rmshape{r}
+\def\rmbshape{bx} %where the normal face is bold
+\def\bfshape{b}
+\def\bxshape{bx}
+\def\ttshape{tt}
+\def\ttbshape{tt}
+\def\ttslshape{sltt}
+\def\itshape{ti}
+\def\itbshape{bxti}
+\def\slshape{sl}
+\def\slbshape{bxsl}
+\def\sfshape{ss}
+\def\sfbshape{ss}
+\def\scshape{csc}
+\def\scbshape{csc}
+
+% Text fonts (11.2pt, magstep1).
+\def\textnominalsize{11pt}
+\edef\mainmagstep{\magstephalf}
+\setfont\textrm\rmshape{10}{\mainmagstep}
+\setfont\texttt\ttshape{10}{\mainmagstep}
+\setfont\textbf\bfshape{10}{\mainmagstep}
+\setfont\textit\itshape{10}{\mainmagstep}
+\setfont\textsl\slshape{10}{\mainmagstep}
+\setfont\textsf\sfshape{10}{\mainmagstep}
+\setfont\textsc\scshape{10}{\mainmagstep}
+\setfont\textttsl\ttslshape{10}{\mainmagstep}
+\font\texti=cmmi10 scaled \mainmagstep
+\font\textsy=cmsy10 scaled \mainmagstep
+
+% A few fonts for @defun names and args.
+\setfont\defbf\bfshape{10}{\magstep1}
+\setfont\deftt\ttshape{10}{\magstep1}
+\setfont\defttsl\ttslshape{10}{\magstep1}
+\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
+
+% Fonts for indices, footnotes, small examples (9pt).
+\def\smallnominalsize{9pt}
+\setfont\smallrm\rmshape{9}{1000}
+\setfont\smalltt\ttshape{9}{1000}
+\setfont\smallbf\bfshape{10}{900}
+\setfont\smallit\itshape{9}{1000}
+\setfont\smallsl\slshape{9}{1000}
+\setfont\smallsf\sfshape{9}{1000}
+\setfont\smallsc\scshape{10}{900}
+\setfont\smallttsl\ttslshape{10}{900}
+\font\smalli=cmmi9
+\font\smallsy=cmsy9
+
+% Fonts for small examples (8pt).
+\def\smallernominalsize{8pt}
+\setfont\smallerrm\rmshape{8}{1000}
+\setfont\smallertt\ttshape{8}{1000}
+\setfont\smallerbf\bfshape{10}{800}
+\setfont\smallerit\itshape{8}{1000}
+\setfont\smallersl\slshape{8}{1000}
+\setfont\smallersf\sfshape{8}{1000}
+\setfont\smallersc\scshape{10}{800}
+\setfont\smallerttsl\ttslshape{10}{800}
+\font\smalleri=cmmi8
+\font\smallersy=cmsy8
+
+% Fonts for title page (20.4pt):
+\def\titlenominalsize{20pt}
+\setfont\titlerm\rmbshape{12}{\magstep3}
+\setfont\titleit\itbshape{10}{\magstep4}
+\setfont\titlesl\slbshape{10}{\magstep4}
+\setfont\titlett\ttbshape{12}{\magstep3}
+\setfont\titlettsl\ttslshape{10}{\magstep4}
+\setfont\titlesf\sfbshape{17}{\magstep1}
+\let\titlebf=\titlerm
+\setfont\titlesc\scbshape{10}{\magstep4}
+\font\titlei=cmmi12 scaled \magstep3
+\font\titlesy=cmsy10 scaled \magstep4
+\def\authorrm{\secrm}
+\def\authortt{\sectt}
+
+% Chapter (and unnumbered) fonts (17.28pt).
+\def\chapnominalsize{17pt}
+\setfont\chaprm\rmbshape{12}{\magstep2}
+\setfont\chapit\itbshape{10}{\magstep3}
+\setfont\chapsl\slbshape{10}{\magstep3}
+\setfont\chaptt\ttbshape{12}{\magstep2}
+\setfont\chapttsl\ttslshape{10}{\magstep3}
+\setfont\chapsf\sfbshape{17}{1000}
+\let\chapbf=\chaprm
+\setfont\chapsc\scbshape{10}{\magstep3}
+\font\chapi=cmmi12 scaled \magstep2
+\font\chapsy=cmsy10 scaled \magstep3
+
+% Section fonts (14.4pt).
+\def\secnominalsize{14pt}
+\setfont\secrm\rmbshape{12}{\magstep1}
+\setfont\secit\itbshape{10}{\magstep2}
+\setfont\secsl\slbshape{10}{\magstep2}
+\setfont\sectt\ttbshape{12}{\magstep1}
+\setfont\secttsl\ttslshape{10}{\magstep2}
+\setfont\secsf\sfbshape{12}{\magstep1}
+\let\secbf\secrm
+\setfont\secsc\scbshape{10}{\magstep2}
+\font\seci=cmmi12 scaled \magstep1
+\font\secsy=cmsy10 scaled \magstep2
+
+% Subsection fonts (13.15pt).
+\def\ssecnominalsize{13pt}
+\setfont\ssecrm\rmbshape{12}{\magstephalf}
+\setfont\ssecit\itbshape{10}{1315}
+\setfont\ssecsl\slbshape{10}{1315}
+\setfont\ssectt\ttbshape{12}{\magstephalf}
+\setfont\ssecttsl\ttslshape{10}{1315}
+\setfont\ssecsf\sfbshape{12}{\magstephalf}
+\let\ssecbf\ssecrm
+\setfont\ssecsc\scbshape{10}{1315}
+\font\sseci=cmmi12 scaled \magstephalf
+\font\ssecsy=cmsy10 scaled 1315
+
+% Reduced fonts for @acro in text (10pt).
+\def\reducednominalsize{10pt}
+\setfont\reducedrm\rmshape{10}{1000}
+\setfont\reducedtt\ttshape{10}{1000}
+\setfont\reducedbf\bfshape{10}{1000}
+\setfont\reducedit\itshape{10}{1000}
+\setfont\reducedsl\slshape{10}{1000}
+\setfont\reducedsf\sfshape{10}{1000}
+\setfont\reducedsc\scshape{10}{1000}
+\setfont\reducedttsl\ttslshape{10}{1000}
+\font\reducedi=cmmi10
+\font\reducedsy=cmsy10
+
+% In order for the font changes to affect most math symbols and letters,
+% we have to define the \textfont of the standard families. Since
+% texinfo doesn't allow for producing subscripts and superscripts except
+% in the main text, we don't bother to reset \scriptfont and
+% \scriptscriptfont (which would also require loading a lot more fonts).
+%
+\def\resetmathfonts{%
+ \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
+ \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
+ \textfont\ttfam=\tentt \textfont\sffam=\tensf
+}
+
+% The font-changing commands redefine the meanings of \tenSTYLE, instead
+% of just \STYLE. We do this because \STYLE needs to also set the
+% current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire
+% \tenSTYLE to set the current font.
+%
+% Each font-changing command also sets the names \lsize (one size lower)
+% and \lllsize (three sizes lower). These relative commands are used in
+% the LaTeX logo and acronyms.
+%
+% This all needs generalizing, badly.
+%
+\def\textfonts{%
+ \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
+ \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
+ \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
+ \let\tenttsl=\textttsl
+ \def\curfontsize{text}%
+ \def\lsize{reduced}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{\textleading}}
+\def\titlefonts{%
+ \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
+ \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
+ \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
+ \let\tenttsl=\titlettsl
+ \def\curfontsize{title}%
+ \def\lsize{chap}\def\lllsize{subsec}%
+ \resetmathfonts \setleading{25pt}}
+\def\titlefont#1{{\titlefonts\rm #1}}
+\def\chapfonts{%
+ \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
+ \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
+ \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
+ \let\tenttsl=\chapttsl
+ \def\curfontsize{chap}%
+ \def\lsize{sec}\def\lllsize{text}%
+ \resetmathfonts \setleading{19pt}}
+\def\secfonts{%
+ \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
+ \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
+ \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
+ \let\tenttsl=\secttsl
+ \def\curfontsize{sec}%
+ \def\lsize{subsec}\def\lllsize{reduced}%
+ \resetmathfonts \setleading{16pt}}
+\def\subsecfonts{%
+ \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+ \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+ \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
+ \let\tenttsl=\ssecttsl
+ \def\curfontsize{ssec}%
+ \def\lsize{text}\def\lllsize{small}%
+ \resetmathfonts \setleading{15pt}}
+\let\subsubsecfonts = \subsecfonts
+\def\reducedfonts{%
+ \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
+ \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
+ \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
+ \let\tenttsl=\reducedttsl
+ \def\curfontsize{reduced}%
+ \def\lsize{small}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallfonts{%
+ \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
+ \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
+ \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
+ \let\tenttsl=\smallttsl
+ \def\curfontsize{small}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{10.5pt}}
+\def\smallerfonts{%
+ \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
+ \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
+ \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
+ \let\tenttsl=\smallerttsl
+ \def\curfontsize{smaller}%
+ \def\lsize{smaller}\def\lllsize{smaller}%
+ \resetmathfonts \setleading{9.5pt}}
+
+% Set the fonts to use with the @small... environments.
+\let\smallexamplefonts = \smallfonts
+
+% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample
+% can fit this many characters:
+% 8.5x11=86 smallbook=72 a4=90 a5=69
+% If we use \scriptfonts (8pt), then we can fit this many characters:
+% 8.5x11=90+ smallbook=80 a4=90+ a5=77
+% For me, subjectively, the few extra characters that fit aren't worth
+% the additional smallness of 8pt. So I'm making the default 9pt.
+%
+% By the way, for comparison, here's what fits with @example (10pt):
+% 8.5x11=71 smallbook=60 a4=75 a5=58
+%
+% I wish the USA used A4 paper.
+% --karl, 24jan03.
+
+
+% Set up the default fonts, so we can use them for creating boxes.
+%
+\textfonts \rm
+
+% Define these so they can be easily changed for other fonts.
+\def\angleleft{$\langle$}
+\def\angleright{$\rangle$}
+
+% Count depth in font-changes, for error checks
+\newcount\fontdepth \fontdepth=0
+
+% Fonts for short table of contents.
+\setfont\shortcontrm\rmshape{12}{1000}
+\setfont\shortcontbf\bfshape{10}{\magstep1} % no cmb12
+\setfont\shortcontsl\slshape{12}{1000}
+\setfont\shortconttt\ttshape{12}{1000}
+
+%% Add scribe-like font environments, plus @l for inline lisp (usually sans
+%% serif) and @ii for TeX italic
+
+% \smartitalic{ARG} outputs arg in italics, followed by an italic correction
+% unless the following character is such as not to need one.
+\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else
+ \ptexslash\fi\fi\fi}
+\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx}
+\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally uses \ttsl.
+% @var is set to this for defun arguments.
+\def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx}
+
+% like \smartslanted except unconditionally use \sl. We never want
+% ttsl for book titles, do we?
+\def\cite#1{{\sl #1}\futurelet\next\smartitalicx}
+
+\let\i=\smartitalic
+\let\slanted=\smartslanted
+\let\var=\smartslanted
+\let\dfn=\smartslanted
+\let\emph=\smartitalic
+
+% @b, explicit bold.
+\def\b#1{{\bf #1}}
+\let\strong=\b
+
+% @sansserif, explicit sans.
+\def\sansserif#1{{\sf #1}}
+
+% We can't just use \exhyphenpenalty, because that only has effect at
+% the end of a paragraph. Restore normal hyphenation at the end of the
+% group within which \nohyphenation is presumably called.
+%
+\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation}
+\def\restorehyphenation{\hyphenchar\font = `- }
+
+% Set sfcode to normal for the chars that usually have another value.
+% Can't use plain's \frenchspacing because it uses the `\x notation, and
+% sometimes \x has an active definition that messes things up.
+%
+\catcode`@=11
+ \def\frenchspacing{%
+ \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
+ \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
+ }
+\catcode`@=\other
+
+\def\t#1{%
+ {\tt \rawbackslash \frenchspacing #1}%
+ \null
+}
+\def\samp#1{`\tclose{#1}'\null}
+\setfont\keyrm\rmshape{8}{1000}
+\font\keysy=cmsy9
+\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+ \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+ \vbox{\hrule\kern-0.4pt
+ \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+ \kern-0.4pt\hrule}%
+ \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+% The old definition, with no lozenge:
+%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null}
+\def\ctrl #1{{\tt \rawbackslash \hat}#1}
+
+% @file, @option are the same as @samp.
+\let\file=\samp
+\let\option=\samp
+
+% @code is a modification of @t,
+% which makes spaces the same size as normal in the surrounding text.
+\def\tclose#1{%
+ {%
+ % Change normal interword space to be same as for the current font.
+ \spaceskip = \fontdimen2\font
+ %
+ % Switch to typewriter.
+ \tt
+ %
+ % But `\ ' produces the large typewriter interword space.
+ \def\ {{\spaceskip = 0pt{} }}%
+ %
+ % Turn off hyphenation.
+ \nohyphenation
+ %
+ \rawbackslash
+ \frenchspacing
+ #1%
+ }%
+ \null
+}
+
+% We *must* turn on hyphenation at `-' and `_' in @code.
+% Otherwise, it is too hard to avoid overfull hboxes
+% in the Emacs manual, the Library manual, etc.
+
+% Unfortunately, TeX uses one parameter (\hyphenchar) to control
+% both hyphenation at - and hyphenation within words.
+% We must therefore turn them both off (\tclose does that)
+% and arrange explicitly to hyphenate at a dash.
+% -- rms.
+{
+ \catcode`\-=\active
+ \catcode`\_=\active
+ %
+ \global\def\code{\begingroup
+ \catcode`\-=\active \let-\codedash
+ \catcode`\_=\active \let_\codeunder
+ \codex
+ }
+}
+
+\def\realdash{-}
+\def\codedash{-\discretionary{}{}{}}
+\def\codeunder{%
+ % this is all so @math{@code{var_name}+1} can work. In math mode, _
+ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+ % will therefore expand the active definition of _, which is us
+ % (inside @code that is), therefore an endless loop.
+ \ifusingtt{\ifmmode
+ \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
+ \else\normalunderscore \fi
+ \discretionary{}{}{}}%
+ {\_}%
+}
+\def\codex #1{\tclose{#1}\endgroup}
+
+% @kbd is like @code, except that if the argument is just one @key command,
+% then @kbd has no effect.
+
+% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+% `example' (@kbd uses ttsl only inside of @example and friends),
+% or `code' (@kbd uses normal tty font always).
+\parseargdef\kbdinputstyle{%
+ \def\arg{#1}%
+ \ifx\arg\worddistinct
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
+ \else\ifx\arg\wordexample
+ \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
+ \else\ifx\arg\wordcode
+ \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
+ \else
+ \errhelp = \EMsimple
+ \errmessage{Unknown @kbdinputstyle option `\arg'}%
+ \fi\fi\fi
+}
+\def\worddistinct{distinct}
+\def\wordexample{example}
+\def\wordcode{code}
+
+% Default is `distinct.'
+\kbdinputstyle distinct
+
+\def\xkey{\key}
+\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+\ifx\one\xkey\ifx\threex\three \key{#2}%
+\else{\tclose{\kbdfont\look}}\fi
+\else{\tclose{\kbdfont\look}}\fi}
+
+% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+\let\indicateurl=\code
+\let\env=\code
+\let\command=\code
+
+% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+% second argument specifying the text to display and an optional third
+% arg as text to display instead of (rather than in addition to) the url
+% itself. First (mandatory) arg is the url. Perhaps eventually put in
+% a hypertex \special here.
+%
+\def\uref#1{\douref #1,,,\finish}
+\def\douref#1,#2,#3,#4\finish{\begingroup
+ \unsepspaces
+ \pdfurl{#1}%
+ \setbox0 = \hbox{\ignorespaces #3}%
+ \ifdim\wd0 > 0pt
+ \unhbox0 % third arg given, show only that
+ \else
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0 > 0pt
+ \ifpdf
+ \unhbox0 % PDF: 2nd arg given, show only it
+ \else
+ \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+ \fi
+ \else
+ \code{#1}% only url given, so show it
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% @url synonym for @uref, since that's how everyone uses it.
+%
+\let\url=\uref
+
+% rms does not like angle brackets --karl, 17may97.
+% So now @email is just like @uref, unless we are pdf.
+%
+%\def\email#1{\angleleft{\tt #1}\angleright}
+\ifpdf
+ \def\email#1{\doemail#1,,\finish}
+ \def\doemail#1,#2,#3\finish{\begingroup
+ \unsepspaces
+ \pdfurl{mailto:#1}%
+ \setbox0 = \hbox{\ignorespaces #2}%
+ \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
+ \endlink
+ \endgroup}
+\else
+ \let\email=\uref
+\fi
+
+% Check if we are currently using a typewriter font. Since all the
+% Computer Modern typewriter fonts have zero interword stretch (and
+% shrink), and it is reasonable to expect all typewriter fonts to have
+% this property, we can check that font parameter.
+%
+\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
+
+% Typeset a dimension, e.g., `in' or `pt'. The only reason for the
+% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
+%
+\def\dmn#1{\thinspace #1}
+
+\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par}
+
+% @l was never documented to mean ``switch to the Lisp font'',
+% and it is not used as such in any manual I can find. We need it for
+% Polish suppressed-l. --karl, 22sep96.
+%\def\l#1{{\li #1}\null}
+
+% Explicit font changes: @r, @sc, undocumented @ii.
+\def\r#1{{\rm #1}} % roman font
+\def\sc#1{{\smallcaps#1}} % smallcaps font
+\def\ii#1{{\it #1}} % italic font
+
+% @acronym for "FBI", "NATO", and the like.
+% We print this one point size smaller, since it's intended for
+% all-uppercase.
+%
+\def\acronym#1{\doacronym #1,,\finish}
+\def\doacronym#1,#2,#3\finish{%
+ {\selectfonts\lsize #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+}
+
+% @abbr for "Comput. J." and the like.
+% No font change, but don't do end-of-sentence spacing.
+%
+\def\abbr#1{\doabbr #1,,\finish}
+\def\doabbr#1,#2,#3\finish{%
+ {\frenchspacing #1}%
+ \def\temp{#2}%
+ \ifx\temp\empty \else
+ \space ({\unsepspaces \ignorespaces \temp \unskip})%
+ \fi
+}
+
+% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
+%
+\def\pounds{{\it\$}}
+
+% @euro{} comes from a separate font, depending on the current style.
+% We use the free feym* fonts from the eurosym package by Henrik
+% Theiling, which support regular, slanted, bold and bold slanted (and
+% "outlined" (blackboard board, sort of) versions, which we don't need).
+% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
+%
+% Although only regular is the truly official Euro symbol, we ignore
+% that. The Euro is designed to be slightly taller than the regular
+% font height.
+%
+% feymr - regular
+% feymo - slanted
+% feybr - bold
+% feybo - bold slanted
+%
+% There is no good (free) typewriter version, to my knowledge.
+% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
+% Hmm.
+%
+% Also doesn't work in math. Do we need to do math with euro symbols?
+% Hope not.
+%
+%
+\def\euro{{\eurofont e}}
+\def\eurofont{%
+ % We set the font at each command, rather than predefining it in
+ % \textfonts and the other font-switching commands, so that
+ % installations which never need the symbold don't have to have the
+ % font installed.
+ %
+ % There is only one designed size (nominal 10pt), so we always scale
+ % that to the current nominal size.
+ %
+ % By the way, simply using "at 1em" works for cmr10 and the like, but
+ % does not work for cmbx10 and other extended/shrunken fonts.
+ %
+ \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
+ %
+ \ifx\curfontstyle\bfstylename
+ % bold:
+ \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
+ \else
+ % regular:
+ \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
+ \fi
+ \thiseurofont
+}
+
+% @registeredsymbol - R in a circle. The font for the R should really
+% be smaller yet, but lllsize is the best we can do for now.
+% Adapted from the plain.tex definition of \copyright.
+%
+\def\registeredsymbol{%
+ $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
+ \hfil\crcr\Orb}}%
+ }$%
+}
+
+% Laurent Siebenmann reports \Orb undefined with:
+% Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38
+% so we'll define it if necessary.
+%
+\ifx\Orb\undefined
+\def\Orb{\mathhexbox20D}
+\fi
+
+
+\message{page headings,}
+
+\newskip\titlepagetopglue \titlepagetopglue = 1.5in
+\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
+
+% First the title page. Must do @settitle before @titlepage.
+\newif\ifseenauthor
+\newif\iffinishedtitlepage
+
+% Do an implicit @contents or @shortcontents after @end titlepage if the
+% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
+%
+\newif\ifsetcontentsaftertitlepage
+ \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
+\newif\ifsetshortcontentsaftertitlepage
+ \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
+
+\parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}%
+ \endgroup\page\hbox{}\page}
+
+\envdef\titlepage{%
+ % Open one extra group, as we want to close it in the middle of \Etitlepage.
+ \begingroup
+ \parindent=0pt \textfonts
+ % Leave some space at the very top of the page.
+ \vglue\titlepagetopglue
+ % No rule at page bottom unless we print one at the top with @title.
+ \finishedtitlepagetrue
+ %
+ % Most title ``pages'' are actually two pages long, with space
+ % at the top of the second. We don't want the ragged left on the second.
+ \let\oldpage = \page
+ \def\page{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ \let\page = \oldpage
+ \page
+ \null
+ }%
+}
+
+\def\Etitlepage{%
+ \iffinishedtitlepage\else
+ \finishtitlepage
+ \fi
+ % It is important to do the page break before ending the group,
+ % because the headline and footline are only empty inside the group.
+ % If we use the new definition of \page, we always get a blank page
+ % after the title page, which we certainly don't want.
+ \oldpage
+ \endgroup
+ %
+ % Need this before the \...aftertitlepage checks so that if they are
+ % in effect the toc pages will come out with page numbers.
+ \HEADINGSon
+ %
+ % If they want short, they certainly want long too.
+ \ifsetshortcontentsaftertitlepage
+ \shortcontents
+ \contents
+ \global\let\shortcontents = \relax
+ \global\let\contents = \relax
+ \fi
+ %
+ \ifsetcontentsaftertitlepage
+ \contents
+ \global\let\contents = \relax
+ \global\let\shortcontents = \relax
+ \fi
+}
+
+\def\finishtitlepage{%
+ \vskip4pt \hrule height 2pt width \hsize
+ \vskip\titlepagebottomglue
+ \finishedtitlepagetrue
+}
+
+%%% Macros to be used within @titlepage:
+
+\let\subtitlerm=\tenrm
+\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
+
+\def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines
+ \let\tt=\authortt}
+
+\parseargdef\title{%
+ \checkenv\titlepage
+ \leftline{\titlefonts\rm #1}
+ % print a rule at the page bottom also.
+ \finishedtitlepagefalse
+ \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+}
+
+\parseargdef\subtitle{%
+ \checkenv\titlepage
+ {\subtitlefont \rightline{#1}}%
+}
+
+% @author should come last, but may come many times.
+% It can also be used inside @quotation.
+%
+\parseargdef\author{%
+ \def\temp{\quotation}%
+ \ifx\thisenv\temp
+ \def\quotationauthor{#1}% printed in \Equotation.
+ \else
+ \checkenv\titlepage
+ \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
+ {\authorfont \leftline{#1}}%
+ \fi
+}
+
+
+%%% Set up page headings and footings.
+
+\let\thispage=\folio
+
+\newtoks\evenheadline % headline on even pages
+\newtoks\oddheadline % headline on odd pages
+\newtoks\evenfootline % footline on even pages
+\newtoks\oddfootline % footline on odd pages
+
+% Now make TeX use those variables
+\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
+ \else \the\evenheadline \fi}}
+\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
+ \else \the\evenfootline \fi}\HEADINGShook}
+\let\HEADINGShook=\relax
+
+% Commands to set those variables.
+% For example, this is what @headings on does
+% @evenheading @thistitle|@thispage|@thischapter
+% @oddheading @thischapter|@thispage|@thistitle
+% @evenfooting @thisfile||
+% @oddfooting ||@thisfile
+
+
+\def\evenheading{\parsearg\evenheadingxxx}
+\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
+\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddheading{\parsearg\oddheadingxxx}
+\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
+\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
+\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
+
+\def\evenfooting{\parsearg\evenfootingxxx}
+\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
+\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
+\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
+
+\def\oddfooting{\parsearg\oddfootingxxx}
+\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
+\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
+ \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
+ %
+ % Leave some space for the footline. Hopefully ok to assume
+ % @evenfooting will not be used by itself.
+ \global\advance\pageheight by -\baselineskip
+ \global\advance\vsize by -\baselineskip
+}
+
+\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
+
+
+% @headings double turns headings on for double-sided printing.
+% @headings single turns headings on for single-sided printing.
+% @headings off turns them off.
+% @headings on same as @headings double, retained for compatibility.
+% @headings after turns on double-sided headings after this page.
+% @headings doubleafter turns on double-sided headings after this page.
+% @headings singleafter turns on single-sided headings after this page.
+% By default, they are off at the start of a document,
+% and turned `on' after @end titlepage.
+
+\def\headings #1 {\csname HEADINGS#1\endcsname}
+
+\def\HEADINGSoff{%
+\global\evenheadline={\hfil} \global\evenfootline={\hfil}
+\global\oddheadline={\hfil} \global\oddfootline={\hfil}}
+\HEADINGSoff
+% When we turn headings on, set the page number to 1.
+% For double-sided printing, put current file name in lower left corner,
+% chapter name on inside top of right hand pages, document
+% title on inside top of left hand pages, and page numbers on outside top
+% edge of all pages.
+\def\HEADINGSdouble{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+\let\contentsalignmacro = \chappager
+
+% For single-sided printing, chapter title goes across top left of page,
+% page number on top right.
+\def\HEADINGSsingle{%
+\global\pageno=1
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+\def\HEADINGSon{\HEADINGSdouble}
+
+\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
+\let\HEADINGSdoubleafter=\HEADINGSafter
+\def\HEADINGSdoublex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\folio\hfil\thistitle}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chapoddpage
+}
+
+\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
+\def\HEADINGSsinglex{%
+\global\evenfootline={\hfil}
+\global\oddfootline={\hfil}
+\global\evenheadline={\line{\thischapter\hfil\folio}}
+\global\oddheadline={\line{\thischapter\hfil\folio}}
+\global\let\contentsalignmacro = \chappager
+}
+
+% Subroutines used in generating headings
+% This produces Day Month Year style of output.
+% Only define if not already defined, in case a txi-??.tex file has set
+% up a different format (e.g., txi-cs.tex does this).
+\ifx\today\undefined
+\def\today{%
+ \number\day\space
+ \ifcase\month
+ \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
+ \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
+ \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
+ \fi
+ \space\number\year}
+\fi
+
+% @settitle line... specifies the title of the document, for headings.
+% It generates no output of its own.
+\def\thistitle{\putwordNoTitle}
+\def\settitle{\parsearg{\gdef\thistitle}}
+
+
+\message{tables,}
+% Tables -- @table, @ftable, @vtable, @item(x).
+
+% default indentation of table text
+\newdimen\tableindent \tableindent=.8in
+% default indentation of @itemize and @enumerate text
+\newdimen\itemindent \itemindent=.3in
+% margin between end of table item and start of table text.
+\newdimen\itemmargin \itemmargin=.1in
+
+% used internally for \itemindent minus \itemmargin
+\newdimen\itemmax
+
+% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
+% these defs.
+% They also define \itemindex
+% to index the item name in whatever manner is desired (perhaps none).
+
+\newif\ifitemxneedsnegativevskip
+
+\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
+
+\def\internalBitem{\smallbreak \parsearg\itemzzz}
+\def\internalBitemx{\itemxpar \parsearg\itemzzz}
+
+\def\itemzzz #1{\begingroup %
+ \advance\hsize by -\rightskip
+ \advance\hsize by -\tableindent
+ \setbox0=\hbox{\itemindicate{#1}}%
+ \itemindex{#1}%
+ \nobreak % This prevents a break before @itemx.
+ %
+ % If the item text does not fit in the space we have, put it on a line
+ % by itself, and do not allow a page break either before or after that
+ % line. We do not start a paragraph here because then if the next
+ % command is, e.g., @kindex, the whatsit would get put into the
+ % horizontal list on a line by itself, resulting in extra blank space.
+ \ifdim \wd0>\itemmax
+ %
+ % Make this a paragraph so we get the \parskip glue and wrapping,
+ % but leave it ragged-right.
+ \begingroup
+ \advance\leftskip by-\tableindent
+ \advance\hsize by\tableindent
+ \advance\rightskip by0pt plus1fil
+ \leavevmode\unhbox0\par
+ \endgroup
+ %
+ % We're going to be starting a paragraph, but we don't want the
+ % \parskip glue -- logically it's part of the @item we just started.
+ \nobreak \vskip-\parskip
+ %
+ % Stop a page break at the \parskip glue coming up. However, if
+ % what follows is an environment such as @example, there will be no
+ % \parskip glue; then the negative vskip we just inserted would
+ % cause the example and the item to crash together. So we use this
+ % bizarre value of 10001 as a signal to \aboveenvbreak to insert
+ % \parskip glue after all. Section titles are handled this way also.
+ %
+ \penalty 10001
+ \endgroup
+ \itemxneedsnegativevskipfalse
+ \else
+ % The item text fits into the space. Start a paragraph, so that the
+ % following text (if any) will end up on the same line.
+ \noindent
+ % Do this with kerns and \unhbox so that if there is a footnote in
+ % the item text, it can migrate to the main vertical list and
+ % eventually be printed.
+ \nobreak\kern-\tableindent
+ \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
+ \unhbox0
+ \nobreak\kern\dimen0
+ \endgroup
+ \itemxneedsnegativevskiptrue
+ \fi
+}
+
+\def\item{\errmessage{@item while not in a list environment}}
+\def\itemx{\errmessage{@itemx while not in a list environment}}
+
+% @table, @ftable, @vtable.
+\envdef\table{%
+ \let\itemindex\gobble
+ \tablecheck{table}%
+}
+\envdef\ftable{%
+ \def\itemindex ##1{\doind {fn}{\code{##1}}}%
+ \tablecheck{ftable}%
+}
+\envdef\vtable{%
+ \def\itemindex ##1{\doind {vr}{\code{##1}}}%
+ \tablecheck{vtable}%
+}
+\def\tablecheck#1{%
+ \ifnum \the\catcode`\^^M=\active
+ \endgroup
+ \errmessage{This command won't work in this context; perhaps the problem is
+ that we are \inenvironment\thisenv}%
+ \def\next{\doignore{#1}}%
+ \else
+ \let\next\tablex
+ \fi
+ \next
+}
+\def\tablex#1{%
+ \def\itemindicate{#1}%
+ \parsearg\tabley
+}
+\def\tabley#1{%
+ {%
+ \makevalueexpandable
+ \edef\temp{\noexpand\tablez #1\space\space\space}%
+ \expandafter
+ }\temp \endtablez
+}
+\def\tablez #1 #2 #3 #4\endtablez{%
+ \aboveenvbreak
+ \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
+ \ifnum 0#2>0 \tableindent=#2\mil \fi
+ \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
+ \itemmax=\tableindent
+ \advance \itemmax by -\itemmargin
+ \advance \leftskip by \tableindent
+ \exdentamount=\tableindent
+ \parindent = 0pt
+ \parskip = \smallskipamount
+ \ifdim \parskip=0pt \parskip=2pt \fi
+ \let\item = \internalBitem
+ \let\itemx = \internalBitemx
+}
+\def\Etable{\endgraf\afterenvbreak}
+\let\Eftable\Etable
+\let\Evtable\Etable
+\let\Eitemize\Etable
+\let\Eenumerate\Etable
+
+% This is the counter used by @enumerate, which is really @itemize
+
+\newcount \itemno
+
+\envdef\itemize{\parsearg\doitemize}
+
+\def\doitemize#1{%
+ \aboveenvbreak
+ \itemmax=\itemindent
+ \advance\itemmax by -\itemmargin
+ \advance\leftskip by \itemindent
+ \exdentamount=\itemindent
+ \parindent=0pt
+ \parskip=\smallskipamount
+ \ifdim\parskip=0pt \parskip=2pt \fi
+ \def\itemcontents{#1}%
+ % @itemize with no arg is equivalent to @itemize @bullet.
+ \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
+ \let\item=\itemizeitem
+}
+
+% Definition of @item while inside @itemize and @enumerate.
+%
+\def\itemizeitem{%
+ \advance\itemno by 1 % for enumerations
+ {\let\par=\endgraf \smallbreak}% reasonable place to break
+ {%
+ % If the document has an @itemize directly after a section title, a
+ % \nobreak will be last on the list, and \sectionheading will have
+ % done a \vskip-\parskip. In that case, we don't want to zero
+ % parskip, or the item text will crash with the heading. On the
+ % other hand, when there is normal text preceding the item (as there
+ % usually is), we do want to zero parskip, or there would be too much
+ % space. In that case, we won't have a \nobreak before. At least
+ % that's the theory.
+ \ifnum\lastpenalty<10000 \parskip=0in \fi
+ \noindent
+ \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
+ \vadjust{\penalty 1200}}% not good to break after first line of item.
+ \flushcr
+}
+
+% \splitoff TOKENS\endmark defines \first to be the first token in
+% TOKENS, and \rest to be the remainder.
+%
+\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
+
+% Allow an optional argument of an uppercase letter, lowercase letter,
+% or number, to specify the first label in the enumerated list. No
+% argument is the same as `1'.
+%
+\envparseargdef\enumerate{\enumeratey #1 \endenumeratey}
+\def\enumeratey #1 #2\endenumeratey{%
+ % If we were given no argument, pretend we were given `1'.
+ \def\thearg{#1}%
+ \ifx\thearg\empty \def\thearg{1}\fi
+ %
+ % Detect if the argument is a single token. If so, it might be a
+ % letter. Otherwise, the only valid thing it can be is a number.
+ % (We will always have one token, because of the test we just made.
+ % This is a good thing, since \splitoff doesn't work given nothing at
+ % all -- the first parameter is undelimited.)
+ \expandafter\splitoff\thearg\endmark
+ \ifx\rest\empty
+ % Only one token in the argument. It could still be anything.
+ % A ``lowercase letter'' is one whose \lccode is nonzero.
+ % An ``uppercase letter'' is one whose \lccode is both nonzero, and
+ % not equal to itself.
+ % Otherwise, we assume it's a number.
+ %
+ % We need the \relax at the end of the \ifnum lines to stop TeX from
+ % continuing to look for a <number>.
+ %
+ \ifnum\lccode\expandafter`\thearg=0\relax
+ \numericenumerate % a number (we hope)
+ \else
+ % It's a letter.
+ \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
+ \lowercaseenumerate % lowercase letter
+ \else
+ \uppercaseenumerate % uppercase letter
+ \fi
+ \fi
+ \else
+ % Multiple tokens in the argument. We hope it's a number.
+ \numericenumerate
+ \fi
+}
+
+% An @enumerate whose labels are integers. The starting integer is
+% given in \thearg.
+%
+\def\numericenumerate{%
+ \itemno = \thearg
+ \startenumeration{\the\itemno}%
+}
+
+% The starting (lowercase) letter is in \thearg.
+\def\lowercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more lowercase letters in @enumerate; get a bigger
+ alphabet}%
+ \fi
+ \char\lccode\itemno
+ }%
+}
+
+% The starting (uppercase) letter is in \thearg.
+\def\uppercaseenumerate{%
+ \itemno = \expandafter`\thearg
+ \startenumeration{%
+ % Be sure we're not beyond the end of the alphabet.
+ \ifnum\itemno=0
+ \errmessage{No more uppercase letters in @enumerate; get a bigger
+ alphabet}
+ \fi
+ \char\uccode\itemno
+ }%
+}
+
+% Call \doitemize, adding a period to the first argument and supplying the
+% common last two arguments. Also subtract one from the initial value in
+% \itemno, since @item increments \itemno.
+%
+\def\startenumeration#1{%
+ \advance\itemno by -1
+ \doitemize{#1.}\flushcr
+}
+
+% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
+% to @enumerate.
+%
+\def\alphaenumerate{\enumerate{a}}
+\def\capsenumerate{\enumerate{A}}
+\def\Ealphaenumerate{\Eenumerate}
+\def\Ecapsenumerate{\Eenumerate}
+
+
+% @multitable macros
+% Amy Hendrickson, 8/18/94, 3/6/96
+%
+% @multitable ... @end multitable will make as many columns as desired.
+% Contents of each column will wrap at width given in preamble. Width
+% can be specified either with sample text given in a template line,
+% or in percent of \hsize, the current width of text on page.
+
+% Table can continue over pages but will only break between lines.
+
+% To make preamble:
+%
+% Either define widths of columns in terms of percent of \hsize:
+% @multitable @columnfractions .25 .3 .45
+% @item ...
+%
+% Numbers following @columnfractions are the percent of the total
+% current hsize to be used for each column. You may use as many
+% columns as desired.
+
+
+% Or use a template:
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item ...
+% using the widest term desired in each column.
+
+% Each new table line starts with @item, each subsequent new column
+% starts with @tab. Empty columns may be produced by supplying @tab's
+% with nothing between them for as many times as empty columns are needed,
+% ie, @tab@tab@tab will produce two empty columns.
+
+% @item, @tab do not need to be on their own lines, but it will not hurt
+% if they are.
+
+% Sample multitable:
+
+% @multitable {Column 1 template} {Column 2 template} {Column 3 template}
+% @item first col stuff @tab second col stuff @tab third col
+% @item
+% first col stuff
+% @tab
+% second col stuff
+% @tab
+% third col
+% @item first col stuff @tab second col stuff
+% @tab Many paragraphs of text may be used in any column.
+%
+% They will wrap at the width determined by the template.
+% @item@tab@tab This will be in third column.
+% @end multitable
+
+% Default dimensions may be reset by user.
+% @multitableparskip is vertical space between paragraphs in table.
+% @multitableparindent is paragraph indent in table.
+% @multitablecolmargin is horizontal space to be left between columns.
+% @multitablelinespace is space to leave between table items, baseline
+% to baseline.
+% 0pt means it depends on current normal line spacing.
+%
+\newskip\multitableparskip
+\newskip\multitableparindent
+\newdimen\multitablecolspace
+\newskip\multitablelinespace
+\multitableparskip=0pt
+\multitableparindent=6pt
+\multitablecolspace=12pt
+\multitablelinespace=0pt
+
+% Macros used to set up halign preamble:
+%
+\let\endsetuptable\relax
+\def\xendsetuptable{\endsetuptable}
+\let\columnfractions\relax
+\def\xcolumnfractions{\columnfractions}
+\newif\ifsetpercent
+
+% #1 is the @columnfraction, usually a decimal number like .5, but might
+% be just 1. We just use it, whatever it is.
+%
+\def\pickupwholefraction#1 {%
+ \global\advance\colcount by 1
+ \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
+ \setuptable
+}
+
+\newcount\colcount
+\def\setuptable#1{%
+ \def\firstarg{#1}%
+ \ifx\firstarg\xendsetuptable
+ \let\go = \relax
+ \else
+ \ifx\firstarg\xcolumnfractions
+ \global\setpercenttrue
+ \else
+ \ifsetpercent
+ \let\go\pickupwholefraction
+ \else
+ \global\advance\colcount by 1
+ \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
+ % separator; typically that is always in the input, anyway.
+ \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
+ \fi
+ \fi
+ \ifx\go\pickupwholefraction
+ % Put the argument back for the \pickupwholefraction call, so
+ % we'll always have a period there to be parsed.
+ \def\go{\pickupwholefraction#1}%
+ \else
+ \let\go = \setuptable
+ \fi%
+ \fi
+ \go
+}
+
+% multitable-only commands.
+%
+% @headitem starts a heading row, which we typeset in bold.
+% Assignments have to be global since we are inside the implicit group
+% of an alignment entry. Note that \everycr resets \everytab.
+\def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}%
+%
+% A \tab used to include \hskip1sp. But then the space in a template
+% line is not enough. That is bad. So let's go back to just `&' until
+% we encounter the problem it was intended to solve again.
+% --karl, nathan@acm.org, 20apr99.
+\def\tab{\checkenv\multitable &\the\everytab}%
+
+% @multitable ... @end multitable definitions:
+%
+\newtoks\everytab % insert after every tab.
+%
+\envdef\multitable{%
+ \vskip\parskip
+ \startsavinginserts
+ %
+ % @item within a multitable starts a normal row.
+ % We use \def instead of \let so that if one of the multitable entries
+ % contains an @itemize, we don't choke on the \item (seen as \crcr aka
+ % \endtemplate) expanding \doitemize.
+ \def\item{\crcr}%
+ %
+ \tolerance=9500
+ \hbadness=9500
+ \setmultitablespacing
+ \parskip=\multitableparskip
+ \parindent=\multitableparindent
+ \overfullrule=0pt
+ \global\colcount=0
+ %
+ \everycr = {%
+ \noalign{%
+ \global\everytab={}%
+ \global\colcount=0 % Reset the column counter.
+ % Check for saved footnotes, etc.
+ \checkinserts
+ % Keeps underfull box messages off when table breaks over pages.
+ %\filbreak
+ % Maybe so, but it also creates really weird page breaks when the
+ % table breaks over pages. Wouldn't \vfil be better? Wait until the
+ % problem manifests itself, so it can be fixed for real --karl.
+ }%
+ }%
+ %
+ \parsearg\domultitable
+}
+\def\domultitable#1{%
+ % To parse everything between @multitable and @item:
+ \setuptable#1 \endsetuptable
+ %
+ % This preamble sets up a generic column definition, which will
+ % be used as many times as user calls for columns.
+ % \vtop will set a single line and will also let text wrap and
+ % continue for many paragraphs if desired.
+ \halign\bgroup &%
+ \global\advance\colcount by 1
+ \multistrut
+ \vtop{%
+ % Use the current \colcount to find the correct column width:
+ \hsize=\expandafter\csname col\the\colcount\endcsname
+ %
+ % In order to keep entries from bumping into each other
+ % we will add a \leftskip of \multitablecolspace to all columns after
+ % the first one.
+ %
+ % If a template has been used, we will add \multitablecolspace
+ % to the width of each template entry.
+ %
+ % If the user has set preamble in terms of percent of \hsize we will
+ % use that dimension as the width of the column, and the \leftskip
+ % will keep entries from bumping into each other. Table will start at
+ % left margin and final column will justify at right margin.
+ %
+ % Make sure we don't inherit \rightskip from the outer environment.
+ \rightskip=0pt
+ \ifnum\colcount=1
+ % The first column will be indented with the surrounding text.
+ \advance\hsize by\leftskip
+ \else
+ \ifsetpercent \else
+ % If user has not set preamble in terms of percent of \hsize
+ % we will advance \hsize by \multitablecolspace.
+ \advance\hsize by \multitablecolspace
+ \fi
+ % In either case we will make \leftskip=\multitablecolspace:
+ \leftskip=\multitablecolspace
+ \fi
+ % Ignoring space at the beginning and end avoids an occasional spurious
+ % blank line, when TeX decides to break the line at the space before the
+ % box from the multistrut, so the strut ends up on a line by itself.
+ % For example:
+ % @multitable @columnfractions .11 .89
+ % @item @code{#}
+ % @tab Legal holiday which is valid in major parts of the whole country.
+ % Is automatically provided with highlighting sequences respectively
+ % marking characters.
+ \noindent\ignorespaces##\unskip\multistrut
+ }\cr
+}
+\def\Emultitable{%
+ \crcr
+ \egroup % end the \halign
+ \global\setpercentfalse
+}
+
+\def\setmultitablespacing{%
+ \def\multistrut{\strut}% just use the standard line spacing
+ %
+ % Compute \multitablelinespace (if not defined by user) for use in
+ % \multitableparskip calculation. We used define \multistrut based on
+ % this, but (ironically) that caused the spacing to be off.
+ % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
+\ifdim\multitablelinespace=0pt
+\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
+\global\advance\multitablelinespace by-\ht0
+\fi
+%% Test to see if parskip is larger than space between lines of
+%% table. If not, do nothing.
+%% If so, set to same dimension as multitablelinespace.
+\ifdim\multitableparskip>\multitablelinespace
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi%
+\ifdim\multitableparskip=0pt
+\global\multitableparskip=\multitablelinespace
+\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller
+ %% than skip between lines in the table.
+\fi}
+
+
+\message{conditionals,}
+
+% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
+% @ifnotxml always succeed. They currently do nothing; we don't
+% attempt to check whether the conditionals are properly nested. But we
+% have to remember that they are conditionals, so that @end doesn't
+% attempt to close an environment group.
+%
+\def\makecond#1{%
+ \expandafter\let\csname #1\endcsname = \relax
+ \expandafter\let\csname iscond.#1\endcsname = 1
+}
+\makecond{iftex}
+\makecond{ifnotdocbook}
+\makecond{ifnothtml}
+\makecond{ifnotinfo}
+\makecond{ifnotplaintext}
+\makecond{ifnotxml}
+
+% Ignore @ignore, @ifhtml, @ifinfo, and the like.
+%
+\def\direntry{\doignore{direntry}}
+\def\documentdescription{\doignore{documentdescription}}
+\def\docbook{\doignore{docbook}}
+\def\html{\doignore{html}}
+\def\ifdocbook{\doignore{ifdocbook}}
+\def\ifhtml{\doignore{ifhtml}}
+\def\ifinfo{\doignore{ifinfo}}
+\def\ifnottex{\doignore{ifnottex}}
+\def\ifplaintext{\doignore{ifplaintext}}
+\def\ifxml{\doignore{ifxml}}
+\def\ignore{\doignore{ignore}}
+\def\menu{\doignore{menu}}
+\def\xml{\doignore{xml}}
+
+% Ignore text until a line `@end #1', keeping track of nested conditionals.
+%
+% A count to remember the depth of nesting.
+\newcount\doignorecount
+
+\def\doignore#1{\begingroup
+ % Scan in ``verbatim'' mode:
+ \catcode`\@ = \other
+ \catcode`\{ = \other
+ \catcode`\} = \other
+ %
+ % Make sure that spaces turn into tokens that match what \doignoretext wants.
+ \spaceisspace
+ %
+ % Count number of #1's that we've seen.
+ \doignorecount = 0
+ %
+ % Swallow text until we reach the matching `@end #1'.
+ \dodoignore{#1}%
+}
+
+{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
+ \obeylines %
+ %
+ \gdef\dodoignore#1{%
+ % #1 contains the command name as a string, e.g., `ifinfo'.
+ %
+ % Define a command to find the next `@end #1', which must be on a line
+ % by itself.
+ \long\def\doignoretext##1^^M@end #1{\doignoretextyyy##1^^M@#1\_STOP_}%
+ % And this command to find another #1 command, at the beginning of a
+ % line. (Otherwise, we would consider a line `@c @ifset', for
+ % example, to count as an @ifset for nesting.)
+ \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
+ %
+ % And now expand that command.
+ \obeylines %
+ \doignoretext ^^M%
+ }%
+}
+
+\def\doignoreyyy#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty % Nothing found.
+ \let\next\doignoretextzzz
+ \else % Found a nested condition, ...
+ \advance\doignorecount by 1
+ \let\next\doignoretextyyy % ..., look for another.
+ % If we're here, #1 ends with ^^M\ifinfo (for example).
+ \fi
+ \next #1% the token \_STOP_ is present just after this macro.
+}
+
+% We have to swallow the remaining "\_STOP_".
+%
+\def\doignoretextzzz#1{%
+ \ifnum\doignorecount = 0 % We have just found the outermost @end.
+ \let\next\enddoignore
+ \else % Still inside a nested condition.
+ \advance\doignorecount by -1
+ \let\next\doignoretext % Look for the next @end.
+ \fi
+ \next
+}
+
+% Finish off ignored text.
+\def\enddoignore{\endgroup\ignorespaces}
+
+
+% @set VAR sets the variable VAR to an empty value.
+% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
+%
+% Since we want to separate VAR from REST-OF-LINE (which might be
+% empty), we can't just use \parsearg; we have to insert a space of our
+% own to delimit the rest of the line, and then take it out again if we
+% didn't need it.
+% We rely on the fact that \parsearg sets \catcode`\ =10.
+%
+\parseargdef\set{\setyyy#1 \endsetyyy}
+\def\setyyy#1 #2\endsetyyy{%
+ {%
+ \makevalueexpandable
+ \def\temp{#2}%
+ \edef\next{\gdef\makecsname{SET#1}}%
+ \ifx\temp\empty
+ \next{}%
+ \else
+ \setzzz#2\endsetzzz
+ \fi
+ }%
+}
+% Remove the trailing space \setxxx inserted.
+\def\setzzz#1 \endsetzzz{\next{#1}}
+
+% @clear VAR clears (i.e., unsets) the variable VAR.
+%
+\parseargdef\clear{%
+ {%
+ \makevalueexpandable
+ \global\expandafter\let\csname SET#1\endcsname=\relax
+ }%
+}
+
+% @value{foo} gets the text saved in variable foo.
+\def\value{\begingroup\makevalueexpandable\valuexxx}
+\def\valuexxx#1{\expandablevalue{#1}\endgroup}
+{
+ \catcode`\- = \active \catcode`\_ = \active
+ %
+ \gdef\makevalueexpandable{%
+ \let\value = \expandablevalue
+ % We don't want these characters active, ...
+ \catcode`\-=\other \catcode`\_=\other
+ % ..., but we might end up with active ones in the argument if
+ % we're called from @code, as @code{@value{foo-bar_}}, though.
+ % So \let them to their normal equivalents.
+ \let-\realdash \let_\normalunderscore
+ }
+}
+
+% We have this subroutine so that we can handle at least some @value's
+% properly in indexes (we call \makevalueexpandable in \indexdummies).
+% The command has to be fully expandable (if the variable is set), since
+% the result winds up in the index file. This means that if the
+% variable's value contains other Texinfo commands, it's almost certain
+% it will fail (although perhaps we could fix that with sufficient work
+% to do a one-level expansion on the result, instead of complete).
+%
+\def\expandablevalue#1{%
+ \expandafter\ifx\csname SET#1\endcsname\relax
+ {[No value for ``#1'']}%
+ \message{Variable `#1', used in @value, is not set.}%
+ \else
+ \csname SET#1\endcsname
+ \fi
+}
+
+% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+% with @set.
+%
+% To get special treatment of `@end ifset,' call \makeond and the redefine.
+%
+\makecond{ifset}
+\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+\def\doifset#1#2{%
+ {%
+ \makevalueexpandable
+ \let\next=\empty
+ \expandafter\ifx\csname SET#2\endcsname\relax
+ #1% If not set, redefine \next.
+ \fi
+ \expandafter
+ }\next
+}
+\def\ifsetfail{\doignore{ifset}}
+
+% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
+% defined with @set, or has been undefined with @clear.
+%
+% The `\else' inside the `\doifset' parameter is a trick to reuse the
+% above code: if the variable is not set, do nothing, if it is set,
+% then redefine \next to \ifclearfail.
+%
+\makecond{ifclear}
+\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+\def\ifclearfail{\doignore{ifclear}}
+
+% @dircategory CATEGORY -- specify a category of the dir file
+% which this file should belong to. Ignore this in TeX.
+\let\dircategory=\comment
+
+% @defininfoenclose.
+\let\definfoenclose=\comment
+
+
+\message{indexing,}
+% Index generation facilities
+
+% Define \newwrite to be identical to plain tex's \newwrite
+% except not \outer, so it can be used within macros and \if's.
+\edef\newwrite{\makecsname{ptexnewwrite}}
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that accumulates this index. The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+%
+\def\newindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{% % Define @#1index
+ \noexpand\doindex{#1}}
+}
+
+% @defindex foo == \newindex{foo}
+%
+\def\defindex{\parsearg\newindex}
+
+% Define @defcodeindex, like @defindex except put all entries in @code.
+%
+\def\defcodeindex{\parsearg\newcodeindex}
+%
+\def\newcodeindex#1{%
+ \iflinks
+ \expandafter\newwrite \csname#1indfile\endcsname
+ \openout \csname#1indfile\endcsname \jobname.#1
+ \fi
+ \expandafter\xdef\csname#1index\endcsname{%
+ \noexpand\docodeindex{#1}}%
+}
+
+
+% @synindex foo bar makes index foo feed into index bar.
+% Do this instead of @defindex foo if you don't want it as a separate index.
+%
+% @syncodeindex foo bar similar, but put all entries made for index foo
+% inside @code.
+%
+\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
+\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
+
+% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
+% #3 the target index (bar).
+\def\dosynindex#1#2#3{%
+ % Only do \closeout if we haven't already done it, else we'll end up
+ % closing the target index.
+ \expandafter \ifx\csname donesynindex#2\endcsname \undefined
+ % The \closeout helps reduce unnecessary open files; the limit on the
+ % Acorn RISC OS is a mere 16 files.
+ \expandafter\closeout\csname#2indfile\endcsname
+ \expandafter\let\csname\donesynindex#2\endcsname = 1
+ \fi
+ % redefine \fooindfile:
+ \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
+ \expandafter\let\csname#2indfile\endcsname=\temp
+ % redefine \fooindex:
+ \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
+}
+
+% Define \doindex, the driver for all \fooindex macros.
+% Argument #1 is generated by the calling \fooindex macro,
+% and it is "foo", the name of the index.
+
+% \doindex just uses \parsearg; it calls \doind for the actual work.
+% This is because \doind is more useful to call from other macros.
+
+% There is also \dosubind {index}{topic}{subtopic}
+% which makes an entry in a two-level index such as the operation index.
+
+\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
+\def\singleindexer #1{\doind{\indexname}{#1}}
+
+% like the previous two, but they put @code around the argument.
+\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
+\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
+
+% Take care of Texinfo commands that can appear in an index entry.
+% Since there are some commands we want to expand, and others we don't,
+% we have to laboriously prevent expansion for those that we don't.
+%
+\def\indexdummies{%
+ \def\@{@}% change to @@ when we switch to @ as escape char in index files.
+ \def\ {\realbackslash\space }%
+ % Need these in case \tex is in effect and \{ is a \delimiter again.
+ % But can't use \lbracecmd and \rbracecmd because texindex assumes
+ % braces and backslashes are used only as delimiters.
+ \let\{ = \mylbrace
+ \let\} = \myrbrace
+ %
+ % \definedummyword defines \#1 as \realbackslash #1\space, thus
+ % effectively preventing its expansion. This is used only for control
+ % words, not control letters, because the \space would be incorrect
+ % for control characters, but is needed to separate the control word
+ % from whatever follows.
+ %
+ % For control letters, we have \definedummyletter, which omits the
+ % space.
+ %
+ % These can be used both for control words that take an argument and
+ % those that do not. If it is followed by {arg} in the input, then
+ % that will dutifully get written to the index (or wherever).
+ %
+ \def\definedummyword##1{%
+ \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}%
+ }%
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{\realbackslash ##1}%
+ }%
+ \let\definedummyaccent\definedummyletter
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% For the aux file, @ is the escape character. So we want to redefine
+% everything using @ instead of \realbackslash. When everything uses
+% @, this will be simpler.
+%
+\def\atdummies{%
+ \def\@{@@}%
+ \def\ {@ }%
+ \let\{ = \lbraceatcmd
+ \let\} = \rbraceatcmd
+ %
+ % (See comments in \indexdummies.)
+ \def\definedummyword##1{%
+ \expandafter\def\csname ##1\endcsname{@##1\space}%
+ }%
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{@##1}%
+ }%
+ \let\definedummyaccent\definedummyletter
+ %
+ % Do the redefinitions.
+ \commondummies
+}
+
+% Called from \indexdummies and \atdummies. \definedummyword and
+% \definedummyletter must be defined first.
+%
+\def\commondummies{%
+ %
+ \normalturnoffactive
+ %
+ \commondummiesnofonts
+ %
+ \definedummyletter{_}%
+ %
+ % Non-English letters.
+ \definedummyword{AA}%
+ \definedummyword{AE}%
+ \definedummyword{L}%
+ \definedummyword{OE}%
+ \definedummyword{O}%
+ \definedummyword{aa}%
+ \definedummyword{ae}%
+ \definedummyword{l}%
+ \definedummyword{oe}%
+ \definedummyword{o}%
+ \definedummyword{ss}%
+ \definedummyword{exclamdown}%
+ \definedummyword{questiondown}%
+ \definedummyword{ordf}%
+ \definedummyword{ordm}%
+ %
+ % Although these internal commands shouldn't show up, sometimes they do.
+ \definedummyword{bf}%
+ \definedummyword{gtr}%
+ \definedummyword{hat}%
+ \definedummyword{less}%
+ \definedummyword{sf}%
+ \definedummyword{sl}%
+ \definedummyword{tclose}%
+ \definedummyword{tt}%
+ %
+ \definedummyword{LaTeX}%
+ \definedummyword{TeX}%
+ %
+ % Assorted special characters.
+ \definedummyword{bullet}%
+ \definedummyword{comma}%
+ \definedummyword{copyright}%
+ \definedummyword{registeredsymbol}%
+ \definedummyword{dots}%
+ \definedummyword{enddots}%
+ \definedummyword{equiv}%
+ \definedummyword{error}%
+ \definedummyword{euro}%
+ \definedummyword{expansion}%
+ \definedummyword{minus}%
+ \definedummyword{pounds}%
+ \definedummyword{point}%
+ \definedummyword{print}%
+ \definedummyword{result}%
+ %
+ % Handle some cases of @value -- where it does not contain any
+ % (non-fully-expandable) commands.
+ \makevalueexpandable
+ %
+ % Normal spaces, not active ones.
+ \unsepspaces
+ %
+ % No macro expansion.
+ \turnoffmacros
+}
+
+% \commondummiesnofonts: common to \commondummies and \indexnofonts.
+%
+% Better have this without active chars.
+{
+ \catcode`\~=\other
+ \gdef\commondummiesnofonts{%
+ % Control letters and accents.
+ \definedummyletter{!}%
+ \definedummyaccent{"}%
+ \definedummyaccent{'}%
+ \definedummyletter{*}%
+ \definedummyaccent{,}%
+ \definedummyletter{.}%
+ \definedummyletter{/}%
+ \definedummyletter{:}%
+ \definedummyaccent{=}%
+ \definedummyletter{?}%
+ \definedummyaccent{^}%
+ \definedummyaccent{`}%
+ \definedummyaccent{~}%
+ \definedummyword{u}%
+ \definedummyword{v}%
+ \definedummyword{H}%
+ \definedummyword{dotaccent}%
+ \definedummyword{ringaccent}%
+ \definedummyword{tieaccent}%
+ \definedummyword{ubaraccent}%
+ \definedummyword{udotaccent}%
+ \definedummyword{dotless}%
+ %
+ % Texinfo font commands.
+ \definedummyword{b}%
+ \definedummyword{i}%
+ \definedummyword{r}%
+ \definedummyword{sc}%
+ \definedummyword{t}%
+ %
+ % Commands that take arguments.
+ \definedummyword{acronym}%
+ \definedummyword{cite}%
+ \definedummyword{code}%
+ \definedummyword{command}%
+ \definedummyword{dfn}%
+ \definedummyword{emph}%
+ \definedummyword{env}%
+ \definedummyword{file}%
+ \definedummyword{kbd}%
+ \definedummyword{key}%
+ \definedummyword{math}%
+ \definedummyword{option}%
+ \definedummyword{samp}%
+ \definedummyword{strong}%
+ \definedummyword{tie}%
+ \definedummyword{uref}%
+ \definedummyword{url}%
+ \definedummyword{var}%
+ \definedummyword{verb}%
+ \definedummyword{w}%
+ }
+}
+
+% \indexnofonts is used when outputting the strings to sort the index
+% by, and when constructing control sequence names. It eliminates all
+% control sequences and just writes whatever the best ASCII sort string
+% would be for a given command (usually its argument).
+%
+\def\indexnofonts{%
+ % Accent commands should become @asis.
+ \def\definedummyaccent##1{%
+ \expandafter\let\csname ##1\endcsname\asis
+ }%
+ % We can just ignore other control letters.
+ \def\definedummyletter##1{%
+ \expandafter\def\csname ##1\endcsname{}%
+ }%
+ % Hopefully, all control words can become @asis.
+ \let\definedummyword\definedummyaccent
+ %
+ \commondummiesnofonts
+ %
+ % Don't no-op \tt, since it isn't a user-level command
+ % and is used in the definitions of the active chars like <, >, |, etc.
+ % Likewise with the other plain tex font commands.
+ %\let\tt=\asis
+ %
+ \def\ { }%
+ \def\@{@}%
+ % how to handle braces?
+ \def\_{\normalunderscore}%
+ %
+ % Non-English letters.
+ \def\AA{AA}%
+ \def\AE{AE}%
+ \def\L{L}%
+ \def\OE{OE}%
+ \def\O{O}%
+ \def\aa{aa}%
+ \def\ae{ae}%
+ \def\l{l}%
+ \def\oe{oe}%
+ \def\o{o}%
+ \def\ss{ss}%
+ \def\exclamdown{!}%
+ \def\questiondown{?}%
+ \def\ordf{a}%
+ \def\ordm{o}%
+ %
+ \def\LaTeX{LaTeX}%
+ \def\TeX{TeX}%
+ %
+ % Assorted special characters.
+ % (The following {} will end up in the sort string, but that's ok.)
+ \def\bullet{bullet}%
+ \def\comma{,}%
+ \def\copyright{copyright}%
+ \def\registeredsymbol{R}%
+ \def\dots{...}%
+ \def\enddots{...}%
+ \def\equiv{==}%
+ \def\error{error}%
+ \def\euro{euro}%
+ \def\expansion{==>}%
+ \def\minus{-}%
+ \def\pounds{pounds}%
+ \def\point{.}%
+ \def\print{-|}%
+ \def\result{=>}%
+ %
+ % Don't write macro names.
+ \emptyusermacros
+}
+
+\let\indexbackslash=0 %overridden during \printindex.
+\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
+
+% Most index entries go through here, but \dosubind is the general case.
+% #1 is the index name, #2 is the entry text.
+\def\doind#1#2{\dosubind{#1}{#2}{}}
+
+% Workhorse for all \fooindexes.
+% #1 is name of index, #2 is stuff to put there, #3 is subentry --
+% empty if called from \doind, as we usually are (the main exception
+% is with most defuns, which call us directly).
+%
+\def\dosubind#1#2#3{%
+ \iflinks
+ {%
+ % Store the main index entry text (including the third arg).
+ \toks0 = {#2}%
+ % If third arg is present, precede it with a space.
+ \def\thirdarg{#3}%
+ \ifx\thirdarg\empty \else
+ \toks0 = \expandafter{\the\toks0 \space #3}%
+ \fi
+ %
+ \edef\writeto{\csname#1indfile\endcsname}%
+ %
+ \ifvmode
+ \dosubindsanitize
+ \else
+ \dosubindwrite
+ \fi
+ }%
+ \fi
+}
+
+% Write the entry in \toks0 to the index file:
+%
+\def\dosubindwrite{%
+ % Put the index entry in the margin if desired.
+ \ifx\SETmarginindex\relax\else
+ \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
+ \fi
+ %
+ % Remember, we are within a group.
+ \indexdummies % Must do this here, since \bf, etc expand at this stage
+ \escapechar=`\\
+ \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
+ % so it will be output as is; and it will print as backslash.
+ %
+ % Process the index entry with all font commands turned off, to
+ % get the string to sort by.
+ {\indexnofonts
+ \edef\temp{\the\toks0}% need full expansion
+ \xdef\indexsorttmp{\temp}%
+ }%
+ %
+ % Set up the complete index entry, with both the sort key and
+ % the original text, including any font commands. We write
+ % three arguments to \entry to the .?? file (four in the
+ % subentry case), texindex reduces to two when writing the .??s
+ % sorted result.
+ \edef\temp{%
+ \write\writeto{%
+ \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
+ }%
+ \temp
+}
+
+% Take care of unwanted page breaks:
+%
+% If a skip is the last thing on the list now, preserve it
+% by backing up by \lastskip, doing the \write, then inserting
+% the skip again. Otherwise, the whatsit generated by the
+% \write will make \lastskip zero. The result is that sequences
+% like this:
+% @end defun
+% @tindex whatever
+% @defun ...
+% will have extra space inserted, because the \medbreak in the
+% start of the @defun won't see the skip inserted by the @end of
+% the previous defun.
+%
+% But don't do any of this if we're not in vertical mode. We
+% don't want to do a \vskip and prematurely end a paragraph.
+%
+% Avoid page breaks due to these extra skips, too.
+%
+% But wait, there is a catch there:
+% We'll have to check whether \lastskip is zero skip. \ifdim is not
+% sufficient for this purpose, as it ignores stretch and shrink parts
+% of the skip. The only way seems to be to check the textual
+% representation of the skip.
+%
+% The following is almost like \def\zeroskipmacro{0.0pt} except that
+% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
+%
+\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
+%
+% ..., ready, GO:
+%
+\def\dosubindsanitize{%
+ % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+ \skip0 = \lastskip
+ \edef\lastskipmacro{\the\lastskip}%
+ \count255 = \lastpenalty
+ %
+ % If \lastskip is nonzero, that means the last item was a
+ % skip. And since a skip is discardable, that means this
+ % -\skip0 glue we're inserting is preceded by a
+ % non-discardable item, therefore it is not a potential
+ % breakpoint, therefore no \nobreak needed.
+ \ifx\lastskipmacro\zeroskipmacro
+ \else
+ \vskip-\skip0
+ \fi
+ %
+ \dosubindwrite
+ %
+ \ifx\lastskipmacro\zeroskipmacro
+ % If \lastskip was zero, perhaps the last item was a penalty, and
+ % perhaps it was >=10000, e.g., a \nobreak. In that case, we want
+ % to re-insert the same penalty (values >10000 are used for various
+ % signals); since we just inserted a non-discardable item, any
+ % following glue (such as a \parskip) would be a breakpoint. For example:
+ %
+ % @deffn deffn-whatever
+ % @vindex index-whatever
+ % Description.
+ % would allow a break between the index-whatever whatsit
+ % and the "Description." paragraph.
+ \ifnum\count255>9999 \penalty\count255 \fi
+ \else
+ % On the other hand, if we had a nonzero \lastskip,
+ % this make-up glue would be preceded by a non-discardable item
+ % (the whatsit from the \write), so we must insert a \nobreak.
+ \nobreak\vskip\skip0
+ \fi
+}
+
+% The index entry written in the file actually looks like
+% \entry {sortstring}{page}{topic}
+% or
+% \entry {sortstring}{page}{topic}{subtopic}
+% The texindex program reads in these files and writes files
+% containing these kinds of lines:
+% \initial {c}
+% before the first topic whose initial is c
+% \entry {topic}{pagelist}
+% for a topic that is used without subtopics
+% \primary {topic}
+% for the beginning of a topic that is used with subtopics
+% \secondary {subtopic}{pagelist}
+% for each subtopic.
+
+% Define the user-accessible indexing commands
+% @findex, @vindex, @kindex, @cindex.
+
+\def\findex {\fnindex}
+\def\kindex {\kyindex}
+\def\cindex {\cpindex}
+\def\vindex {\vrindex}
+\def\tindex {\tpindex}
+\def\pindex {\pgindex}
+
+\def\cindexsub {\begingroup\obeylines\cindexsub}
+{\obeylines %
+\gdef\cindexsub "#1" #2^^M{\endgroup %
+\dosubind{cp}{#2}{#1}}}
+
+% Define the macros used in formatting output of the sorted index material.
+
+% @printindex causes a particular index (the ??s file) to get printed.
+% It does not print any chapter heading (usually an @unnumbered).
+%
+\parseargdef\printindex{\begingroup
+ \dobreak \chapheadingskip{10000}%
+ %
+ \smallfonts \rm
+ \tolerance = 9500
+ \everypar = {}% don't want the \kern\-parindent from indentation suppression.
+ %
+ % See if the index file exists and is nonempty.
+ % Change catcode of @ here so that if the index file contains
+ % \initial {@}
+ % as its first line, TeX doesn't complain about mismatched braces
+ % (because it thinks @} is a control sequence).
+ \catcode`\@ = 11
+ \openin 1 \jobname.#1s
+ \ifeof 1
+ % \enddoublecolumns gets confused if there is no text in the index,
+ % and it loses the chapter title and the aux file entries for the
+ % index. The easiest way to prevent this problem is to make sure
+ % there is some text.
+ \putwordIndexNonexistent
+ \else
+ %
+ % If the index file exists but is empty, then \openin leaves \ifeof
+ % false. We have to make TeX try to read something from the file, so
+ % it can discover if there is anything in it.
+ \read 1 to \temp
+ \ifeof 1
+ \putwordIndexIsEmpty
+ \else
+ % Index files are almost Texinfo source, but we use \ as the escape
+ % character. It would be better to use @, but that's too big a change
+ % to make right now.
+ \def\indexbackslash{\backslashcurfont}%
+ \catcode`\\ = 0
+ \escapechar = `\\
+ \begindoublecolumns
+ \input \jobname.#1s
+ \enddoublecolumns
+ \fi
+ \fi
+ \closein 1
+\endgroup}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\initial#1{{%
+ % Some minor font changes for the special characters.
+ \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
+ %
+ % Remove any glue we may have, we'll be inserting our own.
+ \removelastskip
+ %
+ % We like breaks before the index initials, so insert a bonus.
+ \nobreak
+ \vskip 0pt plus 3\baselineskip
+ \penalty 0
+ \vskip 0pt plus -3\baselineskip
+ %
+ % Typeset the initial. Making this add up to a whole number of
+ % baselineskips increases the chance of the dots lining up from column
+ % to column. It still won't often be perfect, because of the stretch
+ % we need before each entry, but it's better.
+ %
+ % No shrink because it confuses \balancecolumns.
+ \vskip 1.67\baselineskip plus .5\baselineskip
+ \leftline{\secbf #1}%
+ % Do our best not to break after the initial.
+ \nobreak
+ \vskip .33\baselineskip plus .1\baselineskip
+}}
+
+% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
+% then page number (#2) flushed to the right margin. It is used for index
+% and table of contents entries. The paragraph is indented by \leftskip.
+%
+% A straightforward implementation would start like this:
+% \def\entry#1#2{...
+% But this frozes the catcodes in the argument, and can cause problems to
+% @code, which sets - active. This problem was fixed by a kludge---
+% ``-'' was active throughout whole index, but this isn't really right.
+%
+% The right solution is to prevent \entry from swallowing the whole text.
+% --kasal, 21nov03
+\def\entry{%
+ \begingroup
+ %
+ % Start a new paragraph if necessary, so our assignments below can't
+ % affect previous text.
+ \par
+ %
+ % Do not fill out the last line with white space.
+ \parfillskip = 0in
+ %
+ % No extra space above this paragraph.
+ \parskip = 0in
+ %
+ % Do not prefer a separate line ending with a hyphen to fewer lines.
+ \finalhyphendemerits = 0
+ %
+ % \hangindent is only relevant when the entry text and page number
+ % don't both fit on one line. In that case, bob suggests starting the
+ % dots pretty far over on the line. Unfortunately, a large
+ % indentation looks wrong when the entry text itself is broken across
+ % lines. So we use a small indentation and put up with long leaders.
+ %
+ % \hangafter is reset to 1 (which is the value we want) at the start
+ % of each paragraph, so we need not do anything with that.
+ \hangindent = 2em
+ %
+ % When the entry text needs to be broken, just fill out the first line
+ % with blank space.
+ \rightskip = 0pt plus1fil
+ %
+ % A bit of stretch before each entry for the benefit of balancing
+ % columns.
+ \vskip 0pt plus1pt
+ %
+ % Swallow the left brace of the text (first parameter):
+ \afterassignment\doentry
+ \let\temp =
+}
+\def\doentry{%
+ \bgroup % Instead of the swallowed brace.
+ \noindent
+ \aftergroup\finishentry
+ % And now comes the text of the entry.
+}
+\def\finishentry#1{%
+ % #1 is the page number.
+ %
+ % The following is kludged to not output a line of dots in the index if
+ % there are no page numbers. The next person who breaks this will be
+ % cursed by a Unix daemon.
+ \def\tempa{{\rm }}%
+ \def\tempb{#1}%
+ \edef\tempc{\tempa}%
+ \edef\tempd{\tempb}%
+ \ifx\tempc\tempd
+ \ %
+ \else
+ %
+ % If we must, put the page number on a line of its own, and fill out
+ % this line with blank space. (The \hfil is overwhelmed with the
+ % fill leaders glue in \indexdotfill if the page number does fit.)
+ \hfil\penalty50
+ \null\nobreak\indexdotfill % Have leaders before the page number.
+ %
+ % The `\ ' here is removed by the implicit \unskip that TeX does as
+ % part of (the primitive) \par. Without it, a spurious underfull
+ % \hbox ensues.
+ \ifpdf
+ \pdfgettoks#1.%
+ \ \the\toksA
+ \else
+ \ #1%
+ \fi
+ \fi
+ \par
+ \endgroup
+}
+
+% Like \dotfill except takes at least 1 em.
+\def\indexdotfill{\cleaders
+ \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill}
+
+\def\primary #1{\line{#1\hfil}}
+
+\newskip\secondaryindent \secondaryindent=0.5cm
+\def\secondary#1#2{{%
+ \parfillskip=0in
+ \parskip=0in
+ \hangindent=1in
+ \hangafter=1
+ \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
+ \ifpdf
+ \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
+ \else
+ #2
+ \fi
+ \par
+}}
+
+% Define two-column mode, which we use to typeset indexes.
+% Adapted from the TeXbook, page 416, which is to say,
+% the manmac.tex format used to print the TeXbook itself.
+\catcode`\@=11
+
+\newbox\partialpage
+\newdimen\doublecolumnhsize
+
+\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
+ % Grab any single-column material above us.
+ \output = {%
+ %
+ % Here is a possibility not foreseen in manmac: if we accumulate a
+ % whole lot of material, we might end up calling this \output
+ % routine twice in a row (see the doublecol-lose test, which is
+ % essentially a couple of indexes with @setchapternewpage off). In
+ % that case we just ship out what is in \partialpage with the normal
+ % output routine. Generally, \partialpage will be empty when this
+ % runs and this will be a no-op. See the indexspread.tex test case.
+ \ifvoid\partialpage \else
+ \onepageout{\pagecontents\partialpage}%
+ \fi
+ %
+ \global\setbox\partialpage = \vbox{%
+ % Unvbox the main output page.
+ \unvbox\PAGE
+ \kern-\topskip \kern\baselineskip
+ }%
+ }%
+ \eject % run that output routine to set \partialpage
+ %
+ % Use the double-column output routine for subsequent pages.
+ \output = {\doublecolumnout}%
+ %
+ % Change the page size parameters. We could do this once outside this
+ % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
+ % format, but then we repeat the same computation. Repeating a couple
+ % of assignments once per index is clearly meaningless for the
+ % execution time, so we may as well do it in one place.
+ %
+ % First we halve the line length, less a little for the gutter between
+ % the columns. We compute the gutter based on the line length, so it
+ % changes automatically with the paper format. The magic constant
+ % below is chosen so that the gutter has the same value (well, +-<1pt)
+ % as it did when we hard-coded it.
+ %
+ % We put the result in a separate register, \doublecolumhsize, so we
+ % can restore it in \pagesofar, after \hsize itself has (potentially)
+ % been clobbered.
+ %
+ \doublecolumnhsize = \hsize
+ \advance\doublecolumnhsize by -.04154\hsize
+ \divide\doublecolumnhsize by 2
+ \hsize = \doublecolumnhsize
+ %
+ % Double the \vsize as well. (We don't need a separate register here,
+ % since nobody clobbers \vsize.)
+ \vsize = 2\vsize
+}
+
+% The double-column output routine for all double-column pages except
+% the last.
+%
+\def\doublecolumnout{%
+ \splittopskip=\topskip \splitmaxdepth=\maxdepth
+ % Get the available space for the double columns -- the normal
+ % (undoubled) page height minus any material left over from the
+ % previous page.
+ \dimen@ = \vsize
+ \divide\dimen@ by 2
+ \advance\dimen@ by -\ht\partialpage
+ %
+ % box0 will be the left-hand column, box2 the right.
+ \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
+ \onepageout\pagesofar
+ \unvbox255
+ \penalty\outputpenalty
+}
+%
+% Re-output the contents of the output page -- any previous material,
+% followed by the two boxes we just split, in box0 and box2.
+\def\pagesofar{%
+ \unvbox\partialpage
+ %
+ \hsize = \doublecolumnhsize
+ \wd0=\hsize \wd2=\hsize
+ \hbox to\pagewidth{\box0\hfil\box2}%
+}
+%
+% All done with double columns.
+\def\enddoublecolumns{%
+ \output = {%
+ % Split the last of the double-column material. Leave it on the
+ % current page, no automatic page break.
+ \balancecolumns
+ %
+ % If we end up splitting too much material for the current page,
+ % though, there will be another page break right after this \output
+ % invocation ends. Having called \balancecolumns once, we do not
+ % want to call it again. Therefore, reset \output to its normal
+ % definition right away. (We hope \balancecolumns will never be
+ % called on to balance too much material, but if it is, this makes
+ % the output somewhat more palatable.)
+ \global\output = {\onepageout{\pagecontents\PAGE}}%
+ }%
+ \eject
+ \endgroup % started in \begindoublecolumns
+ %
+ % \pagegoal was set to the doubled \vsize above, since we restarted
+ % the current page. We're now back to normal single-column
+ % typesetting, so reset \pagegoal to the normal \vsize (after the
+ % \endgroup where \vsize got restored).
+ \pagegoal = \vsize
+}
+%
+% Called at the end of the double column material.
+\def\balancecolumns{%
+ \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
+ \dimen@ = \ht0
+ \advance\dimen@ by \topskip
+ \advance\dimen@ by-\baselineskip
+ \divide\dimen@ by 2 % target to split to
+ %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
+ \splittopskip = \topskip
+ % Loop until we get a decent breakpoint.
+ {%
+ \vbadness = 10000
+ \loop
+ \global\setbox3 = \copy0
+ \global\setbox1 = \vsplit3 to \dimen@
+ \ifdim\ht3>\dimen@
+ \global\advance\dimen@ by 1pt
+ \repeat
+ }%
+ %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+ \setbox0=\vbox to\dimen@{\unvbox1}%
+ \setbox2=\vbox to\dimen@{\unvbox3}%
+ %
+ \pagesofar
+}
+\catcode`\@ = \other
+
+
+\message{sectioning,}
+% Chapters, sections, etc.
+
+% \unnumberedno is an oxymoron, of course. But we count the unnumbered
+% sections so that we can refer to them unambiguously in the pdf
+% outlines by their "section number". We avoid collisions with chapter
+% numbers by starting them at 10000. (If a document ever has 10000
+% chapters, we're in trouble anyway, I'm sure.)
+\newcount\unnumberedno \unnumberedno = 10000
+\newcount\chapno
+\newcount\secno \secno=0
+\newcount\subsecno \subsecno=0
+\newcount\subsubsecno \subsubsecno=0
+
+% This counter is funny since it counts through charcodes of letters A, B, ...
+\newcount\appendixno \appendixno = `\@
+%
+% \def\appendixletter{\char\the\appendixno}
+% We do the following ugly conditional instead of the above simple
+% construct for the sake of pdftex, which needs the actual
+% letter in the expansion, not just typeset.
+%
+\def\appendixletter{%
+ \ifnum\appendixno=`A A%
+ \else\ifnum\appendixno=`B B%
+ \else\ifnum\appendixno=`C C%
+ \else\ifnum\appendixno=`D D%
+ \else\ifnum\appendixno=`E E%
+ \else\ifnum\appendixno=`F F%
+ \else\ifnum\appendixno=`G G%
+ \else\ifnum\appendixno=`H H%
+ \else\ifnum\appendixno=`I I%
+ \else\ifnum\appendixno=`J J%
+ \else\ifnum\appendixno=`K K%
+ \else\ifnum\appendixno=`L L%
+ \else\ifnum\appendixno=`M M%
+ \else\ifnum\appendixno=`N N%
+ \else\ifnum\appendixno=`O O%
+ \else\ifnum\appendixno=`P P%
+ \else\ifnum\appendixno=`Q Q%
+ \else\ifnum\appendixno=`R R%
+ \else\ifnum\appendixno=`S S%
+ \else\ifnum\appendixno=`T T%
+ \else\ifnum\appendixno=`U U%
+ \else\ifnum\appendixno=`V V%
+ \else\ifnum\appendixno=`W W%
+ \else\ifnum\appendixno=`X X%
+ \else\ifnum\appendixno=`Y Y%
+ \else\ifnum\appendixno=`Z Z%
+ % The \the is necessary, despite appearances, because \appendixletter is
+ % expanded while writing the .toc file. \char\appendixno is not
+ % expandable, thus it is written literally, thus all appendixes come out
+ % with the same letter (or @) in the toc without it.
+ \else\char\the\appendixno
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% Each @chapter defines this as the name of the chapter.
+% page headings and footings can use it. @section does likewise.
+% However, they are not reliable, because we don't use marks.
+\def\thischapter{}
+\def\thissection{}
+
+\newcount\absseclevel % used to calculate proper heading level
+\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
+
+% @raisesections: treat @section as chapter, @subsection as section, etc.
+\def\raisesections{\global\advance\secbase by -1}
+\let\up=\raisesections % original BFox name
+
+% @lowersections: treat @chapter as section, @section as subsection, etc.
+\def\lowersections{\global\advance\secbase by 1}
+\let\down=\lowersections % original BFox name
+
+% we only have subsub.
+\chardef\maxseclevel = 3
+%
+% A numbered section within an unnumbered changes to unnumbered too.
+% To achive this, remember the "biggest" unnum. sec. we are currently in:
+\chardef\unmlevel = \maxseclevel
+%
+% Trace whether the current chapter is an appendix or not:
+% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
+\def\chapheadtype{N}
+
+% Choose a heading macro
+% #1 is heading type
+% #2 is heading level
+% #3 is text for heading
+\def\genhead#1#2#3{%
+ % Compute the abs. sec. level:
+ \absseclevel=#2
+ \advance\absseclevel by \secbase
+ % Make sure \absseclevel doesn't fall outside the range:
+ \ifnum \absseclevel < 0
+ \absseclevel = 0
+ \else
+ \ifnum \absseclevel > 3
+ \absseclevel = 3
+ \fi
+ \fi
+ % The heading type:
+ \def\headtype{#1}%
+ \if \headtype U%
+ \ifnum \absseclevel < \unmlevel
+ \chardef\unmlevel = \absseclevel
+ \fi
+ \else
+ % Check for appendix sections:
+ \ifnum \absseclevel = 0
+ \edef\chapheadtype{\headtype}%
+ \else
+ \if \headtype A\if \chapheadtype N%
+ \errmessage{@appendix... within a non-appendix chapter}%
+ \fi\fi
+ \fi
+ % Check for numbered within unnumbered:
+ \ifnum \absseclevel > \unmlevel
+ \def\headtype{U}%
+ \else
+ \chardef\unmlevel = 3
+ \fi
+ \fi
+ % Now print the heading:
+ \if \headtype U%
+ \ifcase\absseclevel
+ \unnumberedzzz{#3}%
+ \or \unnumberedseczzz{#3}%
+ \or \unnumberedsubseczzz{#3}%
+ \or \unnumberedsubsubseczzz{#3}%
+ \fi
+ \else
+ \if \headtype A%
+ \ifcase\absseclevel
+ \appendixzzz{#3}%
+ \or \appendixsectionzzz{#3}%
+ \or \appendixsubseczzz{#3}%
+ \or \appendixsubsubseczzz{#3}%
+ \fi
+ \else
+ \ifcase\absseclevel
+ \chapterzzz{#3}%
+ \or \seczzz{#3}%
+ \or \numberedsubseczzz{#3}%
+ \or \numberedsubsubseczzz{#3}%
+ \fi
+ \fi
+ \fi
+ \suppressfirstparagraphindent
+}
+
+% an interface:
+\def\numhead{\genhead N}
+\def\apphead{\genhead A}
+\def\unnmhead{\genhead U}
+
+% @chapter, @appendix, @unnumbered. Increment top-level counter, reset
+% all lower-level sectioning counters to zero.
+%
+% Also set \chaplevelprefix, which we prepend to @float sequence numbers
+% (e.g., figures), q.v. By default (before any chapter), that is empty.
+\let\chaplevelprefix = \empty
+%
+\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
+\def\chapterzzz#1{%
+ % section resetting is \global in case the chapter is in a group, such
+ % as an @include file.
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\chapno by 1
+ %
+ % Used for \float.
+ \gdef\chaplevelprefix{\the\chapno.}%
+ \resetallfloatnos
+ %
+ \message{\putwordChapter\space \the\chapno}%
+ %
+ % Write the actual heading.
+ \chapmacro{#1}{Ynumbered}{\the\chapno}%
+ %
+ % So @section and the like are numbered underneath this chapter.
+ \global\let\section = \numberedsec
+ \global\let\subsection = \numberedsubsec
+ \global\let\subsubsection = \numberedsubsubsec
+}
+
+\outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz
+\def\appendixzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\appendixno by 1
+ \gdef\chaplevelprefix{\appendixletter.}%
+ \resetallfloatnos
+ %
+ \def\appendixnum{\putwordAppendix\space \appendixletter}%
+ \message{\appendixnum}%
+ %
+ \chapmacro{#1}{Yappendix}{\appendixletter}%
+ %
+ \global\let\section = \appendixsec
+ \global\let\subsection = \appendixsubsec
+ \global\let\subsubsection = \appendixsubsubsec
+}
+
+\outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz
+\def\unnumberedzzz#1{%
+ \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
+ \global\advance\unnumberedno by 1
+ %
+ % Since an unnumbered has no number, no prefix for figures.
+ \global\let\chaplevelprefix = \empty
+ \resetallfloatnos
+ %
+ % This used to be simply \message{#1}, but TeX fully expands the
+ % argument to \message. Therefore, if #1 contained @-commands, TeX
+ % expanded them. For example, in `@unnumbered The @cite{Book}', TeX
+ % expanded @cite (which turns out to cause errors because \cite is meant
+ % to be executed, not expanded).
+ %
+ % Anyway, we don't want the fully-expanded definition of @cite to appear
+ % as a result of the \message, we just want `@cite' itself. We use
+ % \the<toks register> to achieve this: TeX expands \the<toks> only once,
+ % simply yielding the contents of <toks register>. (We also do this for
+ % the toc entries.)
+ \toks0 = {#1}%
+ \message{(\the\toks0)}%
+ %
+ \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
+ %
+ \global\let\section = \unnumberedsec
+ \global\let\subsection = \unnumberedsubsec
+ \global\let\subsubsection = \unnumberedsubsubsec
+}
+
+% @centerchap is like @unnumbered, but the heading is centered.
+\outer\parseargdef\centerchap{%
+ % Well, we could do the following in a group, but that would break
+ % an assumption that \chapmacro is called at the outermost level.
+ % Thus we are safer this way: --kasal, 24feb04
+ \let\centerparametersmaybe = \centerparameters
+ \unnmhead0{#1}%
+ \let\centerparametersmaybe = \relax
+}
+
+% @top is like @unnumbered.
+\let\top\unnumbered
+
+% Sections.
+\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
+\def\seczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
+}
+
+\outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz
+\def\appendixsectionzzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
+}
+\let\appendixsec\appendixsection
+
+\outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz
+\def\unnumberedseczzz#1{%
+ \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1
+ \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
+}
+
+% Subsections.
+\outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz
+\def\numberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz
+\def\appendixsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz
+\def\unnumberedsubseczzz#1{%
+ \global\subsubsecno=0 \global\advance\subsecno by 1
+ \sectionheading{#1}{subsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno}%
+}
+
+% Subsubsections.
+\outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz
+\def\numberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynumbered}%
+ {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz
+\def\appendixsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Yappendix}%
+ {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz
+\def\unnumberedsubsubseczzz#1{%
+ \global\advance\subsubsecno by 1
+ \sectionheading{#1}{subsubsec}{Ynothing}%
+ {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
+}
+
+% These macros control what the section commands do, according
+% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
+% Define them by default for a numbered chapter.
+\let\section = \numberedsec
+\let\subsection = \numberedsubsec
+\let\subsubsection = \numberedsubsubsec
+
+% Define @majorheading, @heading and @subheading
+
+% NOTE on use of \vbox for chapter headings, section headings, and such:
+% 1) We use \vbox rather than the earlier \line to permit
+% overlong headings to fold.
+% 2) \hyphenpenalty is set to 10000 because hyphenation in a
+% heading is obnoxious; this forbids it.
+% 3) Likewise, headings look best if no \parindent is used, and
+% if justification is not attempted. Hence \raggedright.
+
+
+\def\majorheading{%
+ {\advance\chapheadingskip by 10pt \chapbreak }%
+ \parsearg\chapheadingzzz
+}
+
+\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+\def\chapheadingzzz#1{%
+ {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}%
+ \bigskip \par\penalty 200\relax
+ \suppressfirstparagraphindent
+}
+
+% @heading, @subheading, @subsubheading.
+\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
+ \suppressfirstparagraphindent}
+
+% These macros generate a chapter, section, etc. heading only
+% (including whitespace, linebreaking, etc. around it),
+% given all the information in convenient, parsed form.
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+%%% Define plain chapter starts, and page on/off switching for it
+% Parameter controlling skip before chapter headings (if needed)
+
+\newskip\chapheadingskip
+
+\def\chapbreak{\dobreak \chapheadingskip {-4000}}
+\def\chappager{\par\vfill\supereject}
+\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi}
+
+\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
+
+\def\CHAPPAGoff{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chapbreak
+\global\let\pagealignmacro=\chappager}
+
+\def\CHAPPAGon{%
+\global\let\contentsalignmacro = \chappager
+\global\let\pchapsepmacro=\chappager
+\global\let\pagealignmacro=\chappager
+\global\def\HEADINGSon{\HEADINGSsingle}}
+
+\def\CHAPPAGodd{%
+\global\let\contentsalignmacro = \chapoddpage
+\global\let\pchapsepmacro=\chapoddpage
+\global\let\pagealignmacro=\chapoddpage
+\global\def\HEADINGSon{\HEADINGSdouble}}
+
+\CHAPPAGon
+
+% Chapter opening.
+%
+% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
+% Yappendix, Yomitfromtoc), #3 the chapter number.
+%
+% To test against our argument.
+\def\Ynothingkeyword{Ynothing}
+\def\Yomitfromtockeyword{Yomitfromtoc}
+\def\Yappendixkeyword{Yappendix}
+%
+\def\chapmacro#1#2#3{%
+ \pchapsepmacro
+ {%
+ \chapfonts \rm
+ %
+ % Have to define \thissection before calling \donoderef, because the
+ % xref code eventually uses it. On the other hand, it has to be called
+ % after \pchapsepmacro, or the headline will change too soon.
+ \gdef\thissection{#1}%
+ \gdef\thischaptername{#1}%
+ %
+ % Only insert the separating space if we have a chapter/appendix
+ % number, and don't print the unnumbered ``number''.
+ \def\temptype{#2}%
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unnchap}%
+ \def\thischapter{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
+ \def\toctype{omit}%
+ \xdef\thischapter{}%
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
+ \def\toctype{app}%
+ % We don't substitute the actual chapter name into \thischapter
+ % because we don't want its macros evaluated now. And we don't
+ % use \thissection because that changes with each section.
+ %
+ \xdef\thischapter{\putwordAppendix{} \appendixletter:
+ \noexpand\thischaptername}%
+ \else
+ \setbox0 = \hbox{#3\enspace}%
+ \def\toctype{numchap}%
+ \xdef\thischapter{\putwordChapter{} \the\chapno:
+ \noexpand\thischaptername}%
+ \fi\fi\fi
+ %
+ % Write the toc entry for this chapter. Must come before the
+ % \donoderef, because we include the current node name in the toc
+ % entry, and \donoderef resets it to empty.
+ \writetocentry{\toctype}{#1}{#3}%
+ %
+ % For pdftex, we have to write out the node definition (aka, make
+ % the pdfdest) after any page break, but before the actual text has
+ % been typeset. If the destination for the pdf outline is after the
+ % text, then jumping from the outline may wind up with the text not
+ % being visible, for instance under high magnification.
+ \donoderef{#2}%
+ %
+ % Typeset the actual heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent=\wd0 \centerparametersmaybe
+ \unhbox0 #1\par}%
+ }%
+ \nobreak\bigskip % no page break after a chapter title
+ \nobreak
+}
+
+% @centerchap -- centered and unnumbered.
+\let\centerparametersmaybe = \relax
+\def\centerparameters{%
+ \advance\rightskip by 3\rightskip
+ \leftskip = \rightskip
+ \parfillskip = 0pt
+}
+
+
+% I don't think this chapter style is supported any more, so I'm not
+% updating it with the new noderef stuff. We'll see. --karl, 11aug03.
+%
+\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+%
+\def\unnchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt\raggedright
+ \rm #1\hfill}}\bigskip \par\nobreak
+}
+\def\chfopen #1#2{\chapoddpage {\chapfonts
+\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+\par\penalty 5000 %
+}
+\def\centerchfopen #1{%
+\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+ \parindent=0pt
+ \hfill {\rm #1}\hfill}}\bigskip \par\nobreak
+}
+\def\CHAPFopen{%
+ \global\let\chapmacro=\chfopen
+ \global\let\centerchapmacro=\centerchfopen}
+
+
+% Section titles. These macros combine the section number parts and
+% call the generic \sectionheading to do the printing.
+%
+\newskip\secheadingskip
+\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
+
+% Subsection titles.
+\newskip\subsecheadingskip
+\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
+
+% Subsubsection titles.
+\def\subsubsecheadingskip{\subsecheadingskip}
+\def\subsubsecheadingbreak{\subsecheadingbreak}
+
+
+% Print any size, any type, section title.
+%
+% #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is
+% the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the
+% section number.
+%
+\def\sectionheading#1#2#3#4{%
+ {%
+ % Switch to the right set of fonts.
+ \csname #2fonts\endcsname \rm
+ %
+ % Insert space above the heading.
+ \csname #2headingbreak\endcsname
+ %
+ % Only insert the space after the number if we have a section number.
+ \def\sectionlevel{#2}%
+ \def\temptype{#3}%
+ %
+ \ifx\temptype\Ynothingkeyword
+ \setbox0 = \hbox{}%
+ \def\toctype{unn}%
+ \gdef\thissection{#1}%
+ \else\ifx\temptype\Yomitfromtockeyword
+ % for @headings -- no section number, don't include in toc,
+ % and don't redefine \thissection.
+ \setbox0 = \hbox{}%
+ \def\toctype{omit}%
+ \let\sectionlevel=\empty
+ \else\ifx\temptype\Yappendixkeyword
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{app}%
+ \gdef\thissection{#1}%
+ \else
+ \setbox0 = \hbox{#4\enspace}%
+ \def\toctype{num}%
+ \gdef\thissection{#1}%
+ \fi\fi\fi
+ %
+ % Write the toc entry (before \donoderef). See comments in \chfplain.
+ \writetocentry{\toctype\sectionlevel}{#1}{#4}%
+ %
+ % Write the node reference (= pdf destination for pdftex).
+ % Again, see comments in \chfplain.
+ \donoderef{#3}%
+ %
+ % Output the actual section heading.
+ \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright
+ \hangindent=\wd0 % zero if no section number
+ \unhbox0 #1}%
+ }%
+ % Add extra space after the heading -- half of whatever came above it.
+ % Don't allow stretch, though.
+ \kern .5 \csname #2headingskip\endcsname
+ %
+ % Do not let the kern be a potential breakpoint, as it would be if it
+ % was followed by glue.
+ \nobreak
+ %
+ % We'll almost certainly start a paragraph next, so don't let that
+ % glue accumulate. (Not a breakpoint because it's preceded by a
+ % discardable item.)
+ \vskip-\parskip
+ %
+ % This is purely so the last item on the list is a known \penalty >
+ % 10000. This is so \startdefun can avoid allowing breakpoints after
+ % section headings. Otherwise, it would insert a valid breakpoint between:
+ %
+ % @section sec-whatever
+ % @deffn def-whatever
+ \penalty 10001
+}
+
+
+\message{toc,}
+% Table of contents.
+\newwrite\tocfile
+
+% Write an entry to the toc file, opening it if necessary.
+% Called from @chapter, etc.
+%
+% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
+% We append the current node name (if any) and page number as additional
+% arguments for the \{chap,sec,...}entry macros which will eventually
+% read this. The node name is used in the pdf outlines as the
+% destination to jump to.
+%
+% We open the .toc file for writing here instead of at @setfilename (or
+% any other fixed time) so that @contents can be anywhere in the document.
+% But if #1 is `omit', then we don't do anything. This is used for the
+% table of contents chapter openings themselves.
+%
+\newif\iftocfileopened
+\def\omitkeyword{omit}%
+%
+\def\writetocentry#1#2#3{%
+ \edef\writetoctype{#1}%
+ \ifx\writetoctype\omitkeyword \else
+ \iftocfileopened\else
+ \immediate\openout\tocfile = \jobname.toc
+ \global\tocfileopenedtrue
+ \fi
+ %
+ \iflinks
+ \toks0 = {#2}%
+ \toks2 = \expandafter{\lastnode}%
+ \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}{#3}%
+ {\the\toks2}{\noexpand\folio}}}%
+ \temp
+ \fi
+ \fi
+ %
+ % Tell \shipout to create a pdf destination on each page, if we're
+ % writing pdf. These are used in the table of contents. We can't
+ % just write one on every page because the title pages are numbered
+ % 1 and 2 (the page numbers aren't printed), and so are the first
+ % two pages of the document. Thus, we'd have two destinations named
+ % `1', and two named `2'.
+ \ifpdf \global\pdfmakepagedesttrue \fi
+}
+
+\newskip\contentsrightmargin \contentsrightmargin=1in
+\newcount\savepageno
+\newcount\lastnegativepageno \lastnegativepageno = -1
+
+% Prepare to read what we've written to \tocfile.
+%
+\def\startcontents#1{%
+ % If @setchapternewpage on, and @headings double, the contents should
+ % start on an odd page, unlike chapters. Thus, we maintain
+ % \contentsalignmacro in parallel with \pagealignmacro.
+ % From: Torbjorn Granlund <tege@matematik.su.se>
+ \contentsalignmacro
+ \immediate\closeout\tocfile
+ %
+ % Don't need to put `Contents' or `Short Contents' in the headline.
+ % It is abundantly clear what they are.
+ \def\thischapter{}%
+ \chapmacro{#1}{Yomitfromtoc}{}%
+ %
+ \savepageno = \pageno
+ \begingroup % Set up to handle contents files properly.
+ \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11
+ % We can't do this, because then an actual ^ in a section
+ % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97.
+ %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi
+ \raggedbottom % Worry more about breakpoints than the bottom.
+ \advance\hsize by -\contentsrightmargin % Don't use the full line length.
+ %
+ % Roman numerals for page numbers.
+ \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
+}
+
+
+% Normal (long) toc.
+\def\contents{%
+ \startcontents{\putwordTOC}%
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \input \jobname.toc
+ \fi
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \ifeof 1 \else
+ \pdfmakeoutlines
+ \fi
+ \closein 1
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+
+% And just the chapters.
+\def\summarycontents{%
+ \startcontents{\putwordShortTOC}%
+ %
+ \let\numchapentry = \shortchapentry
+ \let\appentry = \shortchapentry
+ \let\unnchapentry = \shortunnchapentry
+ % We want a true roman here for the page numbers.
+ \secfonts
+ \let\rm=\shortcontrm \let\bf=\shortcontbf
+ \let\sl=\shortcontsl \let\tt=\shortconttt
+ \rm
+ \hyphenpenalty = 10000
+ \advance\baselineskip by 1pt % Open it up a little.
+ \def\numsecentry##1##2##3##4{}
+ \let\appsecentry = \numsecentry
+ \let\unnsecentry = \numsecentry
+ \let\numsubsecentry = \numsecentry
+ \let\appsubsecentry = \numsecentry
+ \let\unnsubsecentry = \numsecentry
+ \let\numsubsubsecentry = \numsecentry
+ \let\appsubsubsecentry = \numsecentry
+ \let\unnsubsubsecentry = \numsecentry
+ \openin 1 \jobname.toc
+ \ifeof 1 \else
+ \input \jobname.toc
+ \fi
+ \closein 1
+ \vfill \eject
+ \contentsalignmacro % in case @setchapternewpage odd is in effect
+ \endgroup
+ \lastnegativepageno = \pageno
+ \global\pageno = \savepageno
+}
+\let\shortcontents = \summarycontents
+
+% Typeset the label for a chapter or appendix for the short contents.
+% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
+%
+\def\shortchaplabel#1{%
+ % This space should be enough, since a single number is .5em, and the
+ % widest letter (M) is 1em, at least in the Computer Modern fonts.
+ % But use \hss just in case.
+ % (This space doesn't include the extra space that gets added after
+ % the label; that gets put in by \shortchapentry above.)
+ %
+ % We'd like to right-justify chapter numbers, but that looks strange
+ % with appendix letters. And right-justifying numbers and
+ % left-justifying letters looks strange when there is less than 10
+ % chapters. Have to read the whole toc once to know how many chapters
+ % there are before deciding ...
+ \hbox to 1em{#1\hss}%
+}
+
+% These macros generate individual entries in the table of contents.
+% The first argument is the chapter or section name.
+% The last argument is the page number.
+% The arguments in between are the chapter number, section number, ...
+
+% Chapters, in the main contents.
+\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
+%
+% Chapters, in the short toc.
+% See comments in \dochapentry re vbox and related settings.
+\def\shortchapentry#1#2#3#4{%
+ \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
+}
+
+% Appendices, in the main contents.
+% Need the word Appendix, and a fixed-size box.
+%
+\def\appendixbox#1{%
+ % We use M since it's probably the widest letter.
+ \setbox0 = \hbox{\putwordAppendix{} M}%
+ \hbox to \wd0{\putwordAppendix{} #1\hss}}
+%
+\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
+
+% Unnumbered chapters.
+\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
+\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
+
+% Sections.
+\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
+\let\appsecentry=\numsecentry
+\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
+
+% Subsections.
+\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsecentry=\numsubsecentry
+\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
+
+% And subsubsections.
+\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
+\let\appsubsubsecentry=\numsubsubsecentry
+\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
+
+% This parameter controls the indentation of the various levels.
+% Same as \defaultparindent.
+\newdimen\tocindent \tocindent = 15pt
+
+% Now for the actual typesetting. In all these, #1 is the text and #2 is the
+% page number.
+%
+% If the toc has to be broken over pages, we want it to be at chapters
+% if at all possible; hence the \penalty.
+\def\dochapentry#1#2{%
+ \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
+ \begingroup
+ \chapentryfonts
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+ \endgroup
+ \nobreak\vskip .25\baselineskip plus.1\baselineskip
+}
+
+\def\dosecentry#1#2{\begingroup
+ \secentryfonts \leftskip=\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsecentry#1#2{\begingroup
+ \subsecentryfonts \leftskip=2\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+\def\dosubsubsecentry#1#2{\begingroup
+ \subsubsecentryfonts \leftskip=3\tocindent
+ \tocentry{#1}{\dopageno\bgroup#2\egroup}%
+\endgroup}
+
+% We use the same \entry macro as for the index entries.
+\let\tocentry = \entry
+
+% Space between chapter (or whatever) number and the title.
+\def\labelspace{\hskip1em \relax}
+
+\def\dopageno#1{{\rm #1}}
+\def\doshortpageno#1{{\rm #1}}
+
+\def\chapentryfonts{\secfonts \rm}
+\def\secentryfonts{\textfonts}
+\def\subsecentryfonts{\textfonts}
+\def\subsubsecentryfonts{\textfonts}
+
+
+\message{environments,}
+% @foo ... @end foo.
+
+% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
+%
+% Since these characters are used in examples, it should be an even number of
+% \tt widths. Each \tt character is 1en, so two makes it 1em.
+%
+\def\point{$\star$}
+\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
+\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}}
+\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
+\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}}
+
+% The @error{} command.
+% Adapted from the TeXbook's \boxit.
+%
+\newbox\errorbox
+%
+{\tentt \global\dimen0 = 3em}% Width of the box.
+\dimen2 = .55pt % Thickness of rules
+% The text. (`r' is open on the right, `e' somewhat less so on the left.)
+\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt}
+%
+\setbox\errorbox=\hbox to \dimen0{\hfil
+ \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
+ \advance\hsize by -2\dimen2 % Rules.
+ \vbox{%
+ \hrule height\dimen2
+ \hbox{\vrule width\dimen2 \kern3pt % Space to left of text.
+ \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
+ \kern3pt\vrule width\dimen2}% Space to right.
+ \hrule height\dimen2}
+ \hfil}
+%
+\def\error{\leavevmode\lower.7ex\copy\errorbox}
+
+% @tex ... @end tex escapes into raw Tex temporarily.
+% One exception: @ is still an escape character, so that @end tex works.
+% But \@ or @@ will get a plain tex @ character.
+
+\envdef\tex{%
+ \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
+ \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
+ \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
+ \catcode `\%=14
+ \catcode `\+=\other
+ \catcode `\"=\other
+ \catcode `\|=\other
+ \catcode `\<=\other
+ \catcode `\>=\other
+ \escapechar=`\\
+ %
+ \let\b=\ptexb
+ \let\bullet=\ptexbullet
+ \let\c=\ptexc
+ \let\,=\ptexcomma
+ \let\.=\ptexdot
+ \let\dots=\ptexdots
+ \let\equiv=\ptexequiv
+ \let\!=\ptexexclam
+ \let\i=\ptexi
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \let\{=\ptexlbrace
+ \let\+=\tabalign
+ \let\}=\ptexrbrace
+ \let\/=\ptexslash
+ \let\*=\ptexstar
+ \let\t=\ptext
+ %
+ \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+ \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
+ \def\@{@}%
+}
+% There is no need to define \Etex.
+
+% Define @lisp ... @end lisp.
+% @lisp environment forms a group so it can rebind things,
+% including the definition of @end lisp (which normally is erroneous).
+
+% Amount to narrow the margins by for @lisp.
+\newskip\lispnarrowing \lispnarrowing=0.4in
+
+% This is the definition that ^^M gets inside @lisp, @example, and other
+% such environments. \null is better than a space, since it doesn't
+% have any width.
+\def\lisppar{\null\endgraf}
+
+% This space is always present above and below environments.
+\newskip\envskipamount \envskipamount = 0pt
+
+% Make spacing and below environment symmetrical. We use \parskip here
+% to help in doing that, since in @example-like environments \parskip
+% is reset to zero; thus the \afterenvbreak inserts no space -- but the
+% start of the next paragraph will insert \parskip.
+%
+\def\aboveenvbreak{{%
+ % =10000 instead of <10000 because of a special case in \itemzzz and
+ % \sectionheading, q.v.
+ \ifnum \lastpenalty=10000 \else
+ \advance\envskipamount by \parskip
+ \endgraf
+ \ifdim\lastskip<\envskipamount
+ \removelastskip
+ % it's not a good place to break if the last penalty was \nobreak
+ % or better ...
+ \ifnum\lastpenalty<10000 \penalty-50 \fi
+ \vskip\envskipamount
+ \fi
+ \fi
+}}
+
+\let\afterenvbreak = \aboveenvbreak
+
+% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins.
+\let\nonarrowing=\relax
+
+% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
+% environment contents.
+\font\circle=lcircle10
+\newdimen\circthick
+\newdimen\cartouter\newdimen\cartinner
+\newskip\normbskip\newskip\normpskip\newskip\normlskip
+\circthick=\fontdimen8\circle
+%
+\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
+\def\ctr{{\hskip 6pt\circle\char'010}}
+\def\cbl{{\circle\char'012\hskip -6pt}}
+\def\cbr{{\hskip 6pt\circle\char'011}}
+\def\carttop{\hbox to \cartouter{\hskip\lskip
+ \ctl\leaders\hrule height\circthick\hfil\ctr
+ \hskip\rskip}}
+\def\cartbot{\hbox to \cartouter{\hskip\lskip
+ \cbl\leaders\hrule height\circthick\hfil\cbr
+ \hskip\rskip}}
+%
+\newskip\lskip\newskip\rskip
+
+\envdef\cartouche{%
+ \ifhmode\par\fi % can't be in the midst of a paragraph.
+ \startsavinginserts
+ \lskip=\leftskip \rskip=\rightskip
+ \leftskip=0pt\rightskip=0pt % we want these *outside*.
+ \cartinner=\hsize \advance\cartinner by-\lskip
+ \advance\cartinner by-\rskip
+ \cartouter=\hsize
+ \advance\cartouter by 18.4pt % allow for 3pt kerns on either
+ % side, and for 6pt waste from
+ % each corner char, and rule thickness
+ \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+ % Flag to tell @lisp, etc., not to narrow margin.
+ \let\nonarrowing=\comment
+ \vbox\bgroup
+ \baselineskip=0pt\parskip=0pt\lineskip=0pt
+ \carttop
+ \hbox\bgroup
+ \hskip\lskip
+ \vrule\kern3pt
+ \vbox\bgroup
+ \kern3pt
+ \hsize=\cartinner
+ \baselineskip=\normbskip
+ \lineskip=\normlskip
+ \parskip=\normpskip
+ \vskip -\parskip
+ \comment % For explanation, see the end of \def\group.
+}
+\def\Ecartouche{%
+ \ifhmode\par\fi
+ \kern3pt
+ \egroup
+ \kern3pt\vrule
+ \hskip\rskip
+ \egroup
+ \cartbot
+ \egroup
+ \checkinserts
+}
+
+
+% This macro is called at the beginning of all the @example variants,
+% inside a group.
+\def\nonfillstart{%
+ \aboveenvbreak
+ \hfuzz = 12pt % Don't be fussy
+ \sepspaces % Make spaces be word-separators rather than space tokens.
+ \let\par = \lisppar % don't ignore blank lines
+ \obeylines % each line of input is a line of output
+ \parskip = 0pt
+ \parindent = 0pt
+ \emergencystretch = 0pt % don't try to avoid overfull boxes
+ % @cartouche defines \nonarrowing to inhibit narrowing
+ % at next level down.
+ \ifx\nonarrowing\relax
+ \advance \leftskip by \lispnarrowing
+ \exdentamount=\lispnarrowing
+ \fi
+ \let\exdent=\nofillexdent
+}
+
+% If you want all examples etc. small: @set dispenvsize small.
+% If you want even small examples the full size: @set dispenvsize nosmall.
+% This affects the following displayed environments:
+% @example, @display, @format, @lisp
+%
+\def\smallword{small}
+\def\nosmallword{nosmall}
+\let\SETdispenvsize\relax
+\def\setnormaldispenv{%
+ \ifx\SETdispenvsize\smallword
+ \smallexamplefonts \rm
+ \fi
+}
+\def\setsmalldispenv{%
+ \ifx\SETdispenvsize\nosmallword
+ \else
+ \smallexamplefonts \rm
+ \fi
+}
+
+% We often define two environments, @foo and @smallfoo.
+% Let's do it by one command:
+\def\makedispenv #1#2{
+ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}
+ \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}
+ \expandafter\let\csname E#1\endcsname \afterenvbreak
+ \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
+}
+
+% Define two synonyms:
+\def\maketwodispenvs #1#2#3{
+ \makedispenv{#1}{#3}
+ \makedispenv{#2}{#3}
+}
+
+% @lisp: indented, narrowed, typewriter font; @example: same as @lisp.
+%
+% @smallexample and @smalllisp: use smaller fonts.
+% Originally contributed by Pavel@xerox.
+%
+\maketwodispenvs {lisp}{example}{%
+ \nonfillstart
+ \tt
+ \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
+ \gobble % eat return
+}
+
+% @display/@smalldisplay: same as @lisp except keep current font.
+%
+\makedispenv {display}{%
+ \nonfillstart
+ \gobble
+}
+
+% @format/@smallformat: same as @display except don't narrow margins.
+%
+\makedispenv{format}{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+
+% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
+\envdef\flushleft{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \gobble
+}
+\let\Eflushleft = \afterenvbreak
+
+% @flushright.
+%
+\envdef\flushright{%
+ \let\nonarrowing = t%
+ \nonfillstart
+ \advance\leftskip by 0pt plus 1fill
+ \gobble
+}
+\let\Eflushright = \afterenvbreak
+
+
+% @quotation does normal linebreaking (hence we can't use \nonfillstart)
+% and narrows the margins. We keep \parskip nonzero in general, since
+% we're doing normal filling. So, when using \aboveenvbreak and
+% \afterenvbreak, temporarily make \parskip 0.
+%
+\envdef\quotation{%
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+ \parindent=0pt
+ %
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
+ \ifx\nonarrowing\relax
+ \advance\leftskip by \lispnarrowing
+ \advance\rightskip by \lispnarrowing
+ \exdentamount = \lispnarrowing
+ \let\nonarrowing = \relax
+ \fi
+ \parsearg\quotationlabel
+}
+
+% We have retained a nonzero parskip for the environment, since we're
+% doing normal filling.
+%
+\def\Equotation{%
+ \par
+ \ifx\quotationauthor\undefined\else
+ % indent a bit.
+ \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
+ \fi
+ {\parskip=0pt \afterenvbreak}%
+}
+
+% If we're given an argument, typeset it in bold with a colon after.
+\def\quotationlabel#1{%
+ \def\temp{#1}%
+ \ifx\temp\empty \else
+ {\bf #1: }%
+ \fi
+}
+
+
+% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+% If we want to allow any <char> as delimiter,
+% we need the curly braces so that makeinfo sees the @verb command, eg:
+% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org
+%
+% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook.
+%
+% [Knuth] p.344; only we need to do the other characters Texinfo sets
+% active too. Otherwise, they get lost as the first character on a
+% verbatim line.
+\def\dospecials{%
+ \do\ \do\\\do\{\do\}\do\$\do\&%
+ \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
+ \do\<\do\>\do\|\do\@\do+\do\"%
+}
+%
+% [Knuth] p. 380
+\def\uncatcodespecials{%
+ \def\do##1{\catcode`##1=\other}\dospecials}
+%
+% [Knuth] pp. 380,381,391
+% Disable Spanish ligatures ?` and !` of \tt font
+\begingroup
+ \catcode`\`=\active\gdef`{\relax\lq}
+\endgroup
+%
+% Setup for the @verb command.
+%
+% Eight spaces for a tab
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
+\endgroup
+%
+\def\setupverb{%
+ \tt % easiest (and conventionally used) font for verbatim
+ \def\par{\leavevmode\endgraf}%
+ \catcode`\`=\active
+ \tabeightspaces
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+}
+
+% Setup for the @verbatim environment
+%
+% Real tab expansion
+\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
+%
+\def\starttabbox{\setbox0=\hbox\bgroup}
+\begingroup
+ \catcode`\^^I=\active
+ \gdef\tabexpand{%
+ \catcode`\^^I=\active
+ \def^^I{\leavevmode\egroup
+ \dimen0=\wd0 % the width so far, or since the previous tab
+ \divide\dimen0 by\tabw
+ \multiply\dimen0 by\tabw % compute previous multiple of \tabw
+ \advance\dimen0 by\tabw % advance to next multiple of \tabw
+ \wd0=\dimen0 \box0 \starttabbox
+ }%
+ }
+\endgroup
+\def\setupverbatim{%
+ \nonfillstart
+ \advance\leftskip by -\defbodyindent
+ % Easiest (and conventionally used) font for verbatim
+ \tt
+ \def\par{\leavevmode\egroup\box0\endgraf}%
+ \catcode`\`=\active
+ \tabexpand
+ % Respect line breaks,
+ % print special symbols as themselves, and
+ % make each space count
+ % must do in this order:
+ \obeylines \uncatcodespecials \sepspaces
+ \everypar{\starttabbox}%
+}
+
+% Do the @verb magic: verbatim text is quoted by unique
+% delimiter characters. Before first delimiter expect a
+% right brace, after last delimiter expect closing brace:
+%
+% \def\doverb'{'<char>#1<char>'}'{#1}
+%
+% [Knuth] p. 382; only eat outer {}
+\begingroup
+ \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
+ \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
+\endgroup
+%
+\def\verb{\begingroup\setupverb\doverb}
+%
+%
+% Do the @verbatim magic: define the macro \doverbatim so that
+% the (first) argument ends when '@end verbatim' is reached, ie:
+%
+% \def\doverbatim#1@end verbatim{#1}
+%
+% For Texinfo it's a lot easier than for LaTeX,
+% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
+% we need not redefine '\', '{' and '}'.
+%
+% Inspired by LaTeX's verbatim command set [latex.ltx]
+%
+\begingroup
+ \catcode`\ =\active
+ \obeylines %
+ % ignore everything up to the first ^^M, that's the newline at the end
+ % of the @verbatim input line itself. Otherwise we get an extra blank
+ % line in the output.
+ \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
+ % We really want {...\end verbatim} in the body of the macro, but
+ % without the active space; thus we have to use \xdef and \gobble.
+\endgroup
+%
+\envdef\verbatim{%
+ \setupverbatim\doverbatim
+}
+\let\Everbatim = \afterenvbreak
+
+
+% @verbatiminclude FILE - insert text of file in verbatim environment.
+%
+\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
+%
+\def\doverbatiminclude#1{%
+ {%
+ \makevalueexpandable
+ \setupverbatim
+ \input #1
+ \afterenvbreak
+ }%
+}
+
+% @copying ... @end copying.
+% Save the text away for @insertcopying later.
+%
+% We save the uninterpreted tokens, rather than creating a box.
+% Saving the text in a box would be much easier, but then all the
+% typesetting commands (@smallbook, font changes, etc.) have to be done
+% beforehand -- and a) we want @copying to be done first in the source
+% file; b) letting users define the frontmatter in as flexible order as
+% possible is very desirable.
+%
+\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
+\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
+%
+\def\insertcopying{%
+ \begingroup
+ \parindent = 0pt % paragraph indentation looks wrong on title page
+ \scanexp\copyingtext
+ \endgroup
+}
+
+\message{defuns,}
+% @defun etc.
+
+\newskip\defbodyindent \defbodyindent=.4in
+\newskip\defargsindent \defargsindent=50pt
+\newskip\deflastargmargin \deflastargmargin=18pt
+
+% Start the processing of @deffn:
+\def\startdefun{%
+ \ifnum\lastpenalty<10000
+ \medbreak
+ \else
+ % If there are two @def commands in a row, we'll have a \nobreak,
+ % which is there to keep the function description together with its
+ % header. But if there's nothing but headers, we need to allow a
+ % break somewhere. Check specifically for penalty 10002, inserted
+ % by \defargscommonending, instead of 10000, since the sectioning
+ % commands also insert a nobreak penalty, and we don't want to allow
+ % a break between a section heading and a defun.
+ %
+ \ifnum\lastpenalty=10002 \penalty2000 \fi
+ %
+ % Similarly, after a section heading, do not allow a break.
+ % But do insert the glue.
+ \medskip % preceded by discardable penalty, so not a breakpoint
+ \fi
+ %
+ \parindent=0in
+ \advance\leftskip by \defbodyindent
+ \exdentamount=\defbodyindent
+}
+
+\def\dodefunx#1{%
+ % First, check whether we are in the right environment:
+ \checkenv#1%
+ %
+ % As above, allow line break if we have multiple x headers in a row.
+ % It's not a great place, though.
+ \ifnum\lastpenalty=10002 \penalty3000 \fi
+ %
+ % And now, it's time to reuse the body of the original defun:
+ \expandafter\gobbledefun#1%
+}
+\def\gobbledefun#1\startdefun{}
+
+% \printdefunline \deffnheader{text}
+%
+\def\printdefunline#1#2{%
+ \begingroup
+ % call \deffnheader:
+ #1#2 \endheader
+ % common ending:
+ \interlinepenalty = 10000
+ \advance\rightskip by 0pt plus 1fil
+ \endgraf
+ \nobreak\vskip -\parskip
+ \penalty 10002 % signal to \startdefun and \dodefunx
+ % Some of the @defun-type tags do not enable magic parentheses,
+ % rendering the following check redundant. But we don't optimize.
+ \checkparencounts
+ \endgroup
+}
+
+\def\Edefun{\endgraf\medbreak}
+
+% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
+% the only thing remainnig is to define \deffnheader.
+%
+\def\makedefun#1{%
+ \expandafter\let\csname E#1\endcsname = \Edefun
+ \edef\temp{\noexpand\domakedefun
+ \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
+ \temp
+}
+
+% \domakedefun \deffn \deffnx \deffnheader
+%
+% Define \deffn and \deffnx, without parameters.
+% \deffnheader has to be defined explicitly.
+%
+\def\domakedefun#1#2#3{%
+ \envdef#1{%
+ \startdefun
+ \parseargusing\activeparens{\printdefunline#3}%
+ }%
+ \def#2{\dodefunx#1}%
+ \def#3%
+}
+
+%%% Untyped functions:
+
+% @deffn category name args
+\makedefun{deffn}{\deffngeneral{}}
+
+% @deffn category class name args
+\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
+
+% \defopon {category on}class name args
+\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deffngeneral {subind}category name args
+%
+\def\deffngeneral#1#2 #3 #4\endheader{%
+ % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
+ \dosubind{fn}{\code{#3}}{#1}%
+ \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
+}
+
+%%% Typed functions:
+
+% @deftypefn category type name args
+\makedefun{deftypefn}{\deftypefngeneral{}}
+
+% @deftypeop category class type name args
+\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
+
+% \deftypeopon {category on}class type name args
+\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypefngeneral {subind}category type name args
+%
+\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{fn}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Typed variables:
+
+% @deftypevr category type var args
+\makedefun{deftypevr}{\deftypecvgeneral{}}
+
+% @deftypecv category class type var args
+\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
+
+% \deftypecvof {category of}class type var args
+\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
+
+% \deftypecvgeneral {subind}category type var args
+%
+\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
+ \dosubind{vr}{\code{#4}}{#1}%
+ \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
+}
+
+%%% Untyped variables:
+
+% @defvr category var args
+\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
+
+% @defcv category class var args
+\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
+
+% \defcvof {category of}class var args
+\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
+
+%%% Type:
+% @deftp category name args
+\makedefun{deftp}#1 #2 #3\endheader{%
+ \doind{tp}{\code{#2}}%
+ \defname{#1}{}{#2}\defunargs{#3\unskip}%
+}
+
+% Remaining @defun-like shortcuts:
+\makedefun{defun}{\deffnheader{\putwordDeffunc} }
+\makedefun{defmac}{\deffnheader{\putwordDefmac} }
+\makedefun{defspec}{\deffnheader{\putwordDefspec} }
+\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
+\makedefun{defvar}{\defvrheader{\putwordDefvar} }
+\makedefun{defopt}{\defvrheader{\putwordDefopt} }
+\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
+\makedefun{defmethod}{\defopon\putwordMethodon}
+\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
+\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
+\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
+
+% \defname, which formats the name of the @def (not the args).
+% #1 is the category, such as "Function".
+% #2 is the return type, if any.
+% #3 is the function name.
+%
+% We are followed by (but not passed) the arguments, if any.
+%
+\def\defname#1#2#3{%
+ % Get the values of \leftskip and \rightskip as they were outside the @def...
+ \advance\leftskip by -\defbodyindent
+ %
+ % How we'll format the type name. Putting it in brackets helps
+ % distinguish it from the body text that may end up on the next line
+ % just below it.
+ \def\temp{#1}%
+ \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
+ %
+ % Figure out line sizes for the paragraph shape.
+ % The first line needs space for \box0; but if \rightskip is nonzero,
+ % we need only space for the part of \box0 which exceeds it:
+ \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip
+ % The continuations:
+ \dimen2=\hsize \advance\dimen2 by -\defargsindent
+ % (plain.tex says that \dimen1 should be used only as global.)
+ \parshape 2 0in \dimen0 \defargsindent \dimen2
+ %
+ % Put the type name to the right margin.
+ \noindent
+ \hbox to 0pt{%
+ \hfil\box0 \kern-\hsize
+ % \hsize has to be shortened this way:
+ \kern\leftskip
+ % Intentionally do not respect \rightskip, since we need the space.
+ }%
+ %
+ % Allow all lines to be underfull without complaint:
+ \tolerance=10000 \hbadness=10000
+ \exdentamount=\defbodyindent
+ {%
+ % defun fonts. We use typewriter by default (used to be bold) because:
+ % . we're printing identifiers, they should be in tt in principle.
+ % . in languages with many accents, such as Czech or French, it's
+ % common to leave accents off identifiers. The result looks ok in
+ % tt, but exceedingly strange in rm.
+ % . we don't want -- and --- to be treated as ligatures.
+ % . this still does not fix the ?` and !` ligatures, but so far no
+ % one has made identifiers using them :).
+ \df \tt
+ \def\temp{#2}% return value type
+ \ifx\temp\empty\else \tclose{\temp} \fi
+ #3% output function name
+ }%
+ {\rm\enskip}% hskip 0.5 em of \tenrm
+ %
+ \boldbrax
+ % arguments will be output next, if any.
+}
+
+% Print arguments in slanted roman (not ttsl), inconsistently with using
+% tt for the name. This is because literal text is sometimes needed in
+% the argument list (groff manual), and ttsl and tt are not very
+% distinguishable. Prevent hyphenation at `-' chars.
+%
+\def\defunargs#1{%
+ % use sl by default (not ttsl),
+ % tt for the names.
+ \df \sl \hyphenchar\font=0
+ %
+ % On the other hand, if an argument has two dashes (for instance), we
+ % want a way to get ttsl. Let's try @var for that.
+ \let\var=\ttslanted
+ #1%
+ \sl\hyphenchar\font=45
+}
+
+% We want ()&[] to print specially on the defun line.
+%
+\def\activeparens{%
+ \catcode`\(=\active \catcode`\)=\active
+ \catcode`\[=\active \catcode`\]=\active
+ \catcode`\&=\active
+}
+
+% Make control sequences which act like normal parenthesis chars.
+\let\lparen = ( \let\rparen = )
+
+% Be sure that we always have a definition for `(', etc. For example,
+% if the fn name has parens in it, \boldbrax will not be in effect yet,
+% so TeX would otherwise complain about undefined control sequence.
+{
+ \activeparens
+ \global\let(=\lparen \global\let)=\rparen
+ \global\let[=\lbrack \global\let]=\rbrack
+ \global\let& = \&
+
+ \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
+ \gdef\magicamp{\let&=\amprm}
+}
+
+\newcount\parencount
+
+% If we encounter &foo, then turn on ()-hacking afterwards
+\newif\ifampseen
+\def\amprm#1 {\ampseentrue{\bf\&#1 }}
+
+\def\parenfont{%
+ \ifampseen
+ % At the first level, print parens in roman,
+ % otherwise use the default font.
+ \ifnum \parencount=1 \rm \fi
+ \else
+ % The \sf parens (in \boldbrax) actually are a little bolder than
+ % the contained text. This is especially needed for [ and ] .
+ \sf
+ \fi
+}
+\def\infirstlevel#1{%
+ \ifampseen
+ \ifnum\parencount=1
+ #1%
+ \fi
+ \fi
+}
+\def\bfafterword#1 {#1 \bf}
+
+\def\opnr{%
+ \global\advance\parencount by 1
+ {\parenfont(}%
+ \infirstlevel \bfafterword
+}
+\def\clnr{%
+ {\parenfont)}%
+ \infirstlevel \sl
+ \global\advance\parencount by -1
+}
+
+\newcount\brackcount
+\def\lbrb{%
+ \global\advance\brackcount by 1
+ {\bf[}%
+}
+\def\rbrb{%
+ {\bf]}%
+ \global\advance\brackcount by -1
+}
+
+\def\checkparencounts{%
+ \ifnum\parencount=0 \else \badparencount \fi
+ \ifnum\brackcount=0 \else \badbrackcount \fi
+}
+\def\badparencount{%
+ \errmessage{Unbalanced parentheses in @def}%
+ \global\parencount=0
+}
+\def\badbrackcount{%
+ \errmessage{Unbalanced square braces in @def}%
+ \global\brackcount=0
+}
+
+
+\message{macros,}
+% @macro.
+
+% To do this right we need a feature of e-TeX, \scantokens,
+% which we arrange to emulate with a temporary file in ordinary TeX.
+\ifx\eTeXversion\undefined
+ \newwrite\macscribble
+ \def\scantokens#1{%
+ \toks0={#1}%
+ \immediate\openout\macscribble=\jobname.tmp
+ \immediate\write\macscribble{\the\toks0}%
+ \immediate\closeout\macscribble
+ \input \jobname.tmp
+ }
+\fi
+
+\def\scanmacro#1{%
+ \begingroup
+ \newlinechar`\^^M
+ \let\xeatspaces\eatspaces
+ % Undo catcode changes of \startcontents and \doprintindex
+ % When called from @insertcopying or (short)caption, we need active
+ % backslash to get it printed correctly. Previously, we had
+ % \catcode`\\=\other instead. We'll see whether a problem appears
+ % with macro expansion. --kasal, 19aug04
+ \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
+ % ... and \example
+ \spaceisspace
+ %
+ % Append \endinput to make sure that TeX does not see the ending newline.
+ %
+ % I've verified that it is necessary both for e-TeX and for ordinary TeX
+ % --kasal, 29nov03
+ \scantokens{#1\endinput}%
+ \endgroup
+}
+
+\def\scanexp#1{%
+ \edef\temp{\noexpand\scanmacro{#1}}%
+ \temp
+}
+
+\newcount\paramno % Count of parameters
+\newtoks\macname % Macro name
+\newif\ifrecursive % Is it recursive?
+\def\macrolist{} % List of all defined macros in the form
+ % \do\macro1\do\macro2...
+
+% Utility routines.
+% This does \let #1 = #2, with \csnames; that is,
+% \let \csname#1\endcsname = \csname#2\endcsname
+% (except of course we have to play expansion games).
+%
+\def\cslet#1#2{%
+ \expandafter\let
+ \csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+% Trim leading and trailing spaces off a string.
+% Concepts from aro-bend problem 15 (see CTAN).
+{\catcode`\@=11
+\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
+\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
+\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
+\def\unbrace#1{#1}
+\unbrace{\gdef\trim@@@ #1 } #2@{#1}
+}
+
+% Trim a single trailing ^^M off a string.
+{\catcode`\^^M=\other \catcode`\Q=3%
+\gdef\eatcr #1{\eatcra #1Q^^MQ}%
+\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
+\gdef\eatcrb#1Q#2Q{#1}%
+}
+
+% Macro bodies are absorbed as an argument in a context where
+% all characters are catcode 10, 11 or 12, except \ which is active
+% (as in normal texinfo). It is necessary to change the definition of \.
+
+% It's necessary to have hard CRs when the macro is executed. This is
+% done by making ^^M (\endlinechar) catcode 12 when reading the macro
+% body, and then making it the \newlinechar in \scanmacro.
+
+\def\scanctxt{%
+ \catcode`\"=\other
+ \catcode`\+=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\@=\other
+ \catcode`\^=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\~=\other
+}
+
+\def\scanargctxt{%
+ \scanctxt
+ \catcode`\\=\other
+ \catcode`\^^M=\other
+}
+
+\def\macrobodyctxt{%
+ \scanctxt
+ \catcode`\{=\other
+ \catcode`\}=\other
+ \catcode`\^^M=\other
+ \usembodybackslash
+}
+
+\def\macroargctxt{%
+ \scanctxt
+ \catcode`\\=\other
+}
+
+% \mbodybackslash is the definition of \ in @macro bodies.
+% It maps \foo\ => \csname macarg.foo\endcsname => #N
+% where N is the macro parameter number.
+% We define \csname macarg.\endcsname to be \realbackslash, so
+% \\ in macro replacement text gets you a backslash.
+
+{\catcode`@=0 @catcode`@\=@active
+ @gdef@usembodybackslash{@let\=@mbodybackslash}
+ @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
+}
+\expandafter\def\csname macarg.\endcsname{\realbackslash}
+
+\def\macro{\recursivefalse\parsearg\macroxxx}
+\def\rmacro{\recursivetrue\parsearg\macroxxx}
+
+\def\macroxxx#1{%
+ \getargs{#1}% now \macname is the macname and \argl the arglist
+ \ifx\argl\empty % no arguments
+ \paramno=0%
+ \else
+ \expandafter\parsemargdef \argl;%
+ \fi
+ \if1\csname ismacro.\the\macname\endcsname
+ \message{Warning: redefining \the\macname}%
+ \else
+ \expandafter\ifx\csname \the\macname\endcsname \relax
+ \else \errmessage{Macro name \the\macname\space already defined}\fi
+ \global\cslet{macsave.\the\macname}{\the\macname}%
+ \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
+ % Add the macroname to \macrolist
+ \toks0 = \expandafter{\macrolist\do}%
+ \xdef\macrolist{\the\toks0
+ \expandafter\noexpand\csname\the\macname\endcsname}%
+ \fi
+ \begingroup \macrobodyctxt
+ \ifrecursive \expandafter\parsermacbody
+ \else \expandafter\parsemacbody
+ \fi}
+
+\parseargdef\unmacro{%
+ \if1\csname ismacro.#1\endcsname
+ \global\cslet{#1}{macsave.#1}%
+ \global\expandafter\let \csname ismacro.#1\endcsname=0%
+ % Remove the macro name from \macrolist:
+ \begingroup
+ \expandafter\let\csname#1\endcsname \relax
+ \let\do\unmacrodo
+ \xdef\macrolist{\macrolist}%
+ \endgroup
+ \else
+ \errmessage{Macro #1 not defined}%
+ \fi
+}
+
+% Called by \do from \dounmacro on each macro. The idea is to omit any
+% macro definitions that have been changed to \relax.
+%
+\def\unmacrodo#1{%
+ \ifx#1\relax
+ % remove this
+ \else
+ \noexpand\do \noexpand #1%
+ \fi
+}
+
+% This makes use of the obscure feature that if the last token of a
+% <parameter list> is #, then the preceding argument is delimited by
+% an opening brace, and that opening brace is not consumed.
+\def\getargs#1{\getargsxxx#1{}}
+\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
+\def\getmacname #1 #2\relax{\macname={#1}}
+\def\getmacargs#1{\def\argl{#1}}
+
+% Parse the optional {params} list. Set up \paramno and \paramlist
+% so \defmacro knows what to do. Define \macarg.blah for each blah
+% in the params list, to be ##N where N is the position in that list.
+% That gets used by \mbodybackslash (above).
+
+% We need to get `macro parameter char #' into several definitions.
+% The technique used is stolen from LaTeX: let \hash be something
+% unexpandable, insert that wherever you need a #, and then redefine
+% it to # just before using the token list produced.
+%
+% The same technique is used to protect \eatspaces till just before
+% the macro is used.
+
+\def\parsemargdef#1;{\paramno=0\def\paramlist{}%
+ \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,}
+\def\parsemargdefxxx#1,{%
+ \if#1;\let\next=\relax
+ \else \let\next=\parsemargdefxxx
+ \advance\paramno by 1%
+ \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
+ {\xeatspaces{\hash\the\paramno}}%
+ \edef\paramlist{\paramlist\hash\the\paramno,}%
+ \fi\next}
+
+% These two commands read recursive and nonrecursive macro bodies.
+% (They're different since rec and nonrec macros end differently.)
+
+\long\def\parsemacbody#1@end macro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+\long\def\parsermacbody#1@end rmacro%
+{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
+
+% This defines the macro itself. There are six cases: recursive and
+% nonrecursive macros of zero, one, and many arguments.
+% Much magic with \expandafter here.
+% \xdef is used so that macro definitions will survive the file
+% they're defined in; @include reads the file inside a group.
+\def\defmacro{%
+ \let\hash=##% convert placeholders to macro parameter chars
+ \ifrecursive
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\scanmacro{\temp}}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup\noexpand\scanmacro{\temp}}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{\egroup\noexpand\scanmacro{\temp}}%
+ \fi
+ \else
+ \ifcase\paramno
+ % 0
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \or % 1
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \noexpand\braceorline
+ \expandafter\noexpand\csname\the\macname xxx\endcsname}%
+ \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \else % many
+ \expandafter\xdef\csname\the\macname\endcsname{%
+ \bgroup\noexpand\macroargctxt
+ \expandafter\noexpand\csname\the\macname xx\endcsname}%
+ \expandafter\xdef\csname\the\macname xx\endcsname##1{%
+ \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
+ \expandafter\expandafter
+ \expandafter\xdef
+ \expandafter\expandafter
+ \csname\the\macname xxx\endcsname
+ \paramlist{%
+ \egroup
+ \noexpand\norecurse{\the\macname}%
+ \noexpand\scanmacro{\temp}\egroup}%
+ \fi
+ \fi}
+
+\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
+
+% \braceorline decides whether the next nonwhitespace character is a
+% {. If so it reads up to the closing }, if not, it reads the whole
+% line. Whatever was read is then fed to the next control sequence
+% as an argument (by \parsebrace or \parsearg)
+\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx}
+\def\braceorlinexxx{%
+ \ifx\nchar\bgroup\else
+ \expandafter\parsearg
+ \fi \next}
+
+% We want to disable all macros during \shipout so that they are not
+% expanded by \write.
+\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}%
+ \edef\next{\macrolist}\expandafter\endgroup\next}
+
+% For \indexnofonts, we need to get rid of all macros, leaving only the
+% arguments (if present). Of course this is not nearly correct, but it
+% is the best we can do for now. makeinfo does not expand macros in the
+% argument to @deffn, which ends up writing an index entry, and texindex
+% isn't prepared for an index sort entry that starts with \.
+%
+% Since macro invocations are followed by braces, we can just redefine them
+% to take a single TeX argument. The case of a macro invocation that
+% goes to end-of-line is not handled.
+%
+\def\emptyusermacros{\begingroup
+ \def\do##1{\let\noexpand##1=\noexpand\asis}%
+ \edef\next{\macrolist}\expandafter\endgroup\next}
+
+
+% @alias.
+% We need some trickery to remove the optional spaces around the equal
+% sign. Just make them active and then expand them all to nothing.
+\def\alias{\parseargusing\obeyspaces\aliasxxx}
+\def\aliasxxx #1{\aliasyyy#1\relax}
+\def\aliasyyy #1=#2\relax{%
+ {%
+ \expandafter\let\obeyedspace=\empty
+ \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
+ }%
+ \next
+}
+
+
+\message{cross references,}
+
+\newwrite\auxfile
+
+\newif\ifhavexrefs % True if xref values are known.
+\newif\ifwarnedxrefs % True if we warned once that they aren't known.
+
+% @inforef is relatively simple.
+\def\inforef #1{\inforefzzz #1,,,,**}
+\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
+ node \samp{\ignorespaces#1{}}}
+
+% @node's only job in TeX is to define \lastnode, which is used in
+% cross-references. The @node line might or might not have commas, and
+% might or might not have spaces before the first comma, like:
+% @node foo , bar , ...
+% We don't want such trailing spaces in the node name.
+%
+\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
+%
+% also remove a trailing comma, in case of something like this:
+% @node Help-Cross, , , Cross-refs
+\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
+\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
+
+\let\nwnode=\node
+\let\lastnode=\empty
+
+% Write a cross-reference definition for the current node. #1 is the
+% type (Ynumbered, Yappendix, Ynothing).
+%
+\def\donoderef#1{%
+ \ifx\lastnode\empty\else
+ \setref{\lastnode}{#1}%
+ \global\let\lastnode=\empty
+ \fi
+}
+
+% @anchor{NAME} -- define xref target at arbitrary point.
+%
+\newcount\savesfregister
+%
+\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
+\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
+\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
+
+% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
+% anchor), which consists of three parts:
+% 1) NAME-title - the current sectioning name taken from \thissection,
+% or the anchor name.
+% 2) NAME-snt - section number and type, passed as the SNT arg, or
+% empty for anchors.
+% 3) NAME-pg - the page number.
+%
+% This is called from \donoderef, \anchor, and \dofloat. In the case of
+% floats, there is an additional part, which is not written here:
+% 4) NAME-lof - the text as it should appear in a @listoffloats.
+%
+\def\setref#1#2{%
+ \pdfmkdest{#1}%
+ \iflinks
+ {%
+ \atdummies % preserve commands, but don't expand them
+ \turnoffactive
+ \otherbackslash
+ \edef\writexrdef##1##2{%
+ \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
+ ##1}{##2}}% these are parameters of \writexrdef
+ }%
+ \toks0 = \expandafter{\thissection}%
+ \immediate \writexrdef{title}{\the\toks0 }%
+ \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
+ \writexrdef{pg}{\folio}% will be written later, during \shipout
+ }%
+ \fi
+}
+
+% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is
+% the node name, #2 the name of the Info cross-reference, #3 the printed
+% node name, #4 the name of the Info file, #5 the name of the printed
+% manual. All but the node name can be omitted.
+%
+\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
+\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+\def\ref#1{\xrefX[#1,,,,,,,]}
+\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+ \unsepspaces
+ \def\printedmanual{\ignorespaces #5}%
+ \def\printedrefname{\ignorespaces #3}%
+ \setbox1=\hbox{\printedmanual\unskip}%
+ \setbox0=\hbox{\printedrefname\unskip}%
+ \ifdim \wd0 = 0pt
+ % No printed node name was explicitly given.
+ \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax
+ % Use the node name inside the square brackets.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ % Use the actual chapter/section title appear inside
+ % the square brackets. Use the real section title if we have it.
+ \ifdim \wd1 > 0pt
+ % It is in another manual, so we don't have it.
+ \def\printedrefname{\ignorespaces #1}%
+ \else
+ \ifhavexrefs
+ % We know the real title if we have the xref values.
+ \def\printedrefname{\refx{#1-title}{}}%
+ \else
+ % Otherwise just copy the Info node name.
+ \def\printedrefname{\ignorespaces #1}%
+ \fi%
+ \fi
+ \fi
+ \fi
+ %
+ % Make link in pdf output.
+ \ifpdf
+ \leavevmode
+ \getfilename{#4}%
+ {\turnoffactive \otherbackslash
+ \ifnum\filenamelength>0
+ \startlink attr{/Border [0 0 0]}%
+ goto file{\the\filename.pdf} name{#1}%
+ \else
+ \startlink attr{/Border [0 0 0]}%
+ goto name{\pdfmkpgn{#1}}%
+ \fi
+ }%
+ \linkcolor
+ \fi
+ %
+ % Float references are printed completely differently: "Figure 1.2"
+ % instead of "[somenode], p.3". We distinguish them by the
+ % LABEL-title being set to a magic string.
+ {%
+ % Have to otherify everything special to allow the \csname to
+ % include an _ in the xref name, etc.
+ \indexnofonts
+ \turnoffactive
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\Xthisreftitle
+ \csname XR#1-title\endcsname
+ }%
+ \iffloat\Xthisreftitle
+ % If the user specified the print name (third arg) to the ref,
+ % print it instead of our usual "Figure 1.2".
+ \ifdim\wd0 = 0pt
+ \refx{#1-snt}%
+ \else
+ \printedrefname
+ \fi
+ %
+ % if the user also gave the printed manual name (fifth arg), append
+ % "in MANUALNAME".
+ \ifdim \wd1 > 0pt
+ \space \putwordin{} \cite{\printedmanual}%
+ \fi
+ \else
+ % node/anchor (non-float) references.
+ %
+ % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not
+ % insert empty discretionaries after hyphens, which means that it will
+ % not find a line break at a hyphen in a node names. Since some manuals
+ % are best written with fairly long node names, containing hyphens, this
+ % is a loss. Therefore, we give the text of the node name again, so it
+ % is as if TeX is seeing it for the first time.
+ \ifdim \wd1 > 0pt
+ \putwordsection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}%
+ \else
+ % _ (for example) has to be the character _ for the purposes of the
+ % control sequence corresponding to the node, but it has to expand
+ % into the usual \leavevmode...\vrule stuff for purposes of
+ % printing. So we \turnoffactive for the \refx-snt, back on for the
+ % printing, back off for the \refx-pg.
+ {\turnoffactive \otherbackslash
+ % Only output a following space if the -snt ref is nonempty; for
+ % @unnumbered and @anchor, it won't be.
+ \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
+ \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
+ }%
+ % output the `[mynode]' via a macro so it can be overridden.
+ \xrefprintnodename\printedrefname
+ %
+ % But we always want a comma and a space:
+ ,\space
+ %
+ % output the `page 3'.
+ \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}%
+ \fi
+ \fi
+ \endlink
+\endgroup}
+
+% This macro is called from \xrefX for the `[nodename]' part of xref
+% output. It's a separate macro only so it can be changed more easily,
+% since square brackets don't work well in some documents. Particularly
+% one that Bob is working on :).
+%
+\def\xrefprintnodename#1{[#1]}
+
+% Things referred to by \setref.
+%
+\def\Ynothing{}
+\def\Yomitfromtoc{}
+\def\Ynumbered{%
+ \ifnum\secno=0
+ \putwordChapter@tie \the\chapno
+ \else \ifnum\subsecno=0
+ \putwordSection@tie \the\chapno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+\def\Yappendix{%
+ \ifnum\secno=0
+ \putwordAppendix@tie @char\the\appendixno{}%
+ \else \ifnum\subsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno
+ \else \ifnum\subsubsecno=0
+ \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
+ \else
+ \putwordSection@tie
+ @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
+ \fi\fi\fi
+}
+
+% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
+% If its value is nonempty, SUFFIX is output afterward.
+%
+\def\refx#1#2{%
+ {%
+ \indexnofonts
+ \otherbackslash
+ \expandafter\global\expandafter\let\expandafter\thisrefX
+ \csname XR#1\endcsname
+ }%
+ \ifx\thisrefX\relax
+ % If not defined, say something at least.
+ \angleleft un\-de\-fined\angleright
+ \iflinks
+ \ifhavexrefs
+ \message{\linenumber Undefined cross reference `#1'.}%
+ \else
+ \ifwarnedxrefs\else
+ \global\warnedxrefstrue
+ \message{Cross reference values unknown; you must run TeX again.}%
+ \fi
+ \fi
+ \fi
+ \else
+ % It's defined, so just use it.
+ \thisrefX
+ \fi
+ #2% Output the suffix in any case.
+}
+
+% This is the macro invoked by entries in the aux file. Usually it's
+% just a \def (we prepend XR to the control sequence name to avoid
+% collisions). But if this is a float type, we have more work to do.
+%
+\def\xrdef#1#2{%
+ \expandafter\gdef\csname XR#1\endcsname{#2}% remember this xref value.
+ %
+ % Was that xref control sequence that we just defined for a float?
+ \expandafter\iffloat\csname XR#1\endcsname
+ % it was a float, and we have the (safe) float type in \iffloattype.
+ \expandafter\let\expandafter\floatlist
+ \csname floatlist\iffloattype\endcsname
+ %
+ % Is this the first time we've seen this float type?
+ \expandafter\ifx\floatlist\relax
+ \toks0 = {\do}% yes, so just \do
+ \else
+ % had it before, so preserve previous elements in list.
+ \toks0 = \expandafter{\floatlist\do}%
+ \fi
+ %
+ % Remember this xref in the control sequence \floatlistFLOATTYPE,
+ % for later use in \listoffloats.
+ \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0{#1}}%
+ \fi
+}
+
+% Read the last existing aux file, if any. No error if none exists.
+%
+\def\tryauxfile{%
+ \openin 1 \jobname.aux
+ \ifeof 1 \else
+ \readauxfile
+ \global\havexrefstrue
+ \fi
+ \closein 1
+}
+
+\def\readauxfile{\begingroup
+ \catcode`\^^@=\other
+ \catcode`\^^A=\other
+ \catcode`\^^B=\other
+ \catcode`\^^C=\other
+ \catcode`\^^D=\other
+ \catcode`\^^E=\other
+ \catcode`\^^F=\other
+ \catcode`\^^G=\other
+ \catcode`\^^H=\other
+ \catcode`\^^K=\other
+ \catcode`\^^L=\other
+ \catcode`\^^N=\other
+ \catcode`\^^P=\other
+ \catcode`\^^Q=\other
+ \catcode`\^^R=\other
+ \catcode`\^^S=\other
+ \catcode`\^^T=\other
+ \catcode`\^^U=\other
+ \catcode`\^^V=\other
+ \catcode`\^^W=\other
+ \catcode`\^^X=\other
+ \catcode`\^^Z=\other
+ \catcode`\^^[=\other
+ \catcode`\^^\=\other
+ \catcode`\^^]=\other
+ \catcode`\^^^=\other
+ \catcode`\^^_=\other
+ % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
+ % in xref tags, i.e., node names. But since ^^e4 notation isn't
+ % supported in the main text, it doesn't seem desirable. Furthermore,
+ % that is not enough: for node names that actually contain a ^
+ % character, we would end up writing a line like this: 'xrdef {'hat
+ % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
+ % argument, and \hat is not an expandable control sequence. It could
+ % all be worked out, but why? Either we support ^^ or we don't.
+ %
+ % The other change necessary for this was to define \auxhat:
+ % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
+ % and then to call \auxhat in \setq.
+ %
+ \catcode`\^=\other
+ %
+ % Special characters. Should be turned off anyway, but...
+ \catcode`\~=\other
+ \catcode`\[=\other
+ \catcode`\]=\other
+ \catcode`\"=\other
+ \catcode`\_=\other
+ \catcode`\|=\other
+ \catcode`\<=\other
+ \catcode`\>=\other
+ \catcode`\$=\other
+ \catcode`\#=\other
+ \catcode`\&=\other
+ \catcode`\%=\other
+ \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
+ %
+ % This is to support \ in node names and titles, since the \
+ % characters end up in a \csname. It's easier than
+ % leaving it active and making its active definition an actual \
+ % character. What I don't understand is why it works in the *value*
+ % of the xrdef. Seems like it should be a catcode12 \, and that
+ % should not typeset properly. But it works, so I'm moving on for
+ % now. --karl, 15jan04.
+ \catcode`\\=\other
+ %
+ % Make the characters 128-255 be printing characters.
+ {%
+ \count 1=128
+ \def\loop{%
+ \catcode\count 1=\other
+ \advance\count 1 by 1
+ \ifnum \count 1<256 \loop \fi
+ }%
+ }%
+ %
+ % @ is our escape character in .aux files, and we need braces.
+ \catcode`\{=1
+ \catcode`\}=2
+ \catcode`\@=0
+ %
+ \input \jobname.aux
+\endgroup}
+
+
+\message{insertions,}
+% including footnotes.
+
+\newcount \footnoteno
+
+% The trailing space in the following definition for supereject is
+% vital for proper filling; pages come out unaligned when you do a
+% pagealignmacro call if that space before the closing brace is
+% removed. (Generally, numeric constants should always be followed by a
+% space to prevent strange expansion errors.)
+\def\supereject{\par\penalty -20000\footnoteno =0 }
+
+% @footnotestyle is meaningful for info output only.
+\let\footnotestyle=\comment
+
+{\catcode `\@=11
+%
+% Auto-number footnotes. Otherwise like plain.
+\gdef\footnote{%
+ \let\indent=\ptexindent
+ \let\noindent=\ptexnoindent
+ \global\advance\footnoteno by \@ne
+ \edef\thisfootno{$^{\the\footnoteno}$}%
+ %
+ % In case the footnote comes at the end of a sentence, preserve the
+ % extra spacing after we do the footnote number.
+ \let\@sf\empty
+ \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
+ %
+ % Remove inadvertent blank space before typesetting the footnote number.
+ \unskip
+ \thisfootno\@sf
+ \dofootnote
+}%
+
+% Don't bother with the trickery in plain.tex to not require the
+% footnote text as a parameter. Our footnotes don't need to be so general.
+%
+% Oh yes, they do; otherwise, @ifset (and anything else that uses
+% \parseargline) fails inside footnotes because the tokens are fixed when
+% the footnote is read. --karl, 16nov96.
+%
+\gdef\dofootnote{%
+ \insert\footins\bgroup
+ % We want to typeset this text as a normal paragraph, even if the
+ % footnote reference occurs in (for example) a display environment.
+ % So reset some parameters.
+ \hsize=\pagewidth
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\ht\strutbox % top baseline for broken footnotes
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty\@MM
+ \leftskip\z@skip
+ \rightskip\z@skip
+ \spaceskip\z@skip
+ \xspaceskip\z@skip
+ \parindent\defaultparindent
+ %
+ \smallfonts \rm
+ %
+ % Because we use hanging indentation in footnotes, a @noindent appears
+ % to exdent this text, so make it be a no-op. makeinfo does not use
+ % hanging indentation so @noindent can still be needed within footnote
+ % text after an @example or the like (not that this is good style).
+ \let\noindent = \relax
+ %
+ % Hang the footnote text off the number. Use \everypar in case the
+ % footnote extends for more than one paragraph.
+ \everypar = {\hang}%
+ \textindent{\thisfootno}%
+ %
+ % Don't crash into the line above the footnote text. Since this
+ % expands into a box, it must come within the paragraph, lest it
+ % provide a place where TeX can split the footnote.
+ \footstrut
+ \futurelet\next\fo@t
+}
+}%end \catcode `\@=11
+
+% In case a @footnote appears in a vbox, save the footnote text and create
+% the real \insert just after the vbox finished. Otherwise, the insertion
+% would be lost.
+% Similarily, if a @footnote appears inside an alignment, save the footnote
+% text to a box and make the \insert when a row of the table is finished.
+% And the same can be done for other insert classes. --kasal, 16nov03.
+
+% Replace the \insert primitive by a cheating macro.
+% Deeper inside, just make sure that the saved insertions are not spilled
+% out prematurely.
+%
+\def\startsavinginserts{%
+ \ifx \insert\ptexinsert
+ \let\insert\saveinsert
+ \else
+ \let\checkinserts\relax
+ \fi
+}
+
+% This \insert replacement works for both \insert\footins{foo} and
+% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
+%
+\def\saveinsert#1{%
+ \edef\next{\noexpand\savetobox \makeSAVEname#1}%
+ \afterassignment\next
+ % swallow the left brace
+ \let\temp =
+}
+\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
+\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
+
+\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
+
+\def\placesaveins#1{%
+ \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
+ {\box#1}%
+}
+
+% eat @SAVE -- beware, all of them have catcode \other:
+{
+ \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-)
+ \gdef\gobblesave @SAVE{}
+}
+
+% initialization:
+\def\newsaveins #1{%
+ \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
+ \next
+}
+\def\newsaveinsX #1{%
+ \csname newbox\endcsname #1%
+ \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
+ \checksaveins #1}%
+}
+
+% initialize:
+\let\checkinserts\empty
+\newsaveins\footins
+\newsaveins\margin
+
+
+% @image. We use the macros from epsf.tex to support this.
+% If epsf.tex is not installed and @image is used, we complain.
+%
+% Check for and read epsf.tex up front. If we read it only at @image
+% time, we might be inside a group, and then its definitions would get
+% undone and the next image would fail.
+\openin 1 = epsf.tex
+\ifeof 1 \else
+ % Do not bother showing banner with epsf.tex v2.7k (available in
+ % doc/epsf.tex and on ctan).
+ \def\epsfannounce{\toks0 = }%
+ \input epsf.tex
+\fi
+\closein 1
+%
+% We will only complain once about lack of epsf.tex.
+\newif\ifwarnednoepsf
+\newhelp\noepsfhelp{epsf.tex must be installed for images to
+ work. It is also included in the Texinfo distribution, or you can get
+ it from ftp://tug.org/tex/epsf.tex.}
+%
+\def\image#1{%
+ \ifx\epsfbox\undefined
+ \ifwarnednoepsf \else
+ \errhelp = \noepsfhelp
+ \errmessage{epsf.tex not found, images will be ignored}%
+ \global\warnednoepsftrue
+ \fi
+ \else
+ \imagexxx #1,,,,,\finish
+ \fi
+}
+%
+% Arguments to @image:
+% #1 is (mandatory) image filename; we tack on .eps extension.
+% #2 is (optional) width, #3 is (optional) height.
+% #4 is (ignored optional) html alt text.
+% #5 is (ignored optional) extension.
+% #6 is just the usual extra ignored arg for parsing this stuff.
+\newif\ifimagevmode
+\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
+ \catcode`\^^M = 5 % in case we're inside an example
+ \normalturnoffactive % allow _ et al. in names
+ % If the image is by itself, center it.
+ \ifvmode
+ \imagevmodetrue
+ \nobreak\bigskip
+ % Usually we'll have text after the image which will insert
+ % \parskip glue, so insert it here too to equalize the space
+ % above and below.
+ \nobreak\vskip\parskip
+ \nobreak
+ \line\bgroup\hss
+ \fi
+ %
+ % Output the image.
+ \ifpdf
+ \dopdfimage{#1}{#2}{#3}%
+ \else
+ % \epsfbox itself resets \epsf?size at each figure.
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
+ \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
+ \epsfbox{#1.eps}%
+ \fi
+ %
+ \ifimagevmode \hss \egroup \bigbreak \fi % space after the image
+\endgroup}
+
+
+% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
+% etc. We don't actually implement floating yet, we always include the
+% float "here". But it seemed the best name for the future.
+%
+\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
+
+% There may be a space before second and/or third parameter; delete it.
+\def\eatcommaspace#1, {#1,}
+
+% #1 is the optional FLOATTYPE, the text label for this float, typically
+% "Figure", "Table", "Example", etc. Can't contain commas. If omitted,
+% this float will not be numbered and cannot be referred to.
+%
+% #2 is the optional xref label. Also must be present for the float to
+% be referable.
+%
+% #3 is the optional positioning argument; for now, it is ignored. It
+% will somehow specify the positions allowed to float to (here, top, bottom).
+%
+% We keep a separate counter for each FLOATTYPE, which we reset at each
+% chapter-level command.
+\let\resetallfloatnos=\empty
+%
+\def\dofloat#1,#2,#3,#4\finish{%
+ \let\thiscaption=\empty
+ \let\thisshortcaption=\empty
+ %
+ % don't lose footnotes inside @float.
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \startsavinginserts
+ %
+ % We can't be used inside a paragraph.
+ \par
+ %
+ \vtop\bgroup
+ \def\floattype{#1}%
+ \def\floatlabel{#2}%
+ \def\floatloc{#3}% we do nothing with this yet.
+ %
+ \ifx\floattype\empty
+ \let\safefloattype=\empty
+ \else
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ \fi
+ %
+ % If label is given but no type, we handle that as the empty type.
+ \ifx\floatlabel\empty \else
+ % We want each FLOATTYPE to be numbered separately (Figure 1,
+ % Table 1, Figure 2, ...). (And if no label, no number.)
+ %
+ \expandafter\getfloatno\csname\safefloattype floatno\endcsname
+ \global\advance\floatno by 1
+ %
+ {%
+ % This magic value for \thissection is output by \setref as the
+ % XREFLABEL-title value. \xrefX uses it to distinguish float
+ % labels (which have a completely different output format) from
+ % node and anchor labels. And \xrdef uses it to construct the
+ % lists of floats.
+ %
+ \edef\thissection{\floatmagic=\safefloattype}%
+ \setref{\floatlabel}{Yfloat}%
+ }%
+ \fi
+ %
+ % start with \parskip glue, I guess.
+ \vskip\parskip
+ %
+ % Don't suppress indentation if a float happens to start a section.
+ \restorefirstparagraphindent
+}
+
+% we have these possibilities:
+% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
+% @float Foo,lbl & no caption: Foo 1.1
+% @float Foo & @caption{Cap}: Foo: Cap
+% @float Foo & no caption: Foo
+% @float ,lbl & Caption{Cap}: 1.1: Cap
+% @float ,lbl & no caption: 1.1
+% @float & @caption{Cap}: Cap
+% @float & no caption:
+%
+\def\Efloat{%
+ \let\floatident = \empty
+ %
+ % In all cases, if we have a float type, it comes first.
+ \ifx\floattype\empty \else \def\floatident{\floattype}\fi
+ %
+ % If we have an xref label, the number comes next.
+ \ifx\floatlabel\empty \else
+ \ifx\floattype\empty \else % if also had float type, need tie first.
+ \appendtomacro\floatident{\tie}%
+ \fi
+ % the number.
+ \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
+ \fi
+ %
+ % Start the printed caption with what we've constructed in
+ % \floatident, but keep it separate; we need \floatident again.
+ \let\captionline = \floatident
+ %
+ \ifx\thiscaption\empty \else
+ \ifx\floatident\empty \else
+ \appendtomacro\captionline{: }% had ident, so need a colon between
+ \fi
+ %
+ % caption text.
+ \appendtomacro\captionline{\scanexp\thiscaption}%
+ \fi
+ %
+ % If we have anything to print, print it, with space before.
+ % Eventually this needs to become an \insert.
+ \ifx\captionline\empty \else
+ \vskip.5\parskip
+ \captionline
+ %
+ % Space below caption.
+ \vskip\parskip
+ \fi
+ %
+ % If have an xref label, write the list of floats info. Do this
+ % after the caption, to avoid chance of it being a breakpoint.
+ \ifx\floatlabel\empty \else
+ % Write the text that goes in the lof to the aux file as
+ % \floatlabel-lof. Besides \floatident, we include the short
+ % caption if specified, else the full caption if specified, else nothing.
+ {%
+ \atdummies \turnoffactive \otherbackslash
+ % since we read the caption text in the macro world, where ^^M
+ % is turned into a normal character, we have to scan it back, so
+ % we don't write the literal three characters "^^M" into the aux file.
+ \scanexp{%
+ \xdef\noexpand\gtemp{%
+ \ifx\thisshortcaption\empty
+ \thiscaption
+ \else
+ \thisshortcaption
+ \fi
+ }%
+ }%
+ \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
+ \ifx\gtemp\empty \else : \gtemp \fi}}%
+ }%
+ \fi
+ \egroup % end of \vtop
+ %
+ % place the captured inserts
+ %
+ % BEWARE: when the floats start float, we have to issue warning whenever an
+ % insert appears inside a float which could possibly float. --kasal, 26may04
+ %
+ \checkinserts
+}
+
+% Append the tokens #2 to the definition of macro #1, not expanding either.
+%
+\def\appendtomacro#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+
+% @caption, @shortcaption
+%
+\def\caption{\docaption\thiscaption}
+\def\shortcaption{\docaption\thisshortcaption}
+\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
+\def\defcaption#1#2{\egroup \def#1{#2}}
+
+% The parameter is the control sequence identifying the counter we are
+% going to use. Create it if it doesn't exist and assign it to \floatno.
+\def\getfloatno#1{%
+ \ifx#1\relax
+ % Haven't seen this figure type before.
+ \csname newcount\endcsname #1%
+ %
+ % Remember to reset this floatno at the next chap.
+ \expandafter\gdef\expandafter\resetallfloatnos
+ \expandafter{\resetallfloatnos #1=0 }%
+ \fi
+ \let\floatno#1%
+}
+
+% \setref calls this to get the XREFLABEL-snt value. We want an @xref
+% to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we
+% first read the @float command.
+%
+\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
+
+% Magic string used for the XREFLABEL-title value, so \xrefX can
+% distinguish floats from other xref types.
+\def\floatmagic{!!float!!}
+
+% #1 is the control sequence we are passed; we expand into a conditional
+% which is true if #1 represents a float ref. That is, the magic
+% \thissection value which we \setref above.
+%
+\def\iffloat#1{\expandafter\doiffloat#1==\finish}
+%
+% #1 is (maybe) the \floatmagic string. If so, #2 will be the
+% (safe) float type for this float. We set \iffloattype to #2.
+%
+\def\doiffloat#1=#2=#3\finish{%
+ \def\temp{#1}%
+ \def\iffloattype{#2}%
+ \ifx\temp\floatmagic
+}
+
+% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
+%
+\parseargdef\listoffloats{%
+ \def\floattype{#1}% floattype
+ {%
+ % the floattype might have accents or other special characters,
+ % but we need to use it in a control sequence name.
+ \indexnofonts
+ \turnoffactive
+ \xdef\safefloattype{\floattype}%
+ }%
+ %
+ % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
+ \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
+ \ifhavexrefs
+ % if the user said @listoffloats foo but never @float foo.
+ \message{\linenumber No `\safefloattype' floats to list.}%
+ \fi
+ \else
+ \begingroup
+ \leftskip=\tocindent % indent these entries like a toc
+ \let\do=\listoffloatsdo
+ \csname floatlist\safefloattype\endcsname
+ \endgroup
+ \fi
+}
+
+% This is called on each entry in a list of floats. We're passed the
+% xref label, in the form LABEL-title, which is how we save it in the
+% aux file. We strip off the -title and look up \XRLABEL-lof, which
+% has the text we're supposed to typeset here.
+%
+% Figures without xref labels will not be included in the list (since
+% they won't appear in the aux file).
+%
+\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
+\def\listoffloatsdoentry#1-title\finish{{%
+ % Can't fully expand XR#1-lof because it can contain anything. Just
+ % pass the control sequence. On the other hand, XR#1-pg is just the
+ % page number, and we want to fully expand that so we can get a link
+ % in pdf output.
+ \toksA = \expandafter{\csname XR#1-lof\endcsname}%
+ %
+ % use the same \entry macro we use to generate the TOC and index.
+ \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
+ \writeentry
+}}
+
+\message{localization,}
+% and i18n.
+
+% @documentlanguage is usually given very early, just after
+% @setfilename. If done too late, it may not override everything
+% properly. Single argument is the language abbreviation.
+% It would be nice if we could set up a hyphenation file here.
+%
+\parseargdef\documentlanguage{%
+ \tex % read txi-??.tex file in plain TeX.
+ % Read the file if it exists.
+ \openin 1 txi-#1.tex
+ \ifeof 1
+ \errhelp = \nolanghelp
+ \errmessage{Cannot read language file txi-#1.tex}%
+ \else
+ \input txi-#1.tex
+ \fi
+ \closein 1
+ \endgroup
+}
+\newhelp\nolanghelp{The given language definition file cannot be found or
+is empty. Maybe you need to install it? In the current directory
+should work if nowhere else does.}
+
+
+% @documentencoding should change something in TeX eventually, most
+% likely, but for now just recognize it.
+\let\documentencoding = \comment
+
+
+% Page size parameters.
+%
+\newdimen\defaultparindent \defaultparindent = 15pt
+
+\chapheadingskip = 15pt plus 4pt minus 2pt
+\secheadingskip = 12pt plus 3pt minus 2pt
+\subsecheadingskip = 9pt plus 2pt minus 2pt
+
+% Prevent underfull vbox error messages.
+\vbadness = 10000
+
+% Don't be so finicky about underfull hboxes, either.
+\hbadness = 2000
+
+% Following George Bush, just get rid of widows and orphans.
+\widowpenalty=10000
+\clubpenalty=10000
+
+% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
+% using an old version of TeX, don't do anything. We want the amount of
+% stretch added to depend on the line length, hence the dependence on
+% \hsize. We call this whenever the paper size is set.
+%
+\def\setemergencystretch{%
+ \ifx\emergencystretch\thisisundefined
+ % Allow us to assign to \emergencystretch anyway.
+ \def\emergencystretch{\dimen0}%
+ \else
+ \emergencystretch = .15\hsize
+ \fi
+}
+
+% Parameters in order: 1) textheight; 2) textwidth; 3) voffset;
+% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8)
+% physical page width.
+%
+% We also call \setleading{\textleading}, so the caller should define
+% \textleading. The caller should also set \parskip.
+%
+\def\internalpagesizes#1#2#3#4#5#6#7#8{%
+ \voffset = #3\relax
+ \topskip = #6\relax
+ \splittopskip = \topskip
+ %
+ \vsize = #1\relax
+ \advance\vsize by \topskip
+ \outervsize = \vsize
+ \advance\outervsize by 2\topandbottommargin
+ \pageheight = \vsize
+ %
+ \hsize = #2\relax
+ \outerhsize = \hsize
+ \advance\outerhsize by 0.5in
+ \pagewidth = \hsize
+ %
+ \normaloffset = #4\relax
+ \bindingoffset = #5\relax
+ %
+ \ifpdf
+ \pdfpageheight #7\relax
+ \pdfpagewidth #8\relax
+ \fi
+ %
+ \setleading{\textleading}
+ %
+ \parindent = \defaultparindent
+ \setemergencystretch
+}
+
+% @letterpaper (the default).
+\def\letterpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % If page is nothing but text, make it come out even.
+ \internalpagesizes{46\baselineskip}{6in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{36pt}%
+ {11in}{8.5in}%
+}}
+
+% Use @smallbook to reset parameters for 7x9.5 (or so) format.
+\def\smallbook{{\globaldefs = 1
+ \parskip = 2pt plus 1pt
+ \textleading = 12pt
+ %
+ \internalpagesizes{7.5in}{5in}%
+ {\voffset}{.25in}%
+ {\bindingoffset}{16pt}%
+ {9.25in}{7in}%
+ %
+ \lispnarrowing = 0.3in
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = .5cm
+}}
+
+% Use @afourpaper to print on European A4 paper.
+\def\afourpaper{{\globaldefs = 1
+ \parskip = 3pt plus 2pt minus 1pt
+ \textleading = 13.2pt
+ %
+ % Double-side printing via postscript on Laserjet 4050
+ % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
+ % To change the settings for a different printer or situation, adjust
+ % \normaloffset until the front-side and back-side texts align. Then
+ % do the same for \bindingoffset. You can set these for testing in
+ % your texinfo source file like this:
+ % @tex
+ % \global\normaloffset = -6mm
+ % \global\bindingoffset = 10mm
+ % @end tex
+ \internalpagesizes{51\baselineskip}{160mm}
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{44pt}%
+ {297mm}{210mm}%
+ %
+ \tolerance = 700
+ \hfuzz = 1pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 5mm
+}}
+
+% Use @afivepaper to print on European A5 paper.
+% From romildo@urano.iceb.ufop.br, 2 July 2000.
+% He also recommends making @example and @lisp be small.
+\def\afivepaper{{\globaldefs = 1
+ \parskip = 2pt plus 1pt minus 0.1pt
+ \textleading = 12.5pt
+ %
+ \internalpagesizes{160mm}{120mm}%
+ {\voffset}{\hoffset}%
+ {\bindingoffset}{8pt}%
+ {210mm}{148mm}%
+ %
+ \lispnarrowing = 0.2in
+ \tolerance = 800
+ \hfuzz = 1.2pt
+ \contentsrightmargin = 0pt
+ \defbodyindent = 2mm
+ \tableindent = 12mm
+}}
+
+% A specific text layout, 24x15cm overall, intended for A4 paper.
+\def\afourlatex{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{237mm}{150mm}%
+ {\voffset}{4.6mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ %
+ % Must explicitly reset to 0 because we call \afourpaper.
+ \globaldefs = 0
+}}
+
+% Use @afourwide to print on A4 paper in landscape format.
+\def\afourwide{{\globaldefs = 1
+ \afourpaper
+ \internalpagesizes{241mm}{165mm}%
+ {\voffset}{-2.95mm}%
+ {\bindingoffset}{7mm}%
+ {297mm}{210mm}%
+ \globaldefs = 0
+}}
+
+% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
+% Perhaps we should allow setting the margins, \topskip, \parskip,
+% and/or leading, also. Or perhaps we should compute them somehow.
+%
+\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
+\def\pagesizesyyy#1,#2,#3\finish{{%
+ \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
+ \globaldefs = 1
+ %
+ \parskip = 3pt plus 2pt minus 1pt
+ \setleading{\textleading}%
+ %
+ \dimen0 = #1
+ \advance\dimen0 by \voffset
+ %
+ \dimen2 = \hsize
+ \advance\dimen2 by \normaloffset
+ %
+ \internalpagesizes{#1}{\hsize}%
+ {\voffset}{\normaloffset}%
+ {\bindingoffset}{44pt}%
+ {\dimen0}{\dimen2}%
+}}
+
+% Set default to letter.
+%
+\letterpaper
+
+
+\message{and turning on texinfo input format.}
+
+% Define macros to output various characters with catcode for normal text.
+\catcode`\"=\other
+\catcode`\~=\other
+\catcode`\^=\other
+\catcode`\_=\other
+\catcode`\|=\other
+\catcode`\<=\other
+\catcode`\>=\other
+\catcode`\+=\other
+\catcode`\$=\other
+\def\normaldoublequote{"}
+\def\normaltilde{~}
+\def\normalcaret{^}
+\def\normalunderscore{_}
+\def\normalverticalbar{|}
+\def\normalless{<}
+\def\normalgreater{>}
+\def\normalplus{+}
+\def\normaldollar{$}%$ font-lock fix
+
+% This macro is used to make a character print one way in \tt
+% (where it can probably be output as-is), and another way in other fonts,
+% where something hairier probably needs to be done.
+%
+% #1 is what to print if we are indeed using \tt; #2 is what to print
+% otherwise. Since all the Computer Modern typewriter fonts have zero
+% interword stretch (and shrink), and it is reasonable to expect all
+% typewriter fonts to have this, we can check that font parameter.
+%
+\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
+
+% Same as above, but check for italic font. Actually this also catches
+% non-italic slanted fonts since it is impossible to distinguish them from
+% italic fonts. But since this is only used by $ and it uses \sl anyway
+% this is not a problem.
+\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
+
+% Turn off all special characters except @
+% (and those which the user can use as if they were ordinary).
+% Most of these we simply print from the \tt font, but for some, we can
+% use math or other variants that look better in normal text.
+
+\catcode`\"=\active
+\def\activedoublequote{{\tt\char34}}
+\let"=\activedoublequote
+\catcode`\~=\active
+\def~{{\tt\char126}}
+\chardef\hat=`\^
+\catcode`\^=\active
+\def^{{\tt \hat}}
+
+\catcode`\_=\active
+\def_{\ifusingtt\normalunderscore\_}
+% Subroutine for the previous macro.
+\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
+
+\catcode`\|=\active
+\def|{{\tt\char124}}
+\chardef \less=`\<
+\catcode`\<=\active
+\def<{{\tt \less}}
+\chardef \gtr=`\>
+\catcode`\>=\active
+\def>{{\tt \gtr}}
+\catcode`\+=\active
+\def+{{\tt \char 43}}
+\catcode`\$=\active
+\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
+
+% If a .fmt file is being used, characters that might appear in a file
+% name cannot be active until we have parsed the command line.
+% So turn them off again, and have \everyjob (or @setfilename) turn them on.
+% \otherifyactive is called near the end of this file.
+\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
+
+\catcode`\@=0
+
+% \backslashcurfont outputs one backslash character in current font,
+% as in \char`\\.
+\global\chardef\backslashcurfont=`\\
+\global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work
+
+% \rawbackslash defines an active \ to do \backslashcurfont.
+% \otherbackslash defines an active \ to be a literal `\' character with
+% catcode other.
+{\catcode`\\=\active
+ @gdef@rawbackslash{@let\=@backslashcurfont}
+ @gdef@otherbackslash{@let\=@realbackslash}
+}
+
+% \realbackslash is an actual character `\' with catcode other.
+{\catcode`\\=\other @gdef@realbackslash{\}}
+
+% \normalbackslash outputs one backslash in fixed width font.
+\def\normalbackslash{{\tt\backslashcurfont}}
+
+\catcode`\\=\active
+
+% Used sometimes to turn off (effectively) the active characters
+% even after parsing them.
+@def@turnoffactive{%
+ @let"=@normaldoublequote
+ @let\=@realbackslash
+ @let~=@normaltilde
+ @let^=@normalcaret
+ @let_=@normalunderscore
+ @let|=@normalverticalbar
+ @let<=@normalless
+ @let>=@normalgreater
+ @let+=@normalplus
+ @let$=@normaldollar %$ font-lock fix
+ @unsepspaces
+}
+
+% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+% the literal character `\'. (Thus, \ is not expandable when this is in
+% effect.)
+%
+@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash}
+
+% Make _ and + \other characters, temporarily.
+% This is canceled by @fixbackslash.
+@otherifyactive
+
+% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
+% That is what \eatinput is for; after that, the `\' should revert to printing
+% a backslash.
+%
+@gdef@eatinput input texinfo{@fixbackslash}
+@global@let\ = @eatinput
+
+% On the other hand, perhaps the file did not have a `\input texinfo'. Then
+% the first `\{ in the file would cause an error. This macro tries to fix
+% that, assuming it is called before the first `\' could plausibly occur.
+% Also back turn on active characters that might appear in the input
+% file name, in case not using a pre-dumped format.
+%
+@gdef@fixbackslash{%
+ @ifx\@eatinput @let\ = @normalbackslash @fi
+ @catcode`+=@active
+ @catcode`@_=@active
+}
+
+% Say @foo, not \foo, in error messages.
+@escapechar = `@@
+
+% These look ok in all fonts, so just make them not special.
+@catcode`@& = @other
+@catcode`@# = @other
+@catcode`@% = @other
+
+
+@c Local variables:
+@c eval: (add-hook 'write-file-hooks 'time-stamp)
+@c page-delimiter: "^\\\\message"
+@c time-stamp-start: "def\\\\texinfoversion{"
+@c time-stamp-format: "%:y-%02m-%02d.%02H"
+@c time-stamp-end: "}"
+@c End:
+
+@c vim:sw=2:
+
+@ignore
+ arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
+@end ignore
diff --git a/gsl-1.9/doc/usage.texi b/gsl-1.9/doc/usage.texi
new file mode 100644
index 0000000..adcd494
--- /dev/null
+++ b/gsl-1.9/doc/usage.texi
@@ -0,0 +1,489 @@
+@cindex standards conformance, ANSI C
+@cindex ANSI C, use of
+@cindex C extensions, compatible use of
+@cindex compatibility
+This chapter describes how to compile programs that use GSL, and
+introduces its conventions.
+
+@menu
+* An Example Program::
+* Compiling and Linking::
+* Shared Libraries::
+* ANSI C Compliance::
+* Inline functions::
+* Long double::
+* Portability functions::
+* Alternative optimized functions::
+* Support for different numeric types::
+* Compatibility with C++::
+* Aliasing of arrays::
+* Thread-safety::
+* Deprecated Functions::
+* Code Reuse::
+@end menu
+
+@node An Example Program
+@section An Example Program
+
+The following short program demonstrates the use of the library by
+computing the value of the Bessel function @math{J_0(x)} for @math{x=5},
+
+@example
+@verbatiminclude examples/intro.c
+@end example
+
+@noindent
+The output is shown below, and should be correct to double-precision
+accuracy,
+
+@example
+@verbatiminclude examples/intro.out
+@end example
+
+@noindent
+The steps needed to compile this program are described in the following
+sections.
+
+@node Compiling and Linking
+@section Compiling and Linking
+@cindex compiling programs, include paths
+@cindex including GSL header files
+@cindex header files, including
+The library header files are installed in their own @file{gsl}
+directory. You should write any preprocessor include statements with a
+@file{gsl/} directory prefix thus,
+
+@example
+#include <gsl/gsl_math.h>
+@end example
+
+@noindent
+If the directory is not installed on the standard search path of your
+compiler you will also need to provide its location to the preprocessor
+as a command line flag. The default location of the @file{gsl}
+directory is @file{/usr/local/include/gsl}. A typical compilation
+command for a source file @file{example.c} with the GNU C compiler
+@code{gcc} is,
+
+@example
+$ gcc -Wall -I/usr/local/include -c example.c
+@end example
+
+@noindent
+This results in an object file @file{example.o}. The default
+include path for @code{gcc} searches @file{/usr/local/include} automatically so
+the @code{-I} option can actually be omitted when GSL is installed
+in its default location.
+
+@menu
+* Linking programs with the library::
+* Linking with an alternative BLAS library::
+@end menu
+
+@node Linking programs with the library
+@subsection Linking programs with the library
+@cindex compiling programs, library paths
+@cindex linking with GSL libraries
+@cindex libraries, linking with
+The library is installed as a single file, @file{libgsl.a}. A shared
+version of the library @file{libgsl.so} is also installed on systems
+that support shared libraries. The default location of these files is
+@file{/usr/local/lib}. If this directory is not on the standard search
+path of your linker you will also need to provide its location as a
+command line flag.
+
+To link against the library you need to specify
+both the main library and a supporting @sc{cblas} library, which
+provides standard basic linear algebra subroutines. A suitable
+@sc{cblas} implementation is provided in the library
+@file{libgslcblas.a} if your system does not provide one. The following
+example shows how to link an application with the library,
+
+@example
+$ gcc -L/usr/local/lib example.o -lgsl -lgslcblas -lm
+@end example
+
+@noindent
+The default library path for @code{gcc} searches @file{/usr/local/lib}
+automatically so the @code{-L} option can be omitted when GSL is
+installed in its default location.
+
+@node Linking with an alternative BLAS library
+@subsection Linking with an alternative BLAS library
+
+The following command line shows how you would link the same application
+with an alternative @sc{cblas} library called @file{libcblas},
+
+@example
+$ gcc example.o -lgsl -lcblas -lm
+@end example
+
+@noindent
+For the best performance an optimized platform-specific @sc{cblas}
+library should be used for @code{-lcblas}. The library must conform to
+the @sc{cblas} standard. The @sc{atlas} package provides a portable
+high-performance @sc{blas} library with a @sc{cblas} interface. It is
+free software and should be installed for any work requiring fast vector
+and matrix operations. The following command line will link with the
+@sc{atlas} library and its @sc{cblas} interface,
+
+@example
+$ gcc example.o -lgsl -lcblas -latlas -lm
+@end example
+
+@noindent
+For more information see @ref{BLAS Support}.
+
+@comment The program @code{gsl-config} provides information on the local version
+@comment of the library. For example, the following command shows that the
+@comment library has been installed under the directory @file{/usr/local},
+
+@comment @example
+@comment $ gsl-config --prefix
+@comment /usr/local
+@comment @end example
+@comment @noindent
+@comment Further information is available using the command @code{gsl-config --help}.
+
+@node Shared Libraries
+@section Shared Libraries
+@cindex shared libraries
+@cindex libraries, shared
+@cindex LD_LIBRARY_PATH
+To run a program linked with the shared version of the library the
+operating system must be able to locate the corresponding @file{.so}
+file at runtime. If the library cannot be found, the following error
+will occur:
+
+@example
+$ ./a.out
+./a.out: error while loading shared libraries:
+libgsl.so.0: cannot open shared object file: No such
+file or directory
+@end example
+
+@noindent
+To avoid this error, define the shell variable @code{LD_LIBRARY_PATH} to
+include the directory where the library is installed.
+
+For example, in the Bourne shell (@code{/bin/sh} or @code{/bin/bash}),
+the library search path can be set with the following commands:
+
+@example
+$ LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
+$ export LD_LIBRARY_PATH
+$ ./example
+@end example
+
+@noindent
+In the C-shell (@code{/bin/csh} or @code{/bin/tcsh}) the equivalent
+command is,
+
+@example
+% setenv LD_LIBRARY_PATH /usr/local/lib:$LD_LIBRARY_PATH
+@end example
+
+@noindent
+The standard prompt for the C-shell in the example above is the percent
+character @samp{%}, and should not be typed as part of the command.
+
+To save retyping these commands each session they should be placed in an
+individual or system-wide login file.
+
+To compile a statically linked version of the program, use the
+@code{-static} flag in @code{gcc},
+
+@example
+$ gcc -static example.o -lgsl -lgslcblas -lm
+@end example
+
+@node ANSI C Compliance
+@section ANSI C Compliance
+
+The library is written in ANSI C and is intended to conform to the ANSI
+C standard (C89). It should be portable to any system with a working
+ANSI C compiler.
+
+The library does not rely on any non-ANSI extensions in the interface it
+exports to the user. Programs you write using GSL can be ANSI
+compliant. Extensions which can be used in a way compatible with pure
+ANSI C are supported, however, via conditional compilation. This allows
+the library to take advantage of compiler extensions on those platforms
+which support them.
+
+When an ANSI C feature is known to be broken on a particular system the
+library will exclude any related functions at compile-time. This should
+make it impossible to link a program that would use these functions and
+give incorrect results.
+
+To avoid namespace conflicts all exported function names and variables
+have the prefix @code{gsl_}, while exported macros have the prefix
+@code{GSL_}.
+
+@node Inline functions
+@section Inline functions
+
+@cindex inline functions
+@cindex HAVE_INLINE
+The @code{inline} keyword is not part of the original ANSI C standard
+(C89) and the library does not export any inline function definitions by
+default. However, the library provides optional inline versions of
+performance-critical functions by conditional compilation. The inline
+versions of these functions can be included by defining the macro
+@code{HAVE_INLINE} when compiling an application,
+
+@example
+$ gcc -Wall -c -DHAVE_INLINE example.c
+@end example
+
+@noindent
+If you use @code{autoconf} this macro can be defined automatically. If
+you do not define the macro @code{HAVE_INLINE} then the slower
+non-inlined versions of the functions will be used instead.
+
+Note that the actual usage of the inline keyword is @code{extern
+inline}, which eliminates unnecessary function definitions in @sc{gcc}.
+If the form @code{extern inline} causes problems with other compilers a
+stricter autoconf test can be used, see @ref{Autoconf Macros}.
+
+@node Long double
+@section Long double
+@cindex long double
+The extended numerical type @code{long double} is part of the ANSI C
+standard and should be available in every modern compiler. However, the
+precision of @code{long double} is platform dependent, and this should
+be considered when using it. The IEEE standard only specifies the
+minimum precision of extended precision numbers, while the precision of
+@code{double} is the same on all platforms.
+
+In some system libraries the @code{stdio.h} formatted input/output
+functions @code{printf} and @code{scanf} are not implemented correctly
+for @code{long double}. Undefined or incorrect results are avoided by
+testing these functions during the @code{configure} stage of library
+compilation and eliminating certain GSL functions which depend on them
+if necessary. The corresponding line in the @code{configure} output
+looks like this,
+
+@example
+checking whether printf works with long double... no
+@end example
+
+@noindent
+Consequently when @code{long double} formatted input/output does not
+work on a given system it should be impossible to link a program which
+uses GSL functions dependent on this.
+
+If it is necessary to work on a system which does not support formatted
+@code{long double} input/output then the options are to use binary
+formats or to convert @code{long double} results into @code{double} for
+reading and writing.
+
+@node Portability functions
+@section Portability functions
+
+To help in writing portable applications GSL provides some
+implementations of functions that are found in other libraries, such as
+the BSD math library. You can write your application to use the native
+versions of these functions, and substitute the GSL versions via a
+preprocessor macro if they are unavailable on another platform.
+
+For example, after determining whether the BSD function @code{hypot} is
+available you can include the following macro definitions in a file
+@file{config.h} with your application,
+
+@example
+/* Substitute gsl_hypot for missing system hypot */
+
+#ifndef HAVE_HYPOT
+#define hypot gsl_hypot
+#endif
+@end example
+
+@noindent
+The application source files can then use the include command
+@code{#include <config.h>} to replace each occurrence of @code{hypot} by
+@code{gsl_hypot} when @code{hypot} is not available. This substitution
+can be made automatically if you use @code{autoconf}, see @ref{Autoconf
+Macros}.
+
+In most circumstances the best strategy is to use the native versions of
+these functions when available, and fall back to GSL versions otherwise,
+since this allows your application to take advantage of any
+platform-specific optimizations in the system library. This is the
+strategy used within GSL itself.
+
+@node Alternative optimized functions
+@section Alternative optimized functions
+
+@cindex alternative optimized functions
+@cindex optimized functions, alternatives
+The main implementation of some functions in the library will not be
+optimal on all architectures. For example, there are several ways to
+compute a Gaussian random variate and their relative speeds are
+platform-dependent. In cases like this the library provides alternative
+implementations of these functions with the same interface. If you
+write your application using calls to the standard implementation you
+can select an alternative version later via a preprocessor definition.
+It is also possible to introduce your own optimized functions this way
+while retaining portability. The following lines demonstrate the use of
+a platform-dependent choice of methods for sampling from the Gaussian
+distribution,
+
+@example
+#ifdef SPARC
+#define gsl_ran_gaussian gsl_ran_gaussian_ratio_method
+#endif
+#ifdef INTEL
+#define gsl_ran_gaussian my_gaussian
+#endif
+@end example
+
+@noindent
+These lines would be placed in the configuration header file
+@file{config.h} of the application, which should then be included by all
+the source files. Note that the alternative implementations will not
+produce bit-for-bit identical results, and in the case of random number
+distributions will produce an entirely different stream of random
+variates.
+
+@node Support for different numeric types
+@section Support for different numeric types
+
+Many functions in the library are defined for different numeric types.
+This feature is implemented by varying the name of the function with a
+type-related modifier---a primitive form of C++ templates. The
+modifier is inserted into the function name after the initial module
+prefix. The following table shows the function names defined for all
+the numeric types of an imaginary module @code{gsl_foo} with function
+@code{fn},
+
+@example
+gsl_foo_fn double
+gsl_foo_long_double_fn long double
+gsl_foo_float_fn float
+gsl_foo_long_fn long
+gsl_foo_ulong_fn unsigned long
+gsl_foo_int_fn int
+gsl_foo_uint_fn unsigned int
+gsl_foo_short_fn short
+gsl_foo_ushort_fn unsigned short
+gsl_foo_char_fn char
+gsl_foo_uchar_fn unsigned char
+@end example
+
+@noindent
+The normal numeric precision @code{double} is considered the default and
+does not require a suffix. For example, the function
+@code{gsl_stats_mean} computes the mean of double precision numbers,
+while the function @code{gsl_stats_int_mean} computes the mean of
+integers.
+
+A corresponding scheme is used for library defined types, such as
+@code{gsl_vector} and @code{gsl_matrix}. In this case the modifier is
+appended to the type name. For example, if a module defines a new
+type-dependent struct or typedef @code{gsl_foo} it is modified for other
+types in the following way,
+
+@example
+gsl_foo double
+gsl_foo_long_double long double
+gsl_foo_float float
+gsl_foo_long long
+gsl_foo_ulong unsigned long
+gsl_foo_int int
+gsl_foo_uint unsigned int
+gsl_foo_short short
+gsl_foo_ushort unsigned short
+gsl_foo_char char
+gsl_foo_uchar unsigned char
+@end example
+
+@noindent
+When a module contains type-dependent definitions the library provides
+individual header files for each type. The filenames are modified as
+shown in the below. For convenience the default header includes the
+definitions for all the types. To include only the double precision
+header file, or any other specific type, use its individual filename.
+
+@example
+#include <gsl/gsl_foo.h> All types
+#include <gsl/gsl_foo_double.h> double
+#include <gsl/gsl_foo_long_double.h> long double
+#include <gsl/gsl_foo_float.h> float
+#include <gsl/gsl_foo_long.h> long
+#include <gsl/gsl_foo_ulong.h> unsigned long
+#include <gsl/gsl_foo_int.h> int
+#include <gsl/gsl_foo_uint.h> unsigned int
+#include <gsl/gsl_foo_short.h> short
+#include <gsl/gsl_foo_ushort.h> unsigned short
+#include <gsl/gsl_foo_char.h> char
+#include <gsl/gsl_foo_uchar.h> unsigned char
+@end example
+
+@node Compatibility with C++
+@section Compatibility with C++
+@cindex C++, compatibility
+The library header files automatically define functions to have
+@code{extern "C"} linkage when included in C++ programs. This allows
+the functions to be called directly from C++.
+
+To use C++ exception handling within user-defined functions passed to
+the library as parameters, the library must be built with the
+additional @code{CFLAGS} compilation option @option{-fexceptions}.
+
+@node Aliasing of arrays
+@section Aliasing of arrays
+@cindex aliasing of arrays
+The library assumes that arrays, vectors and matrices passed as
+modifiable arguments are not aliased and do not overlap with each other.
+This removes the need for the library to handle overlapping memory
+regions as a special case, and allows additional optimizations to be
+used. If overlapping memory regions are passed as modifiable arguments
+then the results of such functions will be undefined. If the arguments
+will not be modified (for example, if a function prototype declares them
+as @code{const} arguments) then overlapping or aliased memory regions
+can be safely used.
+
+@node Thread-safety
+@section Thread-safety
+
+The library can be used in multi-threaded programs. All the functions
+are thread-safe, in the sense that they do not use static variables.
+Memory is always associated with objects and not with functions. For
+functions which use @dfn{workspace} objects as temporary storage the
+workspaces should be allocated on a per-thread basis. For functions
+which use @dfn{table} objects as read-only memory the tables can be used
+by multiple threads simultaneously. Table arguments are always declared
+@code{const} in function prototypes, to indicate that they may be
+safely accessed by different threads.
+
+There are a small number of static global variables which are used to
+control the overall behavior of the library (e.g. whether to use
+range-checking, the function to call on fatal error, etc). These
+variables are set directly by the user, so they should be initialized
+once at program startup and not modified by different threads.
+
+@node Deprecated Functions
+@section Deprecated Functions
+@cindex deprecated functions
+
+From time to time, it may be necessary for the definitions of some
+functions to be altered or removed from the library. In these
+circumstances the functions will first be declared @dfn{deprecated} and
+then removed from subsequent versions of the library. Functions that
+are deprecated can be disabled in the current release by setting the
+preprocessor definition @code{GSL_DISABLE_DEPRECATED}. This allows
+existing code to be tested for forwards compatibility.
+
+@node Code Reuse
+@section Code Reuse
+@cindex code reuse in applications
+@cindex source code, reuse in applications
+Where possible the routines in the library have been written to avoid
+dependencies between modules and files. This should make it possible to
+extract individual functions for use in your own applications, without
+needing to have the whole library installed. You may need to define
+certain macros such as @code{GSL_ERROR} and remove some @code{#include}
+statements in order to compile the files as standalone units. Reuse of
+the library code in this way is encouraged, subject to the terms of the
+GNU General Public License.
diff --git a/gsl-1.9/doc/vdp.eps b/gsl-1.9/doc/vdp.eps
new file mode 100644
index 0000000..2e79246
--- /dev/null
+++ b/gsl-1.9/doc/vdp.eps
@@ -0,0 +1,1082 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: vdp.eps
+%%Creator: gnuplot 3.5 (pre 3.6) patchlevel beta 347
+%%CreationDate: Mon Jun 11 17:56:56 2001
+%%DocumentFonts: (atend)
+%%BoundingBox: 50 50 410 302
+%%Orientation: Portrait
+%%EndComments
+/gnudict 120 dict def
+gnudict begin
+/Color false def
+/Solid false def
+/gnulinewidth 5.000 def
+/userlinewidth gnulinewidth def
+/vshift -46 def
+/dl {10 mul} def
+/hpt_ 31.5 def
+/vpt_ 31.5 def
+/hpt hpt_ def
+/vpt vpt_ def
+/M {moveto} bind def
+/L {lineto} bind def
+/R {rmoveto} bind def
+/V {rlineto} bind def
+/vpt2 vpt 2 mul def
+/hpt2 hpt 2 mul def
+/Lshow { currentpoint stroke M
+ 0 vshift R show } def
+/Rshow { currentpoint stroke M
+ dup stringwidth pop neg vshift R show } def
+/Cshow { currentpoint stroke M
+ dup stringwidth pop -2 div vshift R show } def
+/UP { dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
+ /hpt2 hpt 2 mul def /vpt2 vpt 2 mul def } def
+/DL { Color {setrgbcolor Solid {pop []} if 0 setdash }
+ {pop pop pop Solid {pop []} if 0 setdash} ifelse } def
+/BL { stroke gnulinewidth 2 mul setlinewidth } def
+/AL { stroke gnulinewidth 2 div setlinewidth } def
+/UL { gnulinewidth mul /userlinewidth exch def } def
+/PL { stroke userlinewidth setlinewidth } def
+/LTb { BL [] 0 0 0 DL } def
+/LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def
+/LT0 { PL [] 1 0 0 DL } def
+/LT1 { PL [4 dl 2 dl] 0 1 0 DL } def
+/LT2 { PL [2 dl 3 dl] 0 0 1 DL } def
+/LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def
+/LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def
+/LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def
+/LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def
+/LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def
+/LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def
+/Pnt { stroke [] 0 setdash
+ gsave 1 setlinecap M 0 0 V stroke grestore } def
+/Dia { stroke [] 0 setdash 2 copy vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke
+ Pnt } def
+/Pls { stroke [] 0 setdash vpt sub M 0 vpt2 V
+ currentpoint stroke M
+ hpt neg vpt neg R hpt2 0 V stroke
+ } def
+/Box { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke
+ Pnt } def
+/Crs { stroke [] 0 setdash exch hpt sub exch vpt add M
+ hpt2 vpt2 neg V currentpoint stroke M
+ hpt2 neg 0 R hpt2 vpt2 V stroke } def
+/TriU { stroke [] 0 setdash 2 copy vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke
+ Pnt } def
+/Star { 2 copy Pls Crs } def
+/BoxF { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath fill } def
+/TriUF { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath fill } def
+/TriD { stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke
+ Pnt } def
+/TriDF { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath fill} def
+/DiaF { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath fill } def
+/Pent { stroke [] 0 setdash 2 copy gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore Pnt } def
+/PentF { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath fill grestore } def
+/Circle { stroke [] 0 setdash 2 copy
+ hpt 0 360 arc stroke Pnt } def
+/CircleF { stroke [] 0 setdash hpt 0 360 arc fill } def
+/C0 { BL [] 0 setdash 2 copy moveto vpt 90 450 arc } bind def
+/C1 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C2 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C3 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C4 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C5 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc
+ 2 copy moveto
+ 2 copy vpt 180 270 arc closepath fill
+ vpt 0 360 arc } bind def
+/C6 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C7 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 270 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C8 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C9 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 270 450 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C10 { BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 90 180 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C11 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 180 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 270 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C12 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C13 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 0 90 arc closepath fill
+ 2 copy moveto
+ 2 copy vpt 180 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/C14 { BL [] 0 setdash 2 copy moveto
+ 2 copy vpt 90 360 arc closepath fill
+ vpt 0 360 arc } bind def
+/C15 { BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
+ vpt 0 360 arc closepath } bind def
+/Rec { newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
+ neg 0 rlineto closepath } bind def
+/Square { dup Rec } bind def
+/Bsquare { vpt sub exch vpt sub exch vpt2 Square } bind def
+/S0 { BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare } bind def
+/S1 { BL [] 0 setdash 2 copy vpt Square fill Bsquare } bind def
+/S2 { BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S3 { BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare } bind def
+/S4 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S5 { BL [] 0 setdash 2 copy 2 copy vpt Square fill
+ exch vpt sub exch vpt sub vpt Square fill Bsquare } bind def
+/S6 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S7 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
+ 2 copy vpt Square fill
+ Bsquare } bind def
+/S8 { BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare } bind def
+/S9 { BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare } bind def
+/S10 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
+ Bsquare } bind def
+/S11 { BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
+ Bsquare } bind def
+/S12 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare } bind def
+/S13 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy vpt Square fill Bsquare } bind def
+/S14 { BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
+ 2 copy exch vpt sub exch vpt Square fill Bsquare } bind def
+/S15 { BL [] 0 setdash 2 copy Bsquare fill Bsquare } bind def
+/D0 { gsave translate 45 rotate 0 0 S0 stroke grestore } bind def
+/D1 { gsave translate 45 rotate 0 0 S1 stroke grestore } bind def
+/D2 { gsave translate 45 rotate 0 0 S2 stroke grestore } bind def
+/D3 { gsave translate 45 rotate 0 0 S3 stroke grestore } bind def
+/D4 { gsave translate 45 rotate 0 0 S4 stroke grestore } bind def
+/D5 { gsave translate 45 rotate 0 0 S5 stroke grestore } bind def
+/D6 { gsave translate 45 rotate 0 0 S6 stroke grestore } bind def
+/D7 { gsave translate 45 rotate 0 0 S7 stroke grestore } bind def
+/D8 { gsave translate 45 rotate 0 0 S8 stroke grestore } bind def
+/D9 { gsave translate 45 rotate 0 0 S9 stroke grestore } bind def
+/D10 { gsave translate 45 rotate 0 0 S10 stroke grestore } bind def
+/D11 { gsave translate 45 rotate 0 0 S11 stroke grestore } bind def
+/D12 { gsave translate 45 rotate 0 0 S12 stroke grestore } bind def
+/D13 { gsave translate 45 rotate 0 0 S13 stroke grestore } bind def
+/D14 { gsave translate 45 rotate 0 0 S14 stroke grestore } bind def
+/D15 { gsave translate 45 rotate 0 0 S15 stroke grestore } bind def
+/DiaE { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V closepath stroke } def
+/BoxE { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V closepath stroke } def
+/TriUE { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V closepath stroke } def
+/TriDE { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V closepath stroke } def
+/PentE { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ closepath stroke grestore } def
+/CircE { stroke [] 0 setdash
+ hpt 0 360 arc stroke } def
+/Opaque { gsave closepath 1 setgray fill grestore 0 setgray closepath } def
+/DiaW { stroke [] 0 setdash vpt add M
+ hpt neg vpt neg V hpt vpt neg V
+ hpt vpt V hpt neg vpt V Opaque stroke } def
+/BoxW { stroke [] 0 setdash exch hpt sub exch vpt add M
+ 0 vpt2 neg V hpt2 0 V 0 vpt2 V
+ hpt2 neg 0 V Opaque stroke } def
+/TriUW { stroke [] 0 setdash vpt 1.12 mul add M
+ hpt neg vpt -1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt 1.62 mul V Opaque stroke } def
+/TriDW { stroke [] 0 setdash vpt 1.12 mul sub M
+ hpt neg vpt 1.62 mul V
+ hpt 2 mul 0 V
+ hpt neg vpt -1.62 mul V Opaque stroke } def
+/PentW { stroke [] 0 setdash gsave
+ translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
+ Opaque stroke grestore } def
+/CircW { stroke [] 0 setdash
+ hpt 0 360 arc Opaque stroke } def
+/BoxFill { gsave Rec 1 setgray fill grestore } def
+end
+%%EndProlog
+gnudict begin
+gsave
+50 50 translate
+0.050 0.050 scale
+0 setgray
+newpath
+(Helvetica) findfont 140 scalefont setfont
+1.000 UL
+LTb
+336 739 M
+63 0 V
+6633 0 R
+-63 0 V
+252 739 M
+(-4) Rshow
+336 1658 M
+63 0 V
+6633 0 R
+-63 0 V
+-6717 0 R
+(-2) Rshow
+336 2576 M
+63 0 V
+6633 0 R
+-63 0 V
+-6717 0 R
+(0) Rshow
+336 3494 M
+63 0 V
+6633 0 R
+-63 0 V
+-6717 0 R
+(2) Rshow
+336 4413 M
+63 0 V
+6633 0 R
+-63 0 V
+-6717 0 R
+(4) Rshow
+336 280 M
+0 63 V
+0 4529 R
+0 -63 V
+336 140 M
+(0) Cshow
+1006 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(10) Cshow
+1675 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(20) Cshow
+2345 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(30) Cshow
+3014 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(40) Cshow
+3684 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(50) Cshow
+4354 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(60) Cshow
+5023 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(70) Cshow
+5693 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(80) Cshow
+6362 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(90) Cshow
+7032 280 M
+0 63 V
+0 4529 R
+0 -63 V
+0 -4669 R
+(100) Cshow
+1.000 UL
+LTb
+336 280 M
+6696 0 V
+0 4592 V
+-6696 0 V
+336 280 L
+1.000 UP
+1.000 UL
+LT0
+336 3035 Pls
+336 3035 Pls
+336 3035 Pls
+336 3035 Pls
+336 3035 Pls
+336 3035 Pls
+337 3035 Pls
+343 3033 Pls
+361 3002 Pls
+371 2964 Pls
+379 2914 Pls
+385 2845 Pls
+390 2743 Pls
+393 2642 Pls
+396 2508 Pls
+399 2310 Pls
+400 2140 Pls
+402 1961 Pls
+404 1832 Pls
+406 1746 Pls
+407 1698 Pls
+409 1672 Pls
+411 1660 Pls
+413 1655 Pls
+415 1654 Pls
+418 1654 Pls
+420 1655 Pls
+424 1656 Pls
+427 1658 Pls
+432 1660 Pls
+437 1662 Pls
+444 1665 Pls
+452 1669 Pls
+463 1674 Pls
+473 1679 Pls
+483 1684 Pls
+494 1689 Pls
+504 1694 Pls
+515 1699 Pls
+525 1705 Pls
+536 1710 Pls
+546 1715 Pls
+557 1721 Pls
+568 1726 Pls
+578 1732 Pls
+589 1738 Pls
+600 1744 Pls
+611 1750 Pls
+623 1756 Pls
+634 1762 Pls
+645 1769 Pls
+657 1775 Pls
+668 1782 Pls
+680 1789 Pls
+692 1796 Pls
+704 1804 Pls
+716 1811 Pls
+728 1819 Pls
+740 1827 Pls
+753 1836 Pls
+766 1845 Pls
+779 1854 Pls
+792 1864 Pls
+805 1874 Pls
+819 1885 Pls
+833 1896 Pls
+847 1908 Pls
+862 1922 Pls
+877 1936 Pls
+892 1952 Pls
+908 1969 Pls
+925 1990 Pls
+943 2015 Pls
+962 2047 Pls
+984 2095 Pls
+998 2143 Pls
+1007 2191 Pls
+1014 2250 Pls
+1020 2333 Pls
+1024 2429 Pls
+1027 2541 Pls
+1029 2691 Pls
+1032 2903 Pls
+1034 3077 Pls
+1036 3242 Pls
+1037 3365 Pls
+1039 3431 Pls
+1041 3468 Pls
+1042 3488 Pls
+1044 3497 Pls
+1046 3500 Pls
+1049 3501 Pls
+1051 3500 Pls
+1054 3499 Pls
+1057 3498 Pls
+1061 3496 Pls
+1066 3494 Pls
+1072 3492 Pls
+1079 3488 Pls
+1089 3484 Pls
+1099 3479 Pls
+1109 3474 Pls
+1119 3469 Pls
+1130 3464 Pls
+1140 3459 Pls
+1150 3454 Pls
+1161 3449 Pls
+1171 3444 Pls
+1182 3438 Pls
+1193 3433 Pls
+1203 3427 Pls
+1214 3422 Pls
+1225 3416 Pls
+1236 3410 Pls
+1247 3404 Pls
+1258 3398 Pls
+1269 3392 Pls
+1281 3385 Pls
+1292 3379 Pls
+1304 3372 Pls
+1315 3365 Pls
+1327 3358 Pls
+1339 3350 Pls
+1351 3343 Pls
+1363 3335 Pls
+1376 3327 Pls
+1388 3318 Pls
+1401 3310 Pls
+1414 3301 Pls
+1427 3291 Pls
+1440 3281 Pls
+1454 3270 Pls
+1468 3259 Pls
+1482 3247 Pls
+1496 3234 Pls
+1511 3220 Pls
+1526 3205 Pls
+1542 3188 Pls
+1559 3168 Pls
+1576 3145 Pls
+1595 3115 Pls
+1616 3073 Pls
+1634 3020 Pls
+1643 2974 Pls
+1651 2919 Pls
+1657 2845 Pls
+1662 2744 Pls
+1665 2639 Pls
+1667 2501 Pls
+1670 2301 Pls
+1672 2129 Pls
+1674 1952 Pls
+1675 1825 Pls
+1677 1741 Pls
+1679 1694 Pls
+1681 1669 Pls
+1682 1657 Pls
+1684 1653 Pls
+1687 1651 Pls
+1689 1651 Pls
+1692 1652 Pls
+1695 1654 Pls
+1699 1655 Pls
+1703 1657 Pls
+1708 1660 Pls
+1715 1663 Pls
+1724 1667 Pls
+1734 1671 Pls
+1744 1676 Pls
+1755 1681 Pls
+1765 1686 Pls
+1775 1691 Pls
+1786 1696 Pls
+1796 1701 Pls
+1807 1707 Pls
+1817 1712 Pls
+1828 1717 Pls
+1838 1723 Pls
+1849 1728 Pls
+1860 1734 Pls
+1871 1740 Pls
+1882 1746 Pls
+1893 1752 Pls
+1904 1758 Pls
+1916 1765 Pls
+1927 1771 Pls
+1938 1778 Pls
+1950 1785 Pls
+1962 1792 Pls
+1974 1799 Pls
+1986 1807 Pls
+1998 1814 Pls
+2010 1822 Pls
+2023 1831 Pls
+2035 1839 Pls
+2048 1848 Pls
+2061 1858 Pls
+2074 1868 Pls
+2088 1878 Pls
+2101 1889 Pls
+2116 1901 Pls
+2130 1913 Pls
+2145 1927 Pls
+2160 1942 Pls
+2176 1958 Pls
+2192 1977 Pls
+2209 1999 Pls
+2227 2026 Pls
+2247 2062 Pls
+2270 2122 Pls
+2279 2164 Pls
+2288 2216 Pls
+2294 2283 Pls
+2301 2415 Pls
+2304 2516 Pls
+2306 2656 Pls
+2309 2858 Pls
+2311 3029 Pls
+2313 3205 Pls
+2314 3331 Pls
+2316 3414 Pls
+2318 3460 Pls
+2319 3484 Pls
+2321 3495 Pls
+2323 3500 Pls
+2325 3501 Pls
+2328 3501 Pls
+2331 3500 Pls
+2334 3498 Pls
+2338 3497 Pls
+2342 3495 Pls
+2347 3492 Pls
+2354 3489 Pls
+2363 3485 Pls
+2373 3480 Pls
+2383 3476 Pls
+2394 3471 Pls
+2404 3466 Pls
+2414 3461 Pls
+2425 3456 Pls
+2435 3451 Pls
+2446 3445 Pls
+2456 3440 Pls
+2467 3435 Pls
+2477 3429 Pls
+2488 3423 Pls
+2499 3418 Pls
+2510 3412 Pls
+2521 3406 Pls
+2532 3400 Pls
+2543 3394 Pls
+2555 3387 Pls
+2566 3381 Pls
+2577 3374 Pls
+2589 3367 Pls
+2601 3360 Pls
+2613 3353 Pls
+2625 3345 Pls
+2637 3337 Pls
+2649 3329 Pls
+2662 3321 Pls
+2674 3312 Pls
+2687 3303 Pls
+2700 3294 Pls
+2713 3284 Pls
+2727 3274 Pls
+2741 3263 Pls
+2755 3251 Pls
+2769 3238 Pls
+2784 3225 Pls
+2799 3210 Pls
+2815 3194 Pls
+2831 3175 Pls
+2848 3153 Pls
+2867 3126 Pls
+2887 3089 Pls
+2909 3027 Pls
+2919 2987 Pls
+2927 2934 Pls
+2933 2866 Pls
+2940 2732 Pls
+2942 2630 Pls
+2945 2488 Pls
+2948 2283 Pls
+2950 2111 Pls
+2951 1938 Pls
+2953 1801 Pls
+2955 1730 Pls
+2957 1689 Pls
+2958 1666 Pls
+2960 1656 Pls
+2962 1652 Pls
+2965 1651 Pls
+2967 1651 Pls
+2970 1652 Pls
+2973 1654 Pls
+2977 1656 Pls
+2982 1658 Pls
+2987 1660 Pls
+2994 1663 Pls
+3004 1668 Pls
+3014 1672 Pls
+3024 1677 Pls
+3034 1682 Pls
+3044 1687 Pls
+3055 1692 Pls
+3065 1697 Pls
+3075 1702 Pls
+3086 1708 Pls
+3096 1713 Pls
+3107 1718 Pls
+3118 1724 Pls
+3129 1729 Pls
+3139 1735 Pls
+3150 1741 Pls
+3161 1747 Pls
+3173 1753 Pls
+3184 1759 Pls
+3195 1766 Pls
+3206 1772 Pls
+3218 1779 Pls
+3230 1786 Pls
+3241 1793 Pls
+3253 1800 Pls
+3265 1808 Pls
+3277 1816 Pls
+3290 1824 Pls
+3302 1832 Pls
+3315 1841 Pls
+3328 1850 Pls
+3341 1859 Pls
+3354 1869 Pls
+3368 1880 Pls
+3381 1891 Pls
+3396 1903 Pls
+3410 1916 Pls
+3425 1929 Pls
+3440 1944 Pls
+3456 1961 Pls
+3472 1980 Pls
+3490 2003 Pls
+3508 2031 Pls
+3529 2070 Pls
+3548 2125 Pls
+3558 2169 Pls
+3566 2222 Pls
+3572 2292 Pls
+3578 2406 Pls
+3581 2506 Pls
+3583 2642 Pls
+3586 2840 Pls
+3588 3011 Pls
+3590 3191 Pls
+3592 3320 Pls
+3593 3407 Pls
+3595 3456 Pls
+3597 3482 Pls
+3599 3494 Pls
+3600 3499 Pls
+3603 3501 Pls
+3605 3501 Pls
+3608 3500 Pls
+3611 3499 Pls
+3615 3497 Pls
+3619 3495 Pls
+3624 3493 Pls
+3630 3490 Pls
+3639 3486 Pls
+3649 3481 Pls
+3660 3476 Pls
+3670 3471 Pls
+3681 3466 Pls
+3691 3461 Pls
+3702 3456 Pls
+3712 3451 Pls
+3723 3445 Pls
+3733 3440 Pls
+3744 3435 Pls
+3755 3429 Pls
+3765 3424 Pls
+3776 3418 Pls
+3787 3412 Pls
+3798 3406 Pls
+3809 3400 Pls
+3821 3394 Pls
+3832 3387 Pls
+3843 3381 Pls
+3855 3374 Pls
+3866 3367 Pls
+3878 3360 Pls
+3890 3353 Pls
+3902 3345 Pls
+3914 3338 Pls
+3926 3330 Pls
+3939 3321 Pls
+3951 3313 Pls
+3964 3304 Pls
+3977 3294 Pls
+3991 3284 Pls
+4004 3274 Pls
+4018 3263 Pls
+4032 3251 Pls
+4046 3239 Pls
+4061 3225 Pls
+4076 3210 Pls
+4092 3194 Pls
+4108 3175 Pls
+4125 3153 Pls
+4144 3126 Pls
+4164 3090 Pls
+4186 3029 Pls
+4196 2988 Pls
+4204 2936 Pls
+4210 2869 Pls
+4217 2736 Pls
+4220 2635 Pls
+4222 2495 Pls
+4225 2292 Pls
+4227 2121 Pls
+4229 1945 Pls
+4231 1820 Pls
+4232 1738 Pls
+4234 1692 Pls
+4236 1667 Pls
+4238 1657 Pls
+4240 1652 Pls
+4242 1651 Pls
+4244 1651 Pls
+4247 1652 Pls
+4250 1654 Pls
+4254 1655 Pls
+4258 1657 Pls
+4264 1660 Pls
+4270 1663 Pls
+4279 1667 Pls
+4290 1672 Pls
+4300 1677 Pls
+4310 1681 Pls
+4320 1686 Pls
+4331 1691 Pls
+4341 1696 Pls
+4351 1702 Pls
+4362 1707 Pls
+4373 1712 Pls
+4383 1718 Pls
+4394 1723 Pls
+4405 1729 Pls
+4415 1734 Pls
+4426 1740 Pls
+4437 1746 Pls
+4448 1752 Pls
+4460 1758 Pls
+4471 1765 Pls
+4482 1771 Pls
+4494 1778 Pls
+4506 1785 Pls
+4517 1792 Pls
+4529 1799 Pls
+4541 1807 Pls
+4553 1815 Pls
+4566 1823 Pls
+4578 1831 Pls
+4591 1840 Pls
+4604 1849 Pls
+4617 1858 Pls
+4630 1868 Pls
+4643 1878 Pls
+4657 1889 Pls
+4671 1901 Pls
+4685 1914 Pls
+4700 1927 Pls
+4715 1942 Pls
+4731 1959 Pls
+4748 1978 Pls
+4765 2000 Pls
+4783 2027 Pls
+4803 2064 Pls
+4826 2126 Pls
+4835 2166 Pls
+4843 2220 Pls
+4849 2288 Pls
+4856 2423 Pls
+4859 2526 Pls
+4861 2669 Pls
+4864 2875 Pls
+4866 3048 Pls
+4868 3219 Pls
+4870 3351 Pls
+4871 3422 Pls
+4873 3463 Pls
+4875 3487 Pls
+4877 3496 Pls
+4879 3500 Pls
+4881 3501 Pls
+4883 3501 Pls
+4886 3500 Pls
+4890 3498 Pls
+4893 3496 Pls
+4898 3494 Pls
+4903 3492 Pls
+4910 3489 Pls
+4920 3484 Pls
+4930 3479 Pls
+4940 3475 Pls
+4950 3470 Pls
+4961 3465 Pls
+4971 3460 Pls
+4981 3455 Pls
+4992 3450 Pls
+5002 3444 Pls
+5013 3439 Pls
+5024 3434 Pls
+5034 3428 Pls
+5045 3423 Pls
+5056 3417 Pls
+5067 3411 Pls
+5078 3405 Pls
+5089 3399 Pls
+5100 3393 Pls
+5111 3386 Pls
+5123 3380 Pls
+5134 3373 Pls
+5146 3366 Pls
+5158 3359 Pls
+5170 3352 Pls
+5182 3344 Pls
+5194 3336 Pls
+5206 3328 Pls
+5219 3320 Pls
+5231 3311 Pls
+5244 3302 Pls
+5257 3292 Pls
+5271 3282 Pls
+5284 3272 Pls
+5298 3261 Pls
+5312 3249 Pls
+5326 3236 Pls
+5341 3223 Pls
+5357 3207 Pls
+5372 3191 Pls
+5389 3171 Pls
+5406 3149 Pls
+5425 3120 Pls
+5445 3081 Pls
+5464 3027 Pls
+5474 2982 Pls
+5482 2929 Pls
+5488 2859 Pls
+5494 2747 Pls
+5497 2647 Pls
+5500 2511 Pls
+5502 2313 Pls
+5504 2142 Pls
+5506 1962 Pls
+5508 1833 Pls
+5509 1746 Pls
+5511 1697 Pls
+5513 1670 Pls
+5515 1658 Pls
+5517 1653 Pls
+5519 1651 Pls
+5521 1651 Pls
+5524 1652 Pls
+5527 1653 Pls
+5531 1655 Pls
+5535 1657 Pls
+5540 1659 Pls
+5547 1662 Pls
+5555 1666 Pls
+5566 1671 Pls
+5576 1676 Pls
+5587 1681 Pls
+5597 1686 Pls
+5608 1691 Pls
+5618 1696 Pls
+5629 1701 Pls
+5639 1707 Pls
+5650 1712 Pls
+5660 1717 Pls
+5671 1723 Pls
+5682 1728 Pls
+5693 1734 Pls
+5704 1740 Pls
+5715 1746 Pls
+5726 1752 Pls
+5737 1758 Pls
+5748 1765 Pls
+5760 1771 Pls
+5771 1778 Pls
+5783 1785 Pls
+5794 1792 Pls
+5806 1799 Pls
+5818 1807 Pls
+5830 1814 Pls
+5843 1822 Pls
+5855 1831 Pls
+5868 1839 Pls
+5881 1848 Pls
+5894 1858 Pls
+5907 1868 Pls
+5920 1878 Pls
+5934 1889 Pls
+5948 1901 Pls
+5963 1913 Pls
+5977 1927 Pls
+5993 1942 Pls
+6008 1958 Pls
+6025 1977 Pls
+6042 1999 Pls
+6060 2026 Pls
+6080 2063 Pls
+6103 2124 Pls
+6112 2164 Pls
+6120 2217 Pls
+6127 2284 Pls
+6133 2418 Pls
+6136 2519 Pls
+6139 2660 Pls
+6141 2863 Pls
+6143 3035 Pls
+6145 3210 Pls
+6147 3335 Pls
+6148 3416 Pls
+6150 3461 Pls
+6152 3485 Pls
+6154 3496 Pls
+6156 3500 Pls
+6158 3501 Pls
+6161 3501 Pls
+6163 3500 Pls
+6167 3498 Pls
+6170 3497 Pls
+6175 3495 Pls
+6180 3492 Pls
+6187 3489 Pls
+6196 3485 Pls
+6206 3480 Pls
+6217 3475 Pls
+6227 3470 Pls
+6237 3465 Pls
+6247 3460 Pls
+6258 3455 Pls
+6268 3450 Pls
+6279 3445 Pls
+6289 3440 Pls
+6300 3434 Pls
+6310 3429 Pls
+6321 3423 Pls
+6332 3417 Pls
+6343 3412 Pls
+6354 3406 Pls
+6365 3400 Pls
+6376 3393 Pls
+6388 3387 Pls
+6399 3380 Pls
+6411 3374 Pls
+6422 3367 Pls
+6434 3360 Pls
+6446 3352 Pls
+6458 3345 Pls
+6470 3337 Pls
+6482 3329 Pls
+6495 3321 Pls
+6507 3312 Pls
+6520 3303 Pls
+6533 3294 Pls
+6547 3284 Pls
+6560 3273 Pls
+6574 3262 Pls
+6588 3250 Pls
+6602 3238 Pls
+6617 3224 Pls
+6632 3209 Pls
+6648 3193 Pls
+6664 3174 Pls
+6682 3152 Pls
+6700 3124 Pls
+6720 3086 Pls
+6743 3023 Pls
+6752 2983 Pls
+6760 2928 Pls
+6766 2859 Pls
+6772 2747 Pls
+6775 2647 Pls
+6777 2511 Pls
+6780 2313 Pls
+6782 2142 Pls
+6784 1962 Pls
+6785 1833 Pls
+6787 1746 Pls
+6789 1697 Pls
+6790 1670 Pls
+6792 1658 Pls
+6794 1653 Pls
+6796 1651 Pls
+6799 1651 Pls
+6801 1652 Pls
+6805 1653 Pls
+6808 1655 Pls
+6812 1657 Pls
+6818 1659 Pls
+6824 1662 Pls
+6833 1666 Pls
+6843 1671 Pls
+6854 1676 Pls
+6864 1681 Pls
+6875 1686 Pls
+6885 1691 Pls
+6896 1696 Pls
+6906 1701 Pls
+6917 1707 Pls
+6927 1712 Pls
+6938 1717 Pls
+6949 1723 Pls
+6959 1728 Pls
+6970 1734 Pls
+6981 1740 Pls
+6992 1746 Pls
+7003 1752 Pls
+7014 1758 Pls
+7026 1765 Pls
+7032 1768 Pls
+stroke
+grestore
+end
+showpage
+%%Trailer
+%%DocumentFonts: Helvetica
diff --git a/gsl-1.9/doc/vectors.texi b/gsl-1.9/doc/vectors.texi
new file mode 100644
index 0000000..e17a1af
--- /dev/null
+++ b/gsl-1.9/doc/vectors.texi
@@ -0,0 +1,1616 @@
+@cindex blocks
+@cindex vectors
+@cindex matrices
+
+The functions described in this chapter provide a simple vector and
+matrix interface to ordinary C arrays. The memory management of these
+arrays is implemented using a single underlying type, known as a
+block. By writing your functions in terms of vectors and matrices you
+can pass a single structure containing both data and dimensions as an
+argument without needing additional function parameters. The structures
+are compatible with the vector and matrix formats used by @sc{blas}
+routines.
+
+@menu
+* Data types::
+* Blocks::
+* Vectors::
+* Matrices::
+* Vector and Matrix References and Further Reading::
+@end menu
+
+@node Data types
+@section Data types
+
+All the functions are available for each of the standard data-types.
+The versions for @code{double} have the prefix @code{gsl_block},
+@code{gsl_vector} and @code{gsl_matrix}. Similarly the versions for
+single-precision @code{float} arrays have the prefix
+@code{gsl_block_float}, @code{gsl_vector_float} and
+@code{gsl_matrix_float}. The full list of available types is given
+below,
+
+@example
+gsl_block double
+gsl_block_float float
+gsl_block_long_double long double
+gsl_block_int int
+gsl_block_uint unsigned int
+gsl_block_long long
+gsl_block_ulong unsigned long
+gsl_block_short short
+gsl_block_ushort unsigned short
+gsl_block_char char
+gsl_block_uchar unsigned char
+gsl_block_complex complex double
+gsl_block_complex_float complex float
+gsl_block_complex_long_double complex long double
+@end example
+
+@noindent
+Corresponding types exist for the @code{gsl_vector} and
+@code{gsl_matrix} functions.
+
+
+
+@node Blocks
+@section Blocks
+
+For consistency all memory is allocated through a @code{gsl_block}
+structure. The structure contains two components, the size of an area of
+memory and a pointer to the memory. The @code{gsl_block} structure looks
+like this,
+
+@example
+typedef struct
+@{
+ size_t size;
+ double * data;
+@} gsl_block;
+@end example
+@comment
+
+@noindent
+Vectors and matrices are made by @dfn{slicing} an underlying block. A
+slice is a set of elements formed from an initial offset and a
+combination of indices and step-sizes. In the case of a matrix the
+step-size for the column index represents the row-length. The step-size
+for a vector is known as the @dfn{stride}.
+
+The functions for allocating and deallocating blocks are defined in
+@file{gsl_block.h}
+
+@menu
+* Block allocation::
+* Reading and writing blocks::
+* Example programs for blocks::
+@end menu
+
+@node Block allocation
+@subsection Block allocation
+
+The functions for allocating memory to a block follow the style of
+@code{malloc} and @code{free}. In addition they also perform their own
+error checking. If there is insufficient memory available to allocate a
+block then the functions call the GSL error handler (with an error
+number of @code{GSL_ENOMEM}) in addition to returning a null
+pointer. Thus if you use the library error handler to abort your program
+then it isn't necessary to check every @code{alloc}.
+
+@deftypefun {gsl_block *} gsl_block_alloc (size_t @var{n})
+This function allocates memory for a block of @var{n} double-precision
+elements, returning a pointer to the block struct. The block is not
+initialized and so the values of its elements are undefined. Use the
+function @code{gsl_block_calloc} if you want to ensure that all the
+elements are initialized to zero.
+
+A null pointer is returned if insufficient memory is available to create
+the block.
+@end deftypefun
+
+@deftypefun {gsl_block *} gsl_block_calloc (size_t @var{n})
+This function allocates memory for a block and initializes all the
+elements of the block to zero.
+@end deftypefun
+
+@deftypefun void gsl_block_free (gsl_block * @var{b})
+This function frees the memory used by a block @var{b} previously
+allocated with @code{gsl_block_alloc} or @code{gsl_block_calloc}. The
+block @var{b} must be a valid block object (a null pointer is not
+allowed).
+@end deftypefun
+
+@node Reading and writing blocks
+@subsection Reading and writing blocks
+
+The library provides functions for reading and writing blocks to a file
+as binary data or formatted text.
+
+@deftypefun int gsl_block_fwrite (FILE * @var{stream}, const gsl_block * @var{b})
+This function writes the elements of the block @var{b} to the stream
+@var{stream} in binary format. The return value is 0 for success and
+@code{GSL_EFAILED} if there was a problem writing to the file. Since the
+data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_block_fread (FILE * @var{stream}, gsl_block * @var{b})
+This function reads into the block @var{b} from the open stream
+@var{stream} in binary format. The block @var{b} must be preallocated
+with the correct length since the function uses the size of @var{b} to
+determine how many bytes to read. The return value is 0 for success and
+@code{GSL_EFAILED} if there was a problem reading from the file. The
+data is assumed to have been written in the native binary format on the
+same architecture.
+@end deftypefun
+
+@deftypefun int gsl_block_fprintf (FILE * @var{stream}, const gsl_block * @var{b}, const char * @var{format})
+This function writes the elements of the block @var{b} line-by-line to
+the stream @var{stream} using the format specifier @var{format}, which
+should be one of the @code{%g}, @code{%e} or @code{%f} formats for
+floating point numbers and @code{%d} for integers. The function returns
+0 for success and @code{GSL_EFAILED} if there was a problem writing to
+the file.
+@end deftypefun
+
+@deftypefun int gsl_block_fscanf (FILE * @var{stream}, gsl_block * @var{b})
+This function reads formatted data from the stream @var{stream} into the
+block @var{b}. The block @var{b} must be preallocated with the correct
+length since the function uses the size of @var{b} to determine how many
+numbers to read. The function returns 0 for success and
+@code{GSL_EFAILED} if there was a problem reading from the file.
+@end deftypefun
+@comment
+
+@node Example programs for blocks
+@subsection Example programs for blocks
+
+The following program shows how to allocate a block,
+
+@example
+@verbatiminclude examples/block.c
+@end example
+@comment
+
+@noindent
+Here is the output from the program,
+
+@example
+@verbatiminclude examples/block.out
+@end example
+@comment
+
+@node Vectors
+@section Vectors
+@cindex vectors
+@cindex stride, of vector index
+
+Vectors are defined by a @code{gsl_vector} structure which describes a
+slice of a block. Different vectors can be created which point to the
+same block. A vector slice is a set of equally-spaced elements of an
+area of memory.
+
+The @code{gsl_vector} structure contains five components, the
+@dfn{size}, the @dfn{stride}, a pointer to the memory where the elements
+are stored, @var{data}, a pointer to the block owned by the vector,
+@var{block}, if any, and an ownership flag, @var{owner}. The structure
+is very simple and looks like this,
+
+@example
+typedef struct
+@{
+ size_t size;
+ size_t stride;
+ double * data;
+ gsl_block * block;
+ int owner;
+@} gsl_vector;
+@end example
+@comment
+
+@noindent
+The @var{size} is simply the number of vector elements. The range of
+valid indices runs from 0 to @code{size-1}. The @var{stride} is the
+step-size from one element to the next in physical memory, measured in
+units of the appropriate datatype. The pointer @var{data} gives the
+location of the first element of the vector in memory. The pointer
+@var{block} stores the location of the memory block in which the vector
+elements are located (if any). If the vector owns this block then the
+@var{owner} field is set to one and the block will be deallocated when the
+vector is freed. If the vector points to a block owned by another
+object then the @var{owner} field is zero and any underlying block will not be
+deallocated with the vector.
+
+The functions for allocating and accessing vectors are defined in
+@file{gsl_vector.h}
+
+@menu
+* Vector allocation::
+* Accessing vector elements::
+* Initializing vector elements::
+* Reading and writing vectors::
+* Vector views::
+* Copying vectors::
+* Exchanging elements::
+* Vector operations::
+* Finding maximum and minimum elements of vectors::
+* Vector properties::
+* Example programs for vectors::
+@end menu
+
+@node Vector allocation
+@subsection Vector allocation
+
+The functions for allocating memory to a vector follow the style of
+@code{malloc} and @code{free}. In addition they also perform their own
+error checking. If there is insufficient memory available to allocate a
+vector then the functions call the GSL error handler (with an error
+number of @code{GSL_ENOMEM}) in addition to returning a null
+pointer. Thus if you use the library error handler to abort your program
+then it isn't necessary to check every @code{alloc}.
+
+@deftypefun {gsl_vector *} gsl_vector_alloc (size_t @var{n})
+This function creates a vector of length @var{n}, returning a pointer to
+a newly initialized vector struct. A new block is allocated for the
+elements of the vector, and stored in the @var{block} component of the
+vector struct. The block is ``owned'' by the vector, and will be
+deallocated when the vector is deallocated.
+@end deftypefun
+
+@deftypefun {gsl_vector *} gsl_vector_calloc (size_t @var{n})
+This function allocates memory for a vector of length @var{n} and
+initializes all the elements of the vector to zero.
+@end deftypefun
+
+@deftypefun void gsl_vector_free (gsl_vector * @var{v})
+This function frees a previously allocated vector @var{v}. If the
+vector was created using @code{gsl_vector_alloc} then the block
+underlying the vector will also be deallocated. If the vector has
+been created from another object then the memory is still owned by
+that object and will not be deallocated. The vector @var{v} must be a
+valid vector object (a null pointer is not allowed).
+@end deftypefun
+
+@node Accessing vector elements
+@subsection Accessing vector elements
+@cindex vectors, range-checking
+@cindex range-checking for vectors
+@cindex bounds checking, extension to GCC
+@cindex gcc extensions, range-checking
+@cindex Fortran range checking, equivalent in gcc
+
+Unlike @sc{fortran} compilers, C compilers do not usually provide
+support for range checking of vectors and matrices. Range checking is
+available in the GNU C Compiler bounds-checking extension, but it is not
+part of the default installation of GCC. The functions
+@code{gsl_vector_get} and @code{gsl_vector_set} can perform portable
+range checking for you and report an error if you attempt to access
+elements outside the allowed range.
+
+The functions for accessing the elements of a vector or matrix are
+defined in @file{gsl_vector.h} and declared @code{extern inline} to
+eliminate function-call overhead. You must compile your program with
+the macro @code{HAVE_INLINE} defined to use these functions.
+
+If necessary you can turn off range checking completely without
+modifying any source files by recompiling your program with the
+preprocessor definition @code{GSL_RANGE_CHECK_OFF}. Provided your
+compiler supports inline functions the effect of turning off range
+checking is to replace calls to @code{gsl_vector_get(v,i)} by
+@code{v->data[i*v->stride]} and calls to @code{gsl_vector_set(v,i,x)} by
+@code{v->data[i*v->stride]=x}. Thus there should be no performance
+penalty for using the range checking functions when range checking is
+turned off.
+
+@deftypefun double gsl_vector_get (const gsl_vector * @var{v}, size_t @var{i})
+This function returns the @var{i}-th element of a vector @var{v}. If
+@var{i} lies outside the allowed range of 0 to @math{@var{n}-1} then the error
+handler is invoked and 0 is returned.
+@end deftypefun
+
+@deftypefun void gsl_vector_set (gsl_vector * @var{v}, size_t @var{i}, double @var{x})
+This function sets the value of the @var{i}-th element of a vector
+@var{v} to @var{x}. If @var{i} lies outside the allowed range of 0 to
+@math{@var{n}-1} then the error handler is invoked.
+@end deftypefun
+
+@deftypefun {double *} gsl_vector_ptr (gsl_vector * @var{v}, size_t @var{i})
+@deftypefunx {const double *} gsl_vector_const_ptr (const gsl_vector * @var{v}, size_t @var{i})
+These functions return a pointer to the @var{i}-th element of a vector
+@var{v}. If @var{i} lies outside the allowed range of 0 to @math{@var{n}-1}
+then the error handler is invoked and a null pointer is returned.
+@end deftypefun
+
+@node Initializing vector elements
+@subsection Initializing vector elements
+@cindex vectors, initializing
+@cindex initializing vectors
+
+@deftypefun void gsl_vector_set_all (gsl_vector * @var{v}, double @var{x})
+This function sets all the elements of the vector @var{v} to the value
+@var{x}.
+@end deftypefun
+
+@deftypefun void gsl_vector_set_zero (gsl_vector * @var{v})
+This function sets all the elements of the vector @var{v} to zero.
+@end deftypefun
+
+@deftypefun int gsl_vector_set_basis (gsl_vector * @var{v}, size_t @var{i})
+This function makes a basis vector by setting all the elements of the
+vector @var{v} to zero except for the @var{i}-th element which is set to
+one.
+@end deftypefun
+
+@node Reading and writing vectors
+@subsection Reading and writing vectors
+
+The library provides functions for reading and writing vectors to a file
+as binary data or formatted text.
+
+@deftypefun int gsl_vector_fwrite (FILE * @var{stream}, const gsl_vector * @var{v})
+This function writes the elements of the vector @var{v} to the stream
+@var{stream} in binary format. The return value is 0 for success and
+@code{GSL_EFAILED} if there was a problem writing to the file. Since the
+data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_vector_fread (FILE * @var{stream}, gsl_vector * @var{v})
+This function reads into the vector @var{v} from the open stream
+@var{stream} in binary format. The vector @var{v} must be preallocated
+with the correct length since the function uses the size of @var{v} to
+determine how many bytes to read. The return value is 0 for success and
+@code{GSL_EFAILED} if there was a problem reading from the file. The
+data is assumed to have been written in the native binary format on the
+same architecture.
+@end deftypefun
+
+@deftypefun int gsl_vector_fprintf (FILE * @var{stream}, const gsl_vector * @var{v}, const char * @var{format})
+This function writes the elements of the vector @var{v} line-by-line to
+the stream @var{stream} using the format specifier @var{format}, which
+should be one of the @code{%g}, @code{%e} or @code{%f} formats for
+floating point numbers and @code{%d} for integers. The function returns
+0 for success and @code{GSL_EFAILED} if there was a problem writing to
+the file.
+@end deftypefun
+
+@deftypefun int gsl_vector_fscanf (FILE * @var{stream}, gsl_vector * @var{v})
+This function reads formatted data from the stream @var{stream} into the
+vector @var{v}. The vector @var{v} must be preallocated with the correct
+length since the function uses the size of @var{v} to determine how many
+numbers to read. The function returns 0 for success and
+@code{GSL_EFAILED} if there was a problem reading from the file.
+@end deftypefun
+
+@node Vector views
+@subsection Vector views
+
+In addition to creating vectors from slices of blocks it is also
+possible to slice vectors and create vector views. For example, a
+subvector of another vector can be described with a view, or two views
+can be made which provide access to the even and odd elements of a
+vector.
+
+A vector view is a temporary object, stored on the stack, which can be
+used to operate on a subset of vector elements. Vector views can be
+defined for both constant and non-constant vectors, using separate types
+that preserve constness. A vector view has the type
+@code{gsl_vector_view} and a constant vector view has the type
+@code{gsl_vector_const_view}. In both cases the elements of the view
+can be accessed as a @code{gsl_vector} using the @code{vector} component
+of the view object. A pointer to a vector of type @code{gsl_vector *}
+or @code{const gsl_vector *} can be obtained by taking the address of
+this component with the @code{&} operator.
+
+When using this pointer it is important to ensure that the view itself
+remains in scope---the simplest way to do so is by always writing the
+pointer as @code{&}@var{view}@code{.vector}, and never storing this value
+in another variable.
+
+@deftypefun gsl_vector_view gsl_vector_subvector (gsl_vector * @var{v}, size_t @var{offset}, size_t @var{n})
+@deftypefunx {gsl_vector_const_view} gsl_vector_const_subvector (const gsl_vector * @var{v}, size_t @var{offset}, size_t @var{n})
+These functions return a vector view of a subvector of another vector
+@var{v}. The start of the new vector is offset by @var{offset} elements
+from the start of the original vector. The new vector has @var{n}
+elements. Mathematically, the @var{i}-th element of the new vector
+@var{v'} is given by,
+
+@example
+v'(i) = v->data[(offset + i)*v->stride]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n-1}.
+
+The @code{data} pointer of the returned vector struct is set to null if
+the combined parameters (@var{offset},@var{n}) overrun the end of the
+original vector.
+
+The new vector is only a view of the block underlying the original
+vector, @var{v}. The block containing the elements of @var{v} is not
+owned by the new vector. When the view goes out of scope the original
+vector @var{v} and its block will continue to exist. The original
+memory can only be deallocated by freeing the original vector. Of
+course, the original vector should not be deallocated while the view is
+still in use.
+
+The function @code{gsl_vector_const_subvector} is equivalent to
+@code{gsl_vector_subvector} but can be used for vectors which are
+declared @code{const}.
+@end deftypefun
+
+
+@deftypefun gsl_vector_view gsl_vector_subvector_with_stride (gsl_vector * @var{v}, size_t @var{offset}, size_t @var{stride}, size_t @var{n})
+@deftypefunx {gsl_vector_const_view} gsl_vector_const_subvector_with_stride (const gsl_vector * @var{v}, size_t @var{offset}, size_t @var{stride}, size_t @var{n})
+These functions return a vector view of a subvector of another vector
+@var{v} with an additional stride argument. The subvector is formed in
+the same way as for @code{gsl_vector_subvector} but the new vector has
+@var{n} elements with a step-size of @var{stride} from one element to
+the next in the original vector. Mathematically, the @var{i}-th element
+of the new vector @var{v'} is given by,
+
+@example
+v'(i) = v->data[(offset + i*stride)*v->stride]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n-1}.
+
+Note that subvector views give direct access to the underlying elements
+of the original vector. For example, the following code will zero the
+even elements of the vector @code{v} of length @code{n}, while leaving the
+odd elements untouched,
+
+@example
+gsl_vector_view v_even
+ = gsl_vector_subvector_with_stride (v, 0, 2, n/2);
+gsl_vector_set_zero (&v_even.vector);
+@end example
+
+@noindent
+A vector view can be passed to any subroutine which takes a vector
+argument just as a directly allocated vector would be, using
+@code{&}@var{view}@code{.vector}. For example, the following code
+computes the norm of the odd elements of @code{v} using the @sc{blas}
+routine @sc{dnrm2},
+
+@example
+gsl_vector_view v_odd
+ = gsl_vector_subvector_with_stride (v, 1, 2, n/2);
+double r = gsl_blas_dnrm2 (&v_odd.vector);
+@end example
+
+The function @code{gsl_vector_const_subvector_with_stride} is equivalent
+to @code{gsl_vector_subvector_with_stride} but can be used for vectors
+which are declared @code{const}.
+@end deftypefun
+
+@deftypefun gsl_vector_view gsl_vector_complex_real (gsl_vector_complex * @var{v})
+@deftypefunx {gsl_vector_const_view} gsl_vector_complex_const_real (const gsl_vector_complex * @var{v})
+These functions return a vector view of the real parts of the complex
+vector @var{v}.
+
+The function @code{gsl_vector_complex_const_real} is equivalent to
+@code{gsl_vector_complex_real} but can be used for vectors which are
+declared @code{const}.
+@end deftypefun
+
+@deftypefun gsl_vector_view gsl_vector_complex_imag (gsl_vector_complex * @var{v})
+@deftypefunx {gsl_vector_const_view} gsl_vector_complex_const_imag (const gsl_vector_complex * @var{v})
+These functions return a vector view of the imaginary parts of the
+complex vector @var{v}.
+
+The function @code{gsl_vector_complex_const_imag} is equivalent to
+@code{gsl_vector_complex_imag} but can be used for vectors which are
+declared @code{const}.
+@end deftypefun
+
+@deftypefun gsl_vector_view gsl_vector_view_array (double * @var{base}, size_t @var{n})
+@deftypefunx {gsl_vector_const_view} gsl_vector_const_view_array (const double * @var{base}, size_t @var{n})
+These functions return a vector view of an array. The start of the new
+vector is given by @var{base} and has @var{n} elements. Mathematically,
+the @var{i}-th element of the new vector @var{v'} is given by,
+
+@example
+v'(i) = base[i]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n-1}.
+
+The array containing the elements of @var{v} is not owned by the new
+vector view. When the view goes out of scope the original array will
+continue to exist. The original memory can only be deallocated by
+freeing the original pointer @var{base}. Of course, the original array
+should not be deallocated while the view is still in use.
+
+The function @code{gsl_vector_const_view_array} is equivalent to
+@code{gsl_vector_view_array} but can be used for arrays which are
+declared @code{const}.
+@end deftypefun
+
+@deftypefun gsl_vector_view gsl_vector_view_array_with_stride (double * @var{base}, size_t @var{stride}, size_t @var{n})
+@deftypefunx gsl_vector_const_view gsl_vector_const_view_array_with_stride (const double * @var{base}, size_t @var{stride}, size_t @var{n})
+These functions return a vector view of an array @var{base} with an
+additional stride argument. The subvector is formed in the same way as
+for @code{gsl_vector_view_array} but the new vector has @var{n} elements
+with a step-size of @var{stride} from one element to the next in the
+original array. Mathematically, the @var{i}-th element of the new
+vector @var{v'} is given by,
+
+@example
+v'(i) = base[i*stride]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n-1}.
+
+Note that the view gives direct access to the underlying elements of the
+original array. A vector view can be passed to any subroutine which
+takes a vector argument just as a directly allocated vector would be,
+using @code{&}@var{view}@code{.vector}.
+
+The function @code{gsl_vector_const_view_array_with_stride} is
+equivalent to @code{gsl_vector_view_array_with_stride} but can be used
+for arrays which are declared @code{const}.
+@end deftypefun
+
+
+@comment @node Modifying subvector views
+@comment @subsection Modifying subvector views
+@comment
+@comment @deftypefun int gsl_vector_view_from_vector (gsl_vector * @var{v}, gsl_vector * @var{base}, size_t @var{offset}, size_t @var{n}, size_t @var{stride})
+@comment This function modifies and existing vector view @var{v} to form a new
+@comment view of a vector @var{base}, starting from element @var{offset}. The
+@comment vector has @var{n} elements separated by stride @var{stride}. Any
+@comment existing view in @var{v} will be lost as a result of this function.
+@comment @end deftypefun
+@comment
+@comment @deftypefun int gsl_vector_view_from_array (gsl_vector * @var{v}, double * @var{base}, size_t @var{offset}, size_t @var{n}, size_t @var{stride})
+@comment This function modifies and existing vector view @var{v} to form a new
+@comment view of an array @var{base}, starting from element @var{offset}. The
+@comment vector has @var{n} elements separated by stride @var{stride}. Any
+@comment existing view in @var{v} will be lost as a result of this function.
+@comment @end deftypefun
+
+@comment @deftypefun {gsl_vector *} gsl_vector_alloc_from_block (gsl_block * @var{b}, size_t @var{offset}, size_t @var{n}, size_t @var{stride})
+@comment This function creates a vector as a slice of an existing block @var{b},
+@comment returning a pointer to a newly initialized vector struct. The start of
+@comment the vector is offset by @var{offset} elements from the start of the
+@comment block. The vector has @var{n} elements, with a step-size of @var{stride}
+@comment from one element to the next. Mathematically, the @var{i}-th element of
+@comment the vector is given by,
+@comment
+@comment @example
+@comment v(i) = b->data[offset + i*stride]
+@comment @end example
+@comment @noindent
+@comment where the index @var{i} runs from 0 to @code{n-1}.
+@comment
+@comment A null pointer is returned if the combined parameters
+@comment (@var{offset},@var{n},@var{stride}) overrun the end of the block or if
+@comment insufficient memory is available to store the vector.
+@comment
+@comment The vector is only a view of the block @var{b}, and the block is not
+@comment owned by the vector. When the vector is deallocated the block @var{b}
+@comment will continue to exist. This memory can only be deallocated by freeing
+@comment the block itself. Of course, this block should not be deallocated while
+@comment the vector is still in use.
+@comment @end deftypefun
+@comment
+@comment @deftypefun {gsl_vector *} gsl_vector_alloc_from_vector (gsl_vector * @var{v}, size_t @var{offset}, size_t @var{n}, size_t @var{stride})
+@comment This function creates a vector as a slice of another vector @var{v},
+@comment returning a pointer to a newly initialized vector struct. The start of
+@comment the new vector is offset by @var{offset} elements from the start of the
+@comment original vector. The new vector has @var{n} elements, with a step-size
+@comment of @var{stride} from one element to the next in the original vector.
+@comment Mathematically, the @var{i}-th element of the new vector @var{v'} is
+@comment given by,
+@comment
+@comment @example
+@comment v'(i) = v->data[(offset + i*stride)*v->stride]
+@comment @end example
+@comment @noindent
+@comment where the index @var{i} runs from 0 to @code{n-1}.
+@comment
+@comment A null pointer is returned if the combined parameters
+@comment (@var{offset},@var{n},@var{stride}) overrun the end of the original
+@comment vector or if insufficient memory is available store the new vector.
+@comment
+@comment The new vector is only a view of the block underlying the original
+@comment vector, @var{v}. The block is not owned by the new vector. When the new
+@comment vector is deallocated the original vector @var{v} and its block will
+@comment continue to exist. The original memory can only be deallocated by
+@comment freeing the original vector. Of course, the original vector should not
+@comment be deallocated while the new vector is still in use.
+@comment @end deftypefun
+
+@node Copying vectors
+@subsection Copying vectors
+
+Common operations on vectors such as addition and multiplication are
+available in the @sc{blas} part of the library (@pxref{BLAS
+Support}). However, it is useful to have a small number of utility
+functions which do not require the full @sc{blas} code. The following
+functions fall into this category.
+
+@deftypefun int gsl_vector_memcpy (gsl_vector * @var{dest}, const gsl_vector * @var{src})
+This function copies the elements of the vector @var{src} into the
+vector @var{dest}. The two vectors must have the same length.
+@end deftypefun
+
+@deftypefun int gsl_vector_swap (gsl_vector * @var{v}, gsl_vector * @var{w})
+This function exchanges the elements of the vectors @var{v} and @var{w}
+by copying. The two vectors must have the same length.
+@end deftypefun
+
+
+@node Exchanging elements
+@subsection Exchanging elements
+
+The following function can be used to exchange, or permute, the elements
+of a vector.
+
+@deftypefun int gsl_vector_swap_elements (gsl_vector * @var{v}, size_t @var{i}, size_t @var{j})
+This function exchanges the @var{i}-th and @var{j}-th elements of the
+vector @var{v} in-place.
+@end deftypefun
+
+@deftypefun int gsl_vector_reverse (gsl_vector * @var{v})
+This function reverses the order of the elements of the vector @var{v}.
+@end deftypefun
+
+
+@node Vector operations
+@subsection Vector operations
+
+The following operations are only defined for real vectors.
+
+@deftypefun int gsl_vector_add (gsl_vector * @var{a}, const gsl_vector * @var{b})
+This function adds the elements of vector @var{b} to the elements of
+vector @var{a}, @math{a'_i = a_i + b_i}. The two vectors must have the
+same length.
+@end deftypefun
+
+@deftypefun int gsl_vector_sub (gsl_vector * @var{a}, const gsl_vector * @var{b})
+This function subtracts the elements of vector @var{b} from the elements of
+vector @var{a}, @math{a'_i = a_i - b_i}. The two vectors must have the
+same length.
+@end deftypefun
+
+@deftypefun int gsl_vector_mul (gsl_vector * @var{a}, const gsl_vector * @var{b})
+This function multiplies the elements of vector @var{a} by the elements of
+vector @var{b}, @math{a'_i = a_i * b_i}. The two vectors must have the
+same length.
+@end deftypefun
+
+@deftypefun int gsl_vector_div (gsl_vector * @var{a}, const gsl_vector * @var{b})
+This function divides the elements of vector @var{a} by the elements of
+vector @var{b}, @math{a'_i = a_i / b_i}. The two vectors must have the
+same length.
+@end deftypefun
+
+@deftypefun int gsl_vector_scale (gsl_vector * @var{a}, const double @var{x})
+This function multiplies the elements of vector @var{a} by the constant
+factor @var{x}, @math{a'_i = x a_i}.
+@end deftypefun
+
+@deftypefun int gsl_vector_add_constant (gsl_vector * @var{a}, const double @var{x})
+This function adds the constant value @var{x} to the elements of the
+vector @var{a}, @math{a'_i = a_i + x}.
+@end deftypefun
+
+@node Finding maximum and minimum elements of vectors
+@subsection Finding maximum and minimum elements of vectors
+
+@deftypefun double gsl_vector_max (const gsl_vector * @var{v})
+This function returns the maximum value in the vector @var{v}.
+@end deftypefun
+
+@deftypefun double gsl_vector_min (const gsl_vector * @var{v})
+This function returns the minimum value in the vector @var{v}.
+@end deftypefun
+
+@deftypefun void gsl_vector_minmax (const gsl_vector * @var{v}, double * @var{min_out}, double * @var{max_out})
+This function returns the minimum and maximum values in the vector
+@var{v}, storing them in @var{min_out} and @var{max_out}.
+@end deftypefun
+
+@deftypefun size_t gsl_vector_max_index (const gsl_vector * @var{v})
+This function returns the index of the maximum value in the vector @var{v}.
+When there are several equal maximum elements then the lowest index is
+returned.
+@end deftypefun
+
+@deftypefun size_t gsl_vector_min_index (const gsl_vector * @var{v})
+This function returns the index of the minimum value in the vector @var{v}.
+When there are several equal minimum elements then the lowest index is
+returned.
+@end deftypefun
+
+@deftypefun void gsl_vector_minmax_index (const gsl_vector * @var{v}, size_t * @var{imin}, size_t * @var{imax})
+This function returns the indices of the minimum and maximum values in
+the vector @var{v}, storing them in @var{imin} and @var{imax}. When
+there are several equal minimum or maximum elements then the lowest
+indices are returned.
+@end deftypefun
+
+@node Vector properties
+@subsection Vector properties
+
+@deftypefun int gsl_vector_isnull (const gsl_vector * @var{v})
+@deftypefunx int gsl_vector_ispos (const gsl_vector * @var{v})
+@deftypefunx int gsl_vector_isneg (const gsl_vector * @var{v})
+These functions return 1 if all the elements of the vector @var{v}
+are zero, strictly positive, or strictly negative respectively, and 0
+otherwise. To test for a non-negative vector, use the expression
+@code{!gsl_vector_isneg(v)}.
+@end deftypefun
+
+@node Example programs for vectors
+@subsection Example programs for vectors
+
+This program shows how to allocate, initialize and read from a vector
+using the functions @code{gsl_vector_alloc}, @code{gsl_vector_set} and
+@code{gsl_vector_get}.
+
+@example
+@verbatiminclude examples/vector.c
+@end example
+@comment
+
+@noindent
+Here is the output from the program. The final loop attempts to read
+outside the range of the vector @code{v}, and the error is trapped by
+the range-checking code in @code{gsl_vector_get}.
+
+@example
+$ ./a.out
+v_0 = 1.23
+v_1 = 2.23
+v_2 = 3.23
+gsl: vector_source.c:12: ERROR: index out of range
+Default GSL error handler invoked.
+Aborted (core dumped)
+@end example
+@comment
+
+@noindent
+The next program shows how to write a vector to a file.
+
+@example
+@verbatiminclude examples/vectorw.c
+@end example
+@comment
+
+@noindent
+After running this program the file @file{test.dat} should contain the
+elements of @code{v}, written using the format specifier
+@code{%.5g}. The vector could then be read back in using the function
+@code{gsl_vector_fscanf (f, v)} as follows:
+
+@example
+@verbatiminclude examples/vectorr.c
+@end example
+
+
+@node Matrices
+@section Matrices
+@cindex matrices
+@cindex physical dimension, matrices
+@cindex trailing dimension, matrices
+@cindex leading dimension, matrices
+
+Matrices are defined by a @code{gsl_matrix} structure which describes a
+generalized slice of a block. Like a vector it represents a set of
+elements in an area of memory, but uses two indices instead of one.
+
+The @code{gsl_matrix} structure contains six components, the two
+dimensions of the matrix, a physical dimension, a pointer to the memory
+where the elements of the matrix are stored, @var{data}, a pointer to
+the block owned by the matrix @var{block}, if any, and an ownership
+flag, @var{owner}. The physical dimension determines the memory layout
+and can differ from the matrix dimension to allow the use of
+submatrices. The @code{gsl_matrix} structure is very simple and looks
+like this,
+
+@example
+typedef struct
+@{
+ size_t size1;
+ size_t size2;
+ size_t tda;
+ double * data;
+ gsl_block * block;
+ int owner;
+@} gsl_matrix;
+@end example
+@comment
+
+@noindent
+Matrices are stored in row-major order, meaning that each row of
+elements forms a contiguous block in memory. This is the standard
+``C-language ordering'' of two-dimensional arrays. Note that @sc{fortran}
+stores arrays in column-major order. The number of rows is @var{size1}.
+The range of valid row indices runs from 0 to @code{size1-1}. Similarly
+@var{size2} is the number of columns. The range of valid column indices
+runs from 0 to @code{size2-1}. The physical row dimension @var{tda}, or
+@dfn{trailing dimension}, specifies the size of a row of the matrix as
+laid out in memory.
+
+For example, in the following matrix @var{size1} is 3, @var{size2} is 4,
+and @var{tda} is 8. The physical memory layout of the matrix begins in
+the top left hand-corner and proceeds from left to right along each row
+in turn.
+
+@example
+@group
+00 01 02 03 XX XX XX XX
+10 11 12 13 XX XX XX XX
+20 21 22 23 XX XX XX XX
+@end group
+@end example
+
+@noindent
+Each unused memory location is represented by ``@code{XX}''. The
+pointer @var{data} gives the location of the first element of the matrix
+in memory. The pointer @var{block} stores the location of the memory
+block in which the elements of the matrix are located (if any). If the
+matrix owns this block then the @var{owner} field is set to one and the
+block will be deallocated when the matrix is freed. If the matrix is
+only a slice of a block owned by another object then the @var{owner} field is
+zero and any underlying block will not be freed.
+
+The functions for allocating and accessing matrices are defined in
+@file{gsl_matrix.h}
+
+@menu
+* Matrix allocation::
+* Accessing matrix elements::
+* Initializing matrix elements::
+* Reading and writing matrices::
+* Matrix views::
+* Creating row and column views::
+* Copying matrices::
+* Copying rows and columns::
+* Exchanging rows and columns::
+* Matrix operations::
+* Finding maximum and minimum elements of matrices::
+* Matrix properties::
+* Example programs for matrices::
+@end menu
+
+@node Matrix allocation
+@subsection Matrix allocation
+
+The functions for allocating memory to a matrix follow the style of
+@code{malloc} and @code{free}. They also perform their own error
+checking. If there is insufficient memory available to allocate a vector
+then the functions call the GSL error handler (with an error number of
+@code{GSL_ENOMEM}) in addition to returning a null pointer. Thus if you
+use the library error handler to abort your program then it isn't
+necessary to check every @code{alloc}.
+
+@deftypefun {gsl_matrix *} gsl_matrix_alloc (size_t @var{n1}, size_t @var{n2})
+This function creates a matrix of size @var{n1} rows by @var{n2}
+columns, returning a pointer to a newly initialized matrix struct. A new
+block is allocated for the elements of the matrix, and stored in the
+@var{block} component of the matrix struct. The block is ``owned'' by the
+matrix, and will be deallocated when the matrix is deallocated.
+@end deftypefun
+
+@deftypefun {gsl_matrix *} gsl_matrix_calloc (size_t @var{n1}, size_t @var{n2})
+This function allocates memory for a matrix of size @var{n1} rows by
+@var{n2} columns and initializes all the elements of the matrix to zero.
+@end deftypefun
+
+@deftypefun void gsl_matrix_free (gsl_matrix * @var{m})
+This function frees a previously allocated matrix @var{m}. If the
+matrix was created using @code{gsl_matrix_alloc} then the block
+underlying the matrix will also be deallocated. If the matrix has
+been created from another object then the memory is still owned by
+that object and will not be deallocated. The matrix @var{m} must be a
+valid matrix object (a null pointer is not allowed).
+@end deftypefun
+
+@node Accessing matrix elements
+@subsection Accessing matrix elements
+@cindex matrices, range-checking
+@cindex range-checking for matrices
+
+The functions for accessing the elements of a matrix use the same range
+checking system as vectors. You can turn off range checking by recompiling
+your program with the preprocessor definition
+@code{GSL_RANGE_CHECK_OFF}.
+
+The elements of the matrix are stored in ``C-order'', where the second
+index moves continuously through memory. More precisely, the element
+accessed by the function @code{gsl_matrix_get(m,i,j)} and
+@code{gsl_matrix_set(m,i,j,x)} is
+
+@example
+m->data[i * m->tda + j]
+@end example
+@comment
+
+@noindent
+where @var{tda} is the physical row-length of the matrix.
+
+@deftypefun double gsl_matrix_get (const gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j})
+This function returns the @math{(i,j)}-th element of a matrix
+@var{m}. If @var{i} or @var{j} lie outside the allowed range of 0 to
+@math{@var{n1}-1} and 0 to @math{@var{n2}-1} then the error handler is invoked and 0
+is returned.
+@end deftypefun
+
+@deftypefun void gsl_matrix_set (gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j}, double @var{x})
+This function sets the value of the @math{(i,j)}-th element of a
+matrix @var{m} to @var{x}. If @var{i} or @var{j} lies outside the
+allowed range of 0 to @math{@var{n1}-1} and 0 to @math{@var{n2}-1} then the error
+handler is invoked.
+@end deftypefun
+
+@deftypefun {double *} gsl_matrix_ptr (gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j})
+@deftypefunx {const double *} gsl_matrix_const_ptr (const gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j})
+These functions return a pointer to the @math{(i,j)}-th element of a
+matrix @var{m}. If @var{i} or @var{j} lie outside the allowed range of
+0 to @math{@var{n1}-1} and 0 to @math{@var{n2}-1} then the error handler is invoked
+and a null pointer is returned.
+@end deftypefun
+
+@node Initializing matrix elements
+@subsection Initializing matrix elements
+@cindex matrices, initializing
+@cindex initializing matrices
+@cindex identity matrix
+@cindex matrix, identity
+@cindex zero matrix
+@cindex matrix, zero
+@cindex constant matrix
+@cindex matrix, constant
+
+@deftypefun void gsl_matrix_set_all (gsl_matrix * @var{m}, double @var{x})
+This function sets all the elements of the matrix @var{m} to the value
+@var{x}.
+@end deftypefun
+
+@deftypefun void gsl_matrix_set_zero (gsl_matrix * @var{m})
+This function sets all the elements of the matrix @var{m} to zero.
+@end deftypefun
+
+@deftypefun void gsl_matrix_set_identity (gsl_matrix * @var{m})
+This function sets the elements of the matrix @var{m} to the
+corresponding elements of the identity matrix, @math{m(i,j) =
+\delta(i,j)}, i.e. a unit diagonal with all off-diagonal elements zero.
+This applies to both square and rectangular matrices.
+@end deftypefun
+
+@node Reading and writing matrices
+@subsection Reading and writing matrices
+
+The library provides functions for reading and writing matrices to a file
+as binary data or formatted text.
+
+@deftypefun int gsl_matrix_fwrite (FILE * @var{stream}, const gsl_matrix * @var{m})
+This function writes the elements of the matrix @var{m} to the stream
+@var{stream} in binary format. The return value is 0 for success and
+@code{GSL_EFAILED} if there was a problem writing to the file. Since the
+data is written in the native binary format it may not be portable
+between different architectures.
+@end deftypefun
+
+@deftypefun int gsl_matrix_fread (FILE * @var{stream}, gsl_matrix * @var{m})
+This function reads into the matrix @var{m} from the open stream
+@var{stream} in binary format. The matrix @var{m} must be preallocated
+with the correct dimensions since the function uses the size of @var{m} to
+determine how many bytes to read. The return value is 0 for success and
+@code{GSL_EFAILED} if there was a problem reading from the file. The
+data is assumed to have been written in the native binary format on the
+same architecture.
+@end deftypefun
+
+@deftypefun int gsl_matrix_fprintf (FILE * @var{stream}, const gsl_matrix * @var{m}, const char * @var{format})
+This function writes the elements of the matrix @var{m} line-by-line to
+the stream @var{stream} using the format specifier @var{format}, which
+should be one of the @code{%g}, @code{%e} or @code{%f} formats for
+floating point numbers and @code{%d} for integers. The function returns
+0 for success and @code{GSL_EFAILED} if there was a problem writing to
+the file.
+@end deftypefun
+
+@deftypefun int gsl_matrix_fscanf (FILE * @var{stream}, gsl_matrix * @var{m})
+This function reads formatted data from the stream @var{stream} into the
+matrix @var{m}. The matrix @var{m} must be preallocated with the correct
+dimensions since the function uses the size of @var{m} to determine how many
+numbers to read. The function returns 0 for success and
+@code{GSL_EFAILED} if there was a problem reading from the file.
+@end deftypefun
+
+@node Matrix views
+@subsection Matrix views
+
+A matrix view is a temporary object, stored on the stack, which can be
+used to operate on a subset of matrix elements. Matrix views can be
+defined for both constant and non-constant matrices using separate types
+that preserve constness. A matrix view has the type
+@code{gsl_matrix_view} and a constant matrix view has the type
+@code{gsl_matrix_const_view}. In both cases the elements of the view
+can by accessed using the @code{matrix} component of the view object. A
+pointer @code{gsl_matrix *} or @code{const gsl_matrix *} can be obtained
+by taking the address of the @code{matrix} component with the @code{&}
+operator. In addition to matrix views it is also possible to create
+vector views of a matrix, such as row or column views.
+
+@deftypefun gsl_matrix_view gsl_matrix_submatrix (gsl_matrix * @var{m}, size_t @var{k1}, size_t @var{k2}, size_t @var{n1}, size_t @var{n2})
+@deftypefunx gsl_matrix_const_view gsl_matrix_const_submatrix (const gsl_matrix * @var{m}, size_t @var{k1}, size_t @var{k2}, size_t @var{n1}, size_t @var{n2})
+These functions return a matrix view of a submatrix of the matrix
+@var{m}. The upper-left element of the submatrix is the element
+(@var{k1},@var{k2}) of the original matrix. The submatrix has @var{n1}
+rows and @var{n2} columns. The physical number of columns in memory
+given by @var{tda} is unchanged. Mathematically, the
+@math{(i,j)}-th element of the new matrix is given by,
+
+@example
+m'(i,j) = m->data[(k1*m->tda + k2) + i*m->tda + j]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+runs from 0 to @code{n2-1}.
+
+The @code{data} pointer of the returned matrix struct is set to null if
+the combined parameters (@var{i},@var{j},@var{n1},@var{n2},@var{tda})
+overrun the ends of the original matrix.
+
+The new matrix view is only a view of the block underlying the existing
+matrix, @var{m}. The block containing the elements of @var{m} is not
+owned by the new matrix view. When the view goes out of scope the
+original matrix @var{m} and its block will continue to exist. The
+original memory can only be deallocated by freeing the original matrix.
+Of course, the original matrix should not be deallocated while the view
+is still in use.
+
+The function @code{gsl_matrix_const_submatrix} is equivalent to
+@code{gsl_matrix_submatrix} but can be used for matrices which are
+declared @code{const}.
+@end deftypefun
+
+
+@deftypefun gsl_matrix_view gsl_matrix_view_array (double * @var{base}, size_t @var{n1}, size_t @var{n2})
+@deftypefunx gsl_matrix_const_view gsl_matrix_const_view_array (const double * @var{base}, size_t @var{n1}, size_t @var{n2})
+These functions return a matrix view of the array @var{base}. The
+matrix has @var{n1} rows and @var{n2} columns. The physical number of
+columns in memory is also given by @var{n2}. Mathematically, the
+@math{(i,j)}-th element of the new matrix is given by,
+
+@example
+m'(i,j) = base[i*n2 + j]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+runs from 0 to @code{n2-1}.
+
+The new matrix is only a view of the array @var{base}. When the view
+goes out of scope the original array @var{base} will continue to exist.
+The original memory can only be deallocated by freeing the original
+array. Of course, the original array should not be deallocated while
+the view is still in use.
+
+The function @code{gsl_matrix_const_view_array} is equivalent to
+@code{gsl_matrix_view_array} but can be used for matrices which are
+declared @code{const}.
+@end deftypefun
+
+
+@deftypefun gsl_matrix_view gsl_matrix_view_array_with_tda (double * @var{base}, size_t @var{n1}, size_t @var{n2}, size_t @var{tda})
+@deftypefunx gsl_matrix_const_view gsl_matrix_const_view_array_with_tda (const double * @var{base}, size_t @var{n1}, size_t @var{n2}, size_t @var{tda})
+These functions return a matrix view of the array @var{base} with a
+physical number of columns @var{tda} which may differ from the corresponding
+dimension of the matrix. The matrix has @var{n1} rows and @var{n2}
+columns, and the physical number of columns in memory is given by
+@var{tda}. Mathematically, the @math{(i,j)}-th element of the new
+matrix is given by,
+
+@example
+m'(i,j) = base[i*tda + j]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+runs from 0 to @code{n2-1}.
+
+The new matrix is only a view of the array @var{base}. When the view
+goes out of scope the original array @var{base} will continue to exist.
+The original memory can only be deallocated by freeing the original
+array. Of course, the original array should not be deallocated while
+the view is still in use.
+
+The function @code{gsl_matrix_const_view_array_with_tda} is equivalent
+to @code{gsl_matrix_view_array_with_tda} but can be used for matrices
+which are declared @code{const}.
+@end deftypefun
+
+@deftypefun gsl_matrix_view gsl_matrix_view_vector (gsl_vector * @var{v}, size_t @var{n1}, size_t @var{n2})
+@deftypefunx gsl_matrix_const_view gsl_matrix_const_view_vector (const gsl_vector * @var{v}, size_t @var{n1}, size_t @var{n2})
+These functions return a matrix view of the vector @var{v}. The matrix
+has @var{n1} rows and @var{n2} columns. The vector must have unit
+stride. The physical number of columns in memory is also given by
+@var{n2}. Mathematically, the @math{(i,j)}-th element of the new
+matrix is given by,
+
+@example
+m'(i,j) = v->data[i*n2 + j]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+runs from 0 to @code{n2-1}.
+
+The new matrix is only a view of the vector @var{v}. When the view
+goes out of scope the original vector @var{v} will continue to exist.
+The original memory can only be deallocated by freeing the original
+vector. Of course, the original vector should not be deallocated while
+the view is still in use.
+
+The function @code{gsl_matrix_const_view_vector} is equivalent to
+@code{gsl_matrix_view_vector} but can be used for matrices which are
+declared @code{const}.
+@end deftypefun
+
+
+@deftypefun gsl_matrix_view gsl_matrix_view_vector_with_tda (gsl_vector * @var{v}, size_t @var{n1}, size_t @var{n2}, size_t @var{tda})
+@deftypefunx gsl_matrix_const_view gsl_matrix_const_view_vector_with_tda (const gsl_vector * @var{v}, size_t @var{n1}, size_t @var{n2}, size_t @var{tda})
+These functions return a matrix view of the vector @var{v} with a
+physical number of columns @var{tda} which may differ from the
+corresponding matrix dimension. The vector must have unit stride. The
+matrix has @var{n1} rows and @var{n2} columns, and the physical number
+of columns in memory is given by @var{tda}. Mathematically, the
+@math{(i,j)}-th element of the new matrix is given by,
+
+@example
+m'(i,j) = v->data[i*tda + j]
+@end example
+
+@noindent
+where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+runs from 0 to @code{n2-1}.
+
+The new matrix is only a view of the vector @var{v}. When the view
+goes out of scope the original vector @var{v} will continue to exist.
+The original memory can only be deallocated by freeing the original
+vector. Of course, the original vector should not be deallocated while
+the view is still in use.
+
+The function @code{gsl_matrix_const_view_vector_with_tda} is equivalent
+to @code{gsl_matrix_view_vector_with_tda} but can be used for matrices
+which are declared @code{const}.
+@end deftypefun
+
+
+@comment @node Modifying matrix views
+@comment @subsection Modifying matrix views
+@comment
+@comment @deftypefun int gsl_matrix_view_from_matrix (gsl_matrix * @var{m}, gsl_matrix * @var{mm}, const size_t @var{k1}, const size_t @var{k2}, const size_t @var{n1}, const size_t @var{n2})
+@comment This function modifies and existing matrix view @var{m} to form a new
+@comment view of a matrix @var{mm}, starting from element (@var{k1},@var{k2}).
+@comment The matrix view has @var{n1} rows and @var{n2} columns. Any existing
+@comment view in @var{m} will be lost as a result of this function.
+@comment @end deftypefun
+@comment
+@comment @deftypefun int gsl_matrix_view_from_vector (gsl_matrix * @var{m}, gsl_vector * @var{v}, const size_t @var{offset}, const size_t @var{n1}, const size_t @var{n2})
+@comment This function modifies and existing matrix view @var{m} to form a new
+@comment view of a vector @var{v}, starting from element @var{offset}. The
+@comment vector has @var{n1} rows and @var{n2} columns. Any
+@comment existing view in @var{m} will be lost as a result of this function.
+@comment @end deftypefun
+@comment
+@comment @deftypefun int gsl_matrix_view_from_array (gsl_matrix * @var{m}, double * @var{base}, const size_t @var{offset}, const size_t @var{n1}, const size_t @var{n2})
+@comment This function modifies and existing matrix view @var{m} to form a new
+@comment view of an array @var{base}, starting from element @var{offset}. The
+@comment matrix has @var{n1} rows and @var{n2} columns. Any
+@comment existing view in @var{m} will be lost as a result of this function.
+@comment @end deftypefun
+@comment
+@comment @deftypefun {gsl_matrix *} gsl_matrix_alloc_from_block (gsl_block * @var{b}, size_t @var{offset}, size_t @var{n1}, size_t @var{n2}, size_t @var{tda})
+@comment This function creates a matrix as a slice of the block @var{b},
+@comment returning a pointer to a newly initialized matrix struct. The start of
+@comment the matrix is offset by @var{offset} elements from the start of the
+@comment block. The matrix has @var{n1} rows and @var{n2} columns, with the
+@comment physical number of columns in memory given by @var{tda}.
+@comment Mathematically, the (@var{i},@var{j})-th element of the matrix is given by,
+@comment
+@comment @example
+@comment m(i,j) = b->data[offset + i*tda + j]
+@comment @end example
+@comment @noindent
+@comment where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+@comment runs from 0 to @code{n2-1}.
+@comment
+@comment A null pointer is returned if the combined parameters
+@comment (@var{offset},@var{n1},@var{n2},@var{tda}) overrun the end of the block
+@comment or if insufficient memory is available to store the matrix.
+@comment
+@comment The matrix is only a view of the block @var{b}, and the block is not
+@comment owned by the matrix. When the matrix is deallocated the block @var{b}
+@comment will continue to exist. This memory can only be deallocated by freeing
+@comment the block itself. Of course, this block should not be deallocated while
+@comment the matrix is still in use.
+@comment @end deftypefun
+@comment
+@comment @deftypefun {gsl_matrix *} gsl_matrix_alloc_from_matrix (gsl_matrix * @var{m}, size_t @var{k1}, size_t @var{k2}, size_t @var{n1}, size_t @var{n2})
+@comment
+@comment This function creates a matrix as a submatrix of the matrix @var{m},
+@comment returning a pointer to a newly initialized matrix struct. The upper-left
+@comment element of the submatrix is the element (@var{k1},@var{k2}) of the
+@comment original matrix. The submatrix has @var{n1} rows and @var{n2} columns.
+@comment The physical number of columns in memory given by @var{tda} is
+@comment unchanged. Mathematically, the (@var{i},@var{j})-th element of the
+@comment new matrix is given by,
+@comment
+@comment @example
+@comment m'(i,j) = m->data[(k1*m->tda + k2) + i*m->tda + j]
+@comment @end example
+@comment @noindent
+@comment where the index @var{i} runs from 0 to @code{n1-1} and the index @var{j}
+@comment runs from 0 to @code{n2-1}.
+@comment
+@comment A null pointer is returned if the combined parameters
+@comment (@var{k1},@var{k2},@var{n1},@var{n2},@var{tda}) overrun the end of the
+@comment original matrix or if insufficient memory is available to store the matrix.
+@comment
+@comment The new matrix is only a view of the block underlying the existing
+@comment matrix, @var{m}. The block is not owned by the new matrix. When the new
+@comment matrix is deallocated the original matrix @var{m} and its block will
+@comment continue to exist. The original memory can only be deallocated by
+@comment freeing the original matrix. Of course, the original matrix should not
+@comment be deallocated while the new matrix is still in use.
+@comment @end deftypefun
+
+@node Creating row and column views
+@subsection Creating row and column views
+
+In general there are two ways to access an object, by reference or by
+copying. The functions described in this section create vector views
+which allow access to a row or column of a matrix by reference.
+Modifying elements of the view is equivalent to modifying the matrix,
+since both the vector view and the matrix point to the same memory
+block.
+
+@deftypefun gsl_vector_view gsl_matrix_row (gsl_matrix * @var{m}, size_t @var{i})
+@deftypefunx {gsl_vector_const_view} gsl_matrix_const_row (const gsl_matrix * @var{m}, size_t @var{i})
+These functions return a vector view of the @var{i}-th row of the matrix
+@var{m}. The @code{data} pointer of the new vector is set to null if
+@var{i} is out of range.
+
+The function @code{gsl_vector_const_row} is equivalent to
+@code{gsl_matrix_row} but can be used for matrices which are declared
+@code{const}.
+@end deftypefun
+
+@deftypefun gsl_vector_view gsl_matrix_column (gsl_matrix * @var{m}, size_t @var{j})
+@deftypefunx {gsl_vector_const_view} gsl_matrix_const_column (const gsl_matrix * @var{m}, size_t @var{j})
+These functions return a vector view of the @var{j}-th column of the
+matrix @var{m}. The @code{data} pointer of the new vector is set to
+null if @var{j} is out of range.
+
+The function @code{gsl_vector_const_column} is equivalent to
+@code{gsl_matrix_column} but can be used for matrices which are declared
+@code{const}.
+@end deftypefun
+
+@cindex matrix diagonal
+@cindex diagonal, of a matrix
+@deftypefun gsl_vector_view gsl_matrix_diagonal (gsl_matrix * @var{m})
+@deftypefunx {gsl_vector_const_view} gsl_matrix_const_diagonal (const gsl_matrix * @var{m})
+These functions returns a vector view of the diagonal of the matrix
+@var{m}. The matrix @var{m} is not required to be square. For a
+rectangular matrix the length of the diagonal is the same as the smaller
+dimension of the matrix.
+
+The function @code{gsl_matrix_const_diagonal} is equivalent to
+@code{gsl_matrix_diagonal} but can be used for matrices which are
+declared @code{const}.
+@end deftypefun
+
+@cindex matrix subdiagonal
+@cindex subdiagonal, of a matrix
+@deftypefun gsl_vector_view gsl_matrix_subdiagonal (gsl_matrix * @var{m}, size_t @var{k})
+@deftypefunx {gsl_vector_const_view} gsl_matrix_const_subdiagonal (const gsl_matrix * @var{m}, size_t @var{k})
+These functions return a vector view of the @var{k}-th subdiagonal of
+the matrix @var{m}. The matrix @var{m} is not required to be square.
+The diagonal of the matrix corresponds to @math{k = 0}.
+
+The function @code{gsl_matrix_const_subdiagonal} is equivalent to
+@code{gsl_matrix_subdiagonal} but can be used for matrices which are
+declared @code{const}.
+@end deftypefun
+
+@cindex matrix superdiagonal
+@cindex superdiagonal, matrix
+@deftypefun gsl_vector_view gsl_matrix_superdiagonal (gsl_matrix * @var{m}, size_t @var{k})
+@deftypefunx {gsl_vector_const_view} gsl_matrix_const_superdiagonal (const gsl_matrix * @var{m}, size_t @var{k})
+These functions return a vector view of the @var{k}-th superdiagonal of
+the matrix @var{m}. The matrix @var{m} is not required to be square. The
+diagonal of the matrix corresponds to @math{k = 0}.
+
+The function @code{gsl_matrix_const_superdiagonal} is equivalent to
+@code{gsl_matrix_superdiagonal} but can be used for matrices which are
+declared @code{const}.
+@end deftypefun
+
+@comment @deftypefun {gsl_vector *} gsl_vector_alloc_row_from_matrix (gsl_matrix * @var{m}, size_t @var{i})
+@comment This function allocates a new @code{gsl_vector} struct which points to
+@comment the @var{i}-th row of the matrix @var{m}.
+@comment @end deftypefun
+@comment
+@comment @deftypefun {gsl_vector *} gsl_vector_alloc_col_from_matrix (gsl_matrix * @var{m}, size_t @var{j})
+@comment This function allocates a new @code{gsl_vector} struct which points to
+@comment the @var{j}-th column of the matrix @var{m}.
+@comment @end deftypefun
+
+@node Copying matrices
+@subsection Copying matrices
+
+@deftypefun int gsl_matrix_memcpy (gsl_matrix * @var{dest}, const gsl_matrix * @var{src})
+This function copies the elements of the matrix @var{src} into the
+matrix @var{dest}. The two matrices must have the same size.
+@end deftypefun
+
+@deftypefun int gsl_matrix_swap (gsl_matrix * @var{m1}, gsl_matrix * @var{m2})
+This function exchanges the elements of the matrices @var{m1} and
+@var{m2} by copying. The two matrices must have the same size.
+@end deftypefun
+
+@node Copying rows and columns
+@subsection Copying rows and columns
+
+The functions described in this section copy a row or column of a matrix
+into a vector. This allows the elements of the vector and the matrix to
+be modified independently. Note that if the matrix and the vector point
+to overlapping regions of memory then the result will be undefined. The
+same effect can be achieved with more generality using
+@code{gsl_vector_memcpy} with vector views of rows and columns.
+
+@deftypefun int gsl_matrix_get_row (gsl_vector * @var{v}, const gsl_matrix * @var{m}, size_t @var{i})
+This function copies the elements of the @var{i}-th row of the matrix
+@var{m} into the vector @var{v}. The length of the vector must be the
+same as the length of the row.
+@end deftypefun
+
+@deftypefun int gsl_matrix_get_col (gsl_vector * @var{v}, const gsl_matrix * @var{m}, size_t @var{j})
+This function copies the elements of the @var{j}-th column of the matrix
+@var{m} into the vector @var{v}. The length of the vector must be the
+same as the length of the column.
+@end deftypefun
+
+@deftypefun int gsl_matrix_set_row (gsl_matrix * @var{m}, size_t @var{i}, const gsl_vector * @var{v})
+This function copies the elements of the vector @var{v} into the
+@var{i}-th row of the matrix @var{m}. The length of the vector must be
+the same as the length of the row.
+@end deftypefun
+
+@deftypefun int gsl_matrix_set_col (gsl_matrix * @var{m}, size_t @var{j}, const gsl_vector * @var{v})
+This function copies the elements of the vector @var{v} into the
+@var{j}-th column of the matrix @var{m}. The length of the vector must be
+the same as the length of the column.
+@end deftypefun
+
+@node Exchanging rows and columns
+@subsection Exchanging rows and columns
+
+The following functions can be used to exchange the rows and columns of
+a matrix.
+
+@deftypefun int gsl_matrix_swap_rows (gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j})
+This function exchanges the @var{i}-th and @var{j}-th rows of the matrix
+@var{m} in-place.
+@end deftypefun
+
+@deftypefun int gsl_matrix_swap_columns (gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j})
+This function exchanges the @var{i}-th and @var{j}-th columns of the
+matrix @var{m} in-place.
+@end deftypefun
+
+@deftypefun int gsl_matrix_swap_rowcol (gsl_matrix * @var{m}, size_t @var{i}, size_t @var{j})
+This function exchanges the @var{i}-th row and @var{j}-th column of the
+matrix @var{m} in-place. The matrix must be square for this operation to
+be possible.
+@end deftypefun
+
+@deftypefun int gsl_matrix_transpose_memcpy (gsl_matrix * @var{dest}, const gsl_matrix * @var{src})
+This function makes the matrix @var{dest} the transpose of the matrix
+@var{src} by copying the elements of @var{src} into @var{dest}. This
+function works for all matrices provided that the dimensions of the matrix
+@var{dest} match the transposed dimensions of the matrix @var{src}.
+@end deftypefun
+
+@deftypefun int gsl_matrix_transpose (gsl_matrix * @var{m})
+This function replaces the matrix @var{m} by its transpose by copying
+the elements of the matrix in-place. The matrix must be square for this
+operation to be possible.
+@end deftypefun
+
+@node Matrix operations
+@subsection Matrix operations
+
+The following operations are defined for real and complex matrices.
+
+@deftypefun int gsl_matrix_add (gsl_matrix * @var{a}, const gsl_matrix * @var{b})
+This function adds the elements of matrix @var{b} to the elements of
+matrix @var{a}, @math{a'(i,j) = a(i,j) + b(i,j)}. The two matrices must have the
+same dimensions.
+@end deftypefun
+
+@deftypefun int gsl_matrix_sub (gsl_matrix * @var{a}, const gsl_matrix * @var{b})
+This function subtracts the elements of matrix @var{b} from the elements of
+matrix @var{a}, @math{a'(i,j) = a(i,j) - b(i,j)}. The two matrices must have the
+same dimensions.
+@end deftypefun
+
+@deftypefun int gsl_matrix_mul_elements (gsl_matrix * @var{a}, const gsl_matrix * @var{b})
+This function multiplies the elements of matrix @var{a} by the elements of
+matrix @var{b}, @math{a'(i,j) = a(i,j) * b(i,j)}. The two matrices must have the
+same dimensions.
+@end deftypefun
+
+@deftypefun int gsl_matrix_div_elements (gsl_matrix * @var{a}, const gsl_matrix * @var{b})
+This function divides the elements of matrix @var{a} by the elements of
+matrix @var{b}, @math{a'(i,j) = a(i,j) / b(i,j)}. The two matrices must have the
+same dimensions.
+@end deftypefun
+
+@deftypefun int gsl_matrix_scale (gsl_matrix * @var{a}, const double @var{x})
+This function multiplies the elements of matrix @var{a} by the constant
+factor @var{x}, @math{a'(i,j) = x a(i,j)}.
+@end deftypefun
+
+@deftypefun int gsl_matrix_add_constant (gsl_matrix * @var{a}, const double @var{x})
+This function adds the constant value @var{x} to the elements of the
+matrix @var{a}, @math{a'(i,j) = a(i,j) + x}.
+@end deftypefun
+
+@node Finding maximum and minimum elements of matrices
+@subsection Finding maximum and minimum elements of matrices
+
+The following operations are only defined for real matrices.
+
+@deftypefun double gsl_matrix_max (const gsl_matrix * @var{m})
+This function returns the maximum value in the matrix @var{m}.
+@end deftypefun
+
+@deftypefun double gsl_matrix_min (const gsl_matrix * @var{m})
+This function returns the minimum value in the matrix @var{m}.
+@end deftypefun
+
+@deftypefun void gsl_matrix_minmax (const gsl_matrix * @var{m}, double * @var{min_out}, double * @var{max_out})
+This function returns the minimum and maximum values in the matrix
+@var{m}, storing them in @var{min_out} and @var{max_out}.
+@end deftypefun
+
+@deftypefun void gsl_matrix_max_index (const gsl_matrix * @var{m}, size_t * @var{imax}, size_t * @var{jmax})
+This function returns the indices of the maximum value in the matrix
+@var{m}, storing them in @var{imax} and @var{jmax}. When there are
+several equal maximum elements then the first element found is returned,
+searching in row-major order.
+@end deftypefun
+
+@deftypefun void gsl_matrix_min_index (const gsl_matrix * @var{m}, size_t * @var{imin}, size_t * @var{jmin})
+This function returns the indices of the minimum value in the matrix
+@var{m}, storing them in @var{imin} and @var{jmin}. When there are
+several equal minimum elements then the first element found is returned,
+searching in row-major order.
+@end deftypefun
+
+@deftypefun void gsl_matrix_minmax_index (const gsl_matrix * @var{m}, size_t * @var{imin}, size_t * @var{jmin}, size_t * @var{imax}, size_t * @var{jmax})
+This function returns the indices of the minimum and maximum values in
+the matrix @var{m}, storing them in (@var{imin},@var{jmin}) and
+(@var{imax},@var{jmax}). When there are several equal minimum or maximum
+elements then the first elements found are returned, searching in
+row-major order.
+@end deftypefun
+
+@node Matrix properties
+@subsection Matrix properties
+
+@deftypefun int gsl_matrix_isnull (const gsl_matrix * @var{m})
+@deftypefunx int gsl_matrix_ispos (const gsl_matrix * @var{m})
+@deftypefunx int gsl_matrix_isneg (const gsl_matrix * @var{m})
+These functions return 1 if all the elements of the matrix @var{m} are
+zero, strictly positive, or strictly negative respectively, and 0
+otherwise. To test for a non-negative matrix, use the expression
+@code{!gsl_matrix_isneg(m)}. To test whether a matrix is
+positive-definite, use the Cholesky decomposition (@pxref{Cholesky Decomposition}).
+@end deftypefun
+
+@node Example programs for matrices
+@subsection Example programs for matrices
+
+The program below shows how to allocate, initialize and read from a matrix
+using the functions @code{gsl_matrix_alloc}, @code{gsl_matrix_set} and
+@code{gsl_matrix_get}.
+
+@example
+@verbatiminclude examples/matrix.c
+@end example
+@comment
+
+@noindent
+Here is the output from the program. The final loop attempts to read
+outside the range of the matrix @code{m}, and the error is trapped by
+the range-checking code in @code{gsl_matrix_get}.
+
+@example
+$ ./a.out
+m(0,0) = 0.23
+m(0,1) = 1.23
+m(0,2) = 2.23
+m(1,0) = 100.23
+m(1,1) = 101.23
+m(1,2) = 102.23
+...
+m(9,2) = 902.23
+gsl: matrix_source.c:13: ERROR: first index out of range
+Default GSL error handler invoked.
+Aborted (core dumped)
+@end example
+@comment
+
+@noindent
+The next program shows how to write a matrix to a file.
+
+@example
+@verbatiminclude examples/matrixw.c
+@end example
+@comment
+
+@noindent
+After running this program the file @file{test.dat} should contain the
+elements of @code{m}, written in binary format. The matrix which is read
+back in using the function @code{gsl_matrix_fread} should be exactly
+equal to the original matrix.
+
+The following program demonstrates the use of vector views. The program
+computes the column norms of a matrix.
+
+@example
+@verbatiminclude examples/vectorview.c
+@end example
+
+@noindent
+Here is the output of the program,
+
+@example
+$ ./a.out
+@verbatiminclude examples/vectorview.out
+@end example
+
+@noindent
+The results can be confirmed using @sc{gnu octave},
+
+@example
+$ octave
+GNU Octave, version 2.0.16.92
+octave> m = sin(0:9)' * ones(1,10)
+ + ones(10,1) * cos(0:9);
+octave> sqrt(sum(m.^2))
+ans =
+ 4.3146 3.1205 2.1932 3.2611 2.5342 2.5728
+ 4.2047 3.6520 2.0852 3.0731
+@end example
+
+
+@node Vector and Matrix References and Further Reading
+@section References and Further Reading
+
+The block, vector and matrix objects in GSL follow the @code{valarray}
+model of C++. A description of this model can be found in the following
+reference,
+
+@itemize @asis
+@item
+B. Stroustrup,
+@cite{The C++ Programming Language} (3rd Ed),
+Section 22.4 Vector Arithmetic.
+Addison-Wesley 1997, ISBN 0-201-88954-4.
+@end itemize
diff --git a/gsl-1.9/doc/version-ref.texi b/gsl-1.9/doc/version-ref.texi
new file mode 100644
index 0000000..391fb64
--- /dev/null
+++ b/gsl-1.9/doc/version-ref.texi
@@ -0,0 +1,4 @@
+@set UPDATED 20 February 2007
+@set UPDATED-MONTH February 2007
+@set EDITION 1.9
+@set VERSION 1.9