summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-09-29 00:03:23 +0000
committerKarl Berry <karl@freefriends.org>2009-09-29 00:03:23 +0000
commit90f79e4b239311b4bfef31778404320880ca3aaf (patch)
treebe2dc1dabd9a1d0f1077dfb36027dfe0fdaa5689
parent56ba94d1d3a01b11a10578f66d461dac3aad2b0e (diff)
bclogo 2.24 (28sep09)
git-svn-id: svn://tug.org/texlive/trunk@15541 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/LISEZ-MOI95
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/README115
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/README.latex115
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.eps271
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.pdfbin0 -> 3015 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcbombe.eps2392
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcbombe.pdfbin0 -> 2519 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bccalendrier.eps3545
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bccalendrier.pdfbin0 -> 23824 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bccube.eps175
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bccube.pdfbin0 -> 2604 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdallemagne.eps214
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdallemagne.pdfbin0 -> 3862 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdbelgique.eps2414
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdbelgique.pdfbin0 -> 1973 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdfrance.eps2414
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdfrance.pdfbin0 -> 1976 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcditalie.eps2414
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcditalie.pdfbin0 -> 1977 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.eps250
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.pdfbin0 -> 2971 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.eps214
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.pdfbin0 -> 3866 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bceclaircie.eps113
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bceclaircie.pdfbin0 -> 1476 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bchorloge.eps2334
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bchorloge.pdfbin0 -> 2000 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcicosaedre.eps214
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcicosaedre.pdfbin0 -> 1714 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcinterdit.eps2289
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcinterdit.pdfbin0 -> 1265 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bclogo-doc.pdfbin318467 -> 439731 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bclogo-doc.tex731
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcneige.eps182
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcneige.pdfbin0 -> 2607 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcoctaedre.eps184
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcoctaedre.pdf80
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcpluie.eps96
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcpluie.pdf68
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcpoisson.eps167
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcpoisson.pdfbin0 -> 1871 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcrosevents.eps2653
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcrosevents.pdfbin0 -> 1319 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcsoleil.eps2542
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcsoleil.pdfbin0 -> 1304 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcstop.eps117
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcstop.pdfbin0 -> 13510 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bctetraedre.eps154
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bctetraedre.pdfbin0 -> 2551 bytes
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcying.eps133
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/bcying.pdf84
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/latex/readme73
-rw-r--r--Master/texmf-dist/doc/latex/bclogo/readme73
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-attention.tex118
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-book.eps209
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-book.pdfbin0 -> 3169 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-book.pgf84
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-book.pst72
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-coeur.tex32
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-crayon.tex426
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-danger.eps4
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-danger.pdf32
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-danger.tex62
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-dz.eps108
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-dz.pdf (renamed from Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.pdf)bin1465 -> 1437 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-etoile.tex44
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-fleur.tex184
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-info.eps129
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-info.pdf (renamed from Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.pdf)bin1418 -> 1528 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-inter.eps4
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-inter.pdfbin1683 -> 1519 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-inter.tex86
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-lampe.eps179
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-lampe.pdfbin0 -> 2624 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-lampe.pgf33
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-lampe.pst30
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-note.tex28
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-orne.tex139
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-ours.tex302
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-plume.eps1956
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-plume.pdfbin0 -> 18347 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.eps (renamed from Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.eps)4
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.pdfbin0 -> 1283 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.eps (renamed from Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.eps)2
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.pdfbin0 -> 1247 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.tex91
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.tex91
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-takecare.eps173
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-takecare.pdfbin0 -> 2836 bytes
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-takecare.pgf44
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-takecare.pst28
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bc-trefle.tex145
-rw-r--r--Master/texmf-dist/tex/latex/bclogo/bclogo.sty179
93 files changed, 29265 insertions, 2668 deletions
diff --git a/Master/texmf-dist/doc/latex/bclogo/LISEZ-MOI b/Master/texmf-dist/doc/latex/bclogo/LISEZ-MOI
index 8d5a2822b11..21d3702a63e 100644
--- a/Master/texmf-dist/doc/latex/bclogo/LISEZ-MOI
+++ b/Master/texmf-dist/doc/latex/bclogo/LISEZ-MOI
@@ -1,6 +1,6 @@
-*- coding: utf-8 -*-
Paquet bclogo par Maxime Chupin
-Version 2.22 datée du 15 Janvier 2009
+Version 2.24 datée du 09 Septembre 2009
Ce paquet facilite la création de boîtes colorées avec un titre et un logo. Il s'appuie principalement sur PSTricks et/ou sur Tikz.
@@ -21,56 +21,97 @@ spir.eps
spir.pdf
===== Fichiers pour LaTeX =====
-
bc-attention.eps
bc-attention.pdf
-bc-attention.tex
bc-aux-301.eps
bc-aux-301.pdf
-bc-book.pgf
-bc-book.pst
+bcbombe.eps
+bcbombe.pdf
+bc-book.eps
+bc-book.pdf
+bccalendrier.eps
+bccalendrier.pdf
bc-coeur.eps
bc-coeur.pdf
-bc-coeur.tex
bc-crayon.eps
bc-crayon.pdf
-bc-crayon.tex
+bccube.eps
+bccube.pdf
+bcdallemagne.eps
+bcdallemagne.pdf
bc-danger.eps
-bcdanger.pdf
-bc-danger.tex
+bc-danger.pdf
+bcdbelgique.eps
+bcdbelgique.pdf
+bcdfrance.eps
+bcdfrance.pdf
+bcditalie.eps
+bcditalie.pdf
+bcdodecaedre.eps
+bcdodecaedre.pdf
+bcdpaysbas.eps
+bcdpaysbas.pdf
+bc-dz.eps
+bc-dz.pdf
+bceclaircie.eps
+bceclaircie.pdf
bc-etoile.eps
bc-etoile.pdf
-bc-etoile.tex
bc-fleur.eps
bc-fleur.pdf
-bc-fleur.tex
+bchorloge.eps
+bchorloge.pdf
+bcicosaedre.eps
+bcIcosaedre.eps
+bcicosaedre.pdf
+bcIcosaedre.pdf
+bc-info.eps
+bc-info.pdf
+bcinterdit.eps
+bcinterdit.pdf
bc-inter.eps
bc-inter.pdf
-bc-inter.tex
-bc-lampe.pgf
-bc-lampe.pst
+bc-lampe.eps
+bc-lampe.pdf
bclogo.sty
+bcneige.eps
+bcneige.pdf
bc-note.eps
bc-note.pdf
-bc-note.tex
+bcoctaedre.eps
+bcoctaedre.pdf
bc-orne.eps
bc-orne.pdf
-bc-orne.tex
bc-ours.eps
bc-ours.pdf
-bc-ours.tex
-bc-smiley_bonnehumeur.eps
-bc-smiley_bonnehumeur.pdf
-bc-smiley_bonnehumeur.tex
-bc-smiley_mauvaisehumeur.eps
-bc-smiley_mauvaisehumeur.pdf
-bc-smiley_mauvaisehumeur.tex
-bc-takecare.pgf
-bc-takecare.pst
+bcpluie.eps
+bcpluie.pdf
+bc-plume.eps
+bc-plume.pdf
+bcpoisson.eps
+bcpoisson.pdf
+bcrosevents.eps
+bcrosevents.pdf
+bc-smiley-bonnehumeur.eps
+bc-smiley-bonnehumeur.pdf
+bc-smiley-mauvaisehumeur.eps
+bc-smiley-mauvaisehumeur.pdf
+bcsoleil.eps
+bcsoleil.pdf
+bcstop.eps
+bcstop.pdf
+bc-takecare.eps
+bc-takecare.pdf
+bctetraedre.eps
+bctetraedre.pdf
bc-trefle.eps
bc-trefle.pdf
-bc-trefle.tex
+bcying.eps
+bcying.pdf
+doc-bclogo
+LISEZ-MOI
+README
==================
-L'archive bclogo-v2-22.zip contient tout ces fichiers à insérer dans une arborescence LaTeX.
+L'archive bclogo-v2-24.zip contient tout ces fichiers à insérer dans une arborescence LaTeX.
diff --git a/Master/texmf-dist/doc/latex/bclogo/README b/Master/texmf-dist/doc/latex/bclogo/README
new file mode 100644
index 00000000000..a7d65721799
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/README
@@ -0,0 +1,115 @@
+Bclogo package by Maxime Chupin
+Version 2.24 dated 09/09/2009
+
+This package facilitates the creation of colorful boxes with a title and logo. It relies mainly on PSTricks and/or Tikz.
+
+The documentation pdf (in french) presents the syntax and parameters
+
+FICHIERS :
+===== documentation =====
+
+LISEZ-MOI
+README
+bclogo-doc.pdf
+bclogo-doc.tex
+brace.eps
+brace.pdf
+losanges.eps
+losanges.pdf
+spir.eps
+spir.pdf
+
+===== Fichiers pour LaTeX =====
+bc-attention.eps
+bc-attention.pdf
+bc-aux-301.eps
+bc-aux-301.pdf
+bcbombe.eps
+bcbombe.pdf
+bc-book.eps
+bc-book.pdf
+bccalendrier.eps
+bccalendrier.pdf
+bc-coeur.eps
+bc-coeur.pdf
+bc-crayon.eps
+bc-crayon.pdf
+bccube.eps
+bccube.pdf
+bcdallemagne.eps
+bcdallemagne.pdf
+bc-danger.eps
+bc-danger.pdf
+bcdbelgique.eps
+bcdbelgique.pdf
+bcdfrance.eps
+bcdfrance.pdf
+bcditalie.eps
+bcditalie.pdf
+bcdodecaedre.eps
+bcdodecaedre.pdf
+bcdpaysbas.eps
+bcdpaysbas.pdf
+bc-dz.eps
+bc-dz.pdf
+bceclaircie.eps
+bceclaircie.pdf
+bc-etoile.eps
+bc-etoile.pdf
+bc-fleur.eps
+bc-fleur.pdf
+bchorloge.eps
+bchorloge.pdf
+bcicosaedre.eps
+bcIcosaedre.eps
+bcicosaedre.pdf
+bcIcosaedre.pdf
+bc-info.eps
+bc-info.pdf
+bcinterdit.eps
+bcinterdit.pdf
+bc-inter.eps
+bc-inter.pdf
+bc-lampe.eps
+bc-lampe.pdf
+bclogo.sty
+bcneige.eps
+bcneige.pdf
+bc-note.eps
+bc-note.pdf
+bcoctaedre.eps
+bcoctaedre.pdf
+bc-orne.eps
+bc-orne.pdf
+bc-ours.eps
+bc-ours.pdf
+bcpluie.eps
+bcpluie.pdf
+bc-plume.eps
+bc-plume.pdf
+bcpoisson.eps
+bcpoisson.pdf
+bcrosevents.eps
+bcrosevents.pdf
+bc-smiley-bonnehumeur.eps
+bc-smiley-bonnehumeur.pdf
+bc-smiley-mauvaisehumeur.eps
+bc-smiley-mauvaisehumeur.pdf
+bcsoleil.eps
+bcsoleil.pdf
+bcstop.eps
+bcstop.pdf
+bc-takecare.eps
+bc-takecare.pdf
+bctetraedre.eps
+bctetraedre.pdf
+bc-trefle.eps
+bc-trefle.pdf
+bcying.eps
+bcying.pdf
+doc-bclogo
+LISEZ-MOI
+README
+==================
+
+The archive bclogo-v2-24.zip contains all the files to insert into a tree LaTeX.
diff --git a/Master/texmf-dist/doc/latex/bclogo/README.latex b/Master/texmf-dist/doc/latex/bclogo/README.latex
new file mode 100644
index 00000000000..a7d65721799
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/README.latex
@@ -0,0 +1,115 @@
+Bclogo package by Maxime Chupin
+Version 2.24 dated 09/09/2009
+
+This package facilitates the creation of colorful boxes with a title and logo. It relies mainly on PSTricks and/or Tikz.
+
+The documentation pdf (in french) presents the syntax and parameters
+
+FICHIERS :
+===== documentation =====
+
+LISEZ-MOI
+README
+bclogo-doc.pdf
+bclogo-doc.tex
+brace.eps
+brace.pdf
+losanges.eps
+losanges.pdf
+spir.eps
+spir.pdf
+
+===== Fichiers pour LaTeX =====
+bc-attention.eps
+bc-attention.pdf
+bc-aux-301.eps
+bc-aux-301.pdf
+bcbombe.eps
+bcbombe.pdf
+bc-book.eps
+bc-book.pdf
+bccalendrier.eps
+bccalendrier.pdf
+bc-coeur.eps
+bc-coeur.pdf
+bc-crayon.eps
+bc-crayon.pdf
+bccube.eps
+bccube.pdf
+bcdallemagne.eps
+bcdallemagne.pdf
+bc-danger.eps
+bc-danger.pdf
+bcdbelgique.eps
+bcdbelgique.pdf
+bcdfrance.eps
+bcdfrance.pdf
+bcditalie.eps
+bcditalie.pdf
+bcdodecaedre.eps
+bcdodecaedre.pdf
+bcdpaysbas.eps
+bcdpaysbas.pdf
+bc-dz.eps
+bc-dz.pdf
+bceclaircie.eps
+bceclaircie.pdf
+bc-etoile.eps
+bc-etoile.pdf
+bc-fleur.eps
+bc-fleur.pdf
+bchorloge.eps
+bchorloge.pdf
+bcicosaedre.eps
+bcIcosaedre.eps
+bcicosaedre.pdf
+bcIcosaedre.pdf
+bc-info.eps
+bc-info.pdf
+bcinterdit.eps
+bcinterdit.pdf
+bc-inter.eps
+bc-inter.pdf
+bc-lampe.eps
+bc-lampe.pdf
+bclogo.sty
+bcneige.eps
+bcneige.pdf
+bc-note.eps
+bc-note.pdf
+bcoctaedre.eps
+bcoctaedre.pdf
+bc-orne.eps
+bc-orne.pdf
+bc-ours.eps
+bc-ours.pdf
+bcpluie.eps
+bcpluie.pdf
+bc-plume.eps
+bc-plume.pdf
+bcpoisson.eps
+bcpoisson.pdf
+bcrosevents.eps
+bcrosevents.pdf
+bc-smiley-bonnehumeur.eps
+bc-smiley-bonnehumeur.pdf
+bc-smiley-mauvaisehumeur.eps
+bc-smiley-mauvaisehumeur.pdf
+bcsoleil.eps
+bcsoleil.pdf
+bcstop.eps
+bcstop.pdf
+bc-takecare.eps
+bc-takecare.pdf
+bctetraedre.eps
+bctetraedre.pdf
+bc-trefle.eps
+bc-trefle.pdf
+bcying.eps
+bcying.pdf
+doc-bclogo
+LISEZ-MOI
+README
+==================
+
+The archive bclogo-v2-24.zip contains all the files to insert into a tree LaTeX.
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.eps b/Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.eps
new file mode 100644
index 00000000000..229834fdfea
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.eps
@@ -0,0 +1,271 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 18
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%Icosaedre (Utilisateur)
+1 setlinecap
+1 setlinejoin
+0.6902 0.0627 0.1882 rgb
+0.1 setlinewidth
+11.7051 6.0581 m 9.9189 15.0917 l 16.8812 11.2588 l closepath
+gs 0.6902 0.0627 0.1882 rgb fill gr s
+0.4196 0.0392 0.1137 rgb
+11.7051 6.0581 m 16.8812 11.2588 l 14.2219 2.8028 l closepath
+gs 0.4196 0.0392 0.1137 rgb fill gr s
+0.4353 0.0392 0.1176 rgb
+11.7051 6.0581 m 14.2219 2.8028 l 5.616 1.4095 l closepath
+gs 0.4353 0.0392 0.1176 rgb fill gr s
+0.7137 0.0667 0.1961 rgb
+11.7051 6.0581 m 5.616 1.4095 l 2.9566 9.0045 l closepath
+gs 0.7137 0.0667 0.1961 rgb fill gr s
+0.8588 0.0784 0.2353 rgb
+11.7051 6.0581 m 2.9566 9.0045 l 9.9189 15.0917 l closepath
+gs 0.8588 0.0784 0.2353 rgb fill gr s
+0.3686 0.0353 0.102 rgb
+0.0665 7.5701 m 2.9566 9.0045 l 5.616 1.4095 l closepath
+gs 0.3686 0.0353 0.102 rgb fill gr s
+0.3098 0.0275 0.0863 rgb
+2.9566 9.0045 m 0.0665 7.5701 l 2.7259 16.0262 l closepath
+gs 0.3098 0.0275 0.0863 rgb fill gr s
+0.6314 0.0588 0.1725 rgb
+2.9566 9.0045 m 2.7259 16.0262 l 9.9189 15.0917 l closepath
+gs 0.6314 0.0588 0.1725 rgb fill gr s
+0.2784 0.0235 0.0745 rgb
+9.9189 15.0917 m 2.7259 16.0262 l 11.3317 17.4195 l closepath
+gs 0.2784 0.0235 0.0745 rgb fill gr s
+0.3216 0.0275 0.0863 rgb
+9.9189 15.0917 m 11.3317 17.4195 l 16.8812 11.2588 l closepath
+gs 0.3216 0.0275 0.0863 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.0665 7.5701 m 2.9566 9.0045 l
+s
+14.2219 2.8028 m 11.7051 6.0581 l
+s
+11.7051 6.0581 m 9.9189 15.0917 l
+s
+5.616 1.4095 m 11.7051 6.0581 l
+s
+5.616 1.4095 m 2.9566 9.0045 l
+s
+9.9189 15.0917 m 16.8812 11.2588 l
+s
+11.3317 17.4195 m 9.9189 15.0917 l
+s
+2.7259 16.0262 m 2.9566 9.0045 l
+s
+2.9566 9.0045 m 11.7051 6.0581 l
+s
+2.9566 9.0045 m 9.9189 15.0917 l
+s
+2.7259 16.0262 m 9.9189 15.0917 l
+s
+16.8812 11.2588 m 11.7051 6.0581 l
+s
+0.8588 0.0784 0.2353 rgb
+0.1 setlinewidth
+5.2426 12.7709 m 7.0288 3.7373 l 13.9911 9.8245 l closepath
+gs 0.8588 0.0784 0.2353 rgb fill gr s
+0.6902 0.0627 0.1882 rgb
+5.2426 12.7709 m 0.0665 7.5701 l 7.0288 3.7373 l closepath
+gs 0.6902 0.0627 0.1882 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+7.0288 3.7373 m 5.2426 12.7709 l
+s
+0.7137 0.0667 0.1961 rgb
+0.1 setlinewidth
+5.2426 12.7709 m 13.9911 9.8245 l 11.3317 17.4195 l closepath
+gs 0.7137 0.0667 0.1961 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+5.2426 12.7709 m 13.9911 9.8245 l
+s
+0.4196 0.0392 0.1137 rgb
+0.1 setlinewidth
+5.2426 12.7709 m 2.7259 16.0262 l 0.0665 7.5701 l closepath
+gs 0.4196 0.0392 0.1137 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.0665 7.5701 m 2.7259 16.0262 l
+s
+0.0665 7.5701 m 5.2426 12.7709 l
+s
+0.4353 0.0392 0.1176 rgb
+0.1 setlinewidth
+5.2426 12.7709 m 11.3317 17.4195 l 2.7259 16.0262 l closepath
+gs 0.4353 0.0392 0.1176 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+2.7259 16.0262 m 11.3317 17.4195 l
+s
+2.7259 16.0262 m 5.2426 12.7709 l
+s
+5.2426 12.7709 m 11.3317 17.4195 l
+s
+0.6314 0.0588 0.1725 rgb
+0.1 setlinewidth
+14.2219 2.8028 m 13.9911 9.8245 l 7.0288 3.7373 l closepath
+gs 0.6314 0.0588 0.1725 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+13.9911 9.8245 m 7.0288 3.7373 l
+s
+0.3098 0.0275 0.0863 rgb
+0.1 setlinewidth
+16.8812 11.2588 m 13.9911 9.8245 l 14.2219 2.8028 l closepath
+gs 0.3098 0.0275 0.0863 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+16.8812 11.2588 m 14.2219 2.8028 l
+s
+13.9911 9.8245 m 14.2219 2.8028 l
+s
+0.3686 0.0353 0.102 rgb
+0.1 setlinewidth
+16.8812 11.2588 m 11.3317 17.4195 l 13.9911 9.8245 l closepath
+gs 0.3686 0.0353 0.102 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+11.3317 17.4195 m 16.8812 11.2588 l
+s
+13.9911 9.8245 m 16.8812 11.2588 l
+s
+11.3317 17.4195 m 13.9911 9.8245 l
+s
+0.3216 0.0275 0.0863 rgb
+0.1 setlinewidth
+5.616 1.4095 m 7.0288 3.7373 l 0.0665 7.5701 l closepath
+gs 0.3216 0.0275 0.0863 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+7.0288 3.7373 m 0.0665 7.5701 l
+s
+0.0665 7.5701 m 5.616 1.4095 l
+s
+0.2784 0.0235 0.0745 rgb
+0.1 setlinewidth
+14.2219 2.8028 m 7.0288 3.7373 l 5.616 1.4095 l closepath
+gs 0.2784 0.0235 0.0745 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+14.2219 2.8028 m 5.616 1.4095 l
+s
+7.0288 3.7373 m 5.616 1.4095 l
+s
+14.2219 2.8028 m 7.0288 3.7373 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.pdf b/Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.pdf
new file mode 100644
index 00000000000..5bb65371df1
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcIcosaedre.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcbombe.eps b/Master/texmf-dist/doc/latex/bclogo/bcbombe.eps
new file mode 100644
index 00000000000..4add04af43e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcbombe.eps
@@ -0,0 +1,2392 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 14:18:30 2009
+%%BoundingBox: 71 690 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcbombe.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1418
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 242 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 242 a
+0 242 142 242 v 142 242 a
+ currentpoint grestore moveto
+ 142 242 a 67 167 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0.251 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 6.63495 15.01024 6.42111
+14.97821 6.21278 14.96133 6.01167 14.9606 5.81776 14.97418 5.63023
+15.00143 5.45076 15.04153 5.27849 15.09436 5.11345 15.15927 4.9572
+15.23459 4.80817 15.3203 4.66794 15.41565 4.5365 15.51982 4.414 15.63205
+4.30019 15.75064 4.19528 15.87718 4.09991 16.0086 4.01422 16.14566
+3.93805 16.28662 3.87154 16.43161 3.81628 16.57991 3.77055 16.72969
+3.73535 16.88116 3.71126 17.03337 3.69843 17.18558 3.68326 17.36824
+3.656 17.54857 3.61761 17.72719 3.56712 17.90349 3.50539 18.0766 3.43324
+18.24641 3.34914 18.41147 3.25536 18.57248 3.15047 18.72873 3.03505
+18.87935 2.90926 19.02362 2.77391 19.16139 2.62805 19.29283 2.4734
+19.41618 2.30908 19.53087 2.13524 19.6382 1.95258 19.73515 1.76112
+19.8233 1.56075 19.9018 1.35168 19.96904 1.13455 20.02515 0.90935 20.07002
+0.67621 20.1029 0.4351 20.12296 0.234 20.12614 0.02798 20.11488 -0.18033
+20.08849 -0.39024 20.04839 -0.60175 19.9947 -0.81166 19.92747 -1.02072
+19.84727 -1.22673 19.7552 -1.42857 19.65105 -1.62492 19.53563 -1.81479
+19.40897 -1.99672 19.27205 -2.17056 19.12534 -2.33403 18.96835 -2.48538
+18.80244 -2.62561 18.62787 -2.75142 18.44435 -2.8628 18.25363 -2.95815
+18.0557 -3.03664 17.85066 -3.09679 17.6383 -3.13676 17.42032 -3.15681
+17.19684 -3.1545 16.96846 -3.12076 16.66086 -3.05914 16.36511 -2.97173
+16.08232 -2.86194 15.81067 -2.73222 15.54868 -2.58551 15.29547 -2.42377
+15.05107 -2.25064 14.81403 -2.068 14.58246 -1.87971 14.3564 -1.6874
+14.1345 -1.49423 13.91652 -1.30363 13.70024 -1.11694 13.48557 -0.93747
+13.2716 -0.76839 13.05681 -0.61299 12.84053 -0.47191 12.62181 -0.35014
+12.3999 -0.24843 12.17313 -0.1714 11.94156 -0.12018 11.70279 -0.09853
+11.45755 -0.10892 11.20361 /Lineto /lineto load def false 1 setlinejoin
+ NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5
+2. CLW mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch
+def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan
+def ArrowA x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength
+mul add /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 0.8 SLW
+0.251 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial 67 167 a
+ tx@Dict begin /mtrxc CM def CP CP T STV newpath /ArrowA { moveto }
+def /ArrowB { } def /ArrowInside { } def 0.8 SLW 0.251 0 0 setrgbcolor
+ 0. true -8.00827 -9.0147 9.05394 20.12614 0 Frame clip newpath mtrxc
+setmatrix moveto 0 setgray end
+ 67 167 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0.251 0 0 setrgbcolor 0 360 8.01231
+8.01231 0.0 0.0 Ellipse closepath gsave 0 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial 67 167 a
+ currentpoint initclip moveto
+ 67 167 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0.251 0 0 setrgbcolor [ -2.80435 11.21718
+2.80435 11.21718 2.80435 0.0 -2.80435 0.0 /Lineto /lineto load def
+false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0.251 0 0 setrgbcolor [ 0.0 4.33148
+0.37654 4.32024 0.75151 4.2866 1.12416 4.2305 1.49265 4.15274 1.85648
+4.05347 2.21298 3.93243 2.56154 3.78987 2.9013 3.62715 3.2314 3.44524
+3.5494 3.24338 3.85468 3.02307 4.14711 2.78503 4.4244 2.53024 4.68553
+2.25945 4.93079 1.97348 5.15831 1.67297 5.36823 1.35962 5.55809 1.03442
+5.72878 0.6987 5.8794 0.35332 6.00923 0.0 5.99884 0.36053 5.96594 0.71948
+5.91228 1.07599 5.83696 1.42857 5.74088 1.77554 5.62387 2.1169 5.48682
+2.45016 5.33057 2.77464 5.15428 3.08958 4.95964 3.39314 4.74728 3.684
+4.51817 3.96214 4.27219 4.22572 4.01091 4.47488 3.73535 4.70718 3.44695
+4.92271 3.14557 5.12065 2.83235 5.2994 2.5102 5.45955 2.17778 5.60065
+1.83803 5.72083 1.49191 5.82095 1.14017 5.9003 0.78441 5.95801 /Lineto
+/lineto load def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def
+} if n 3 lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2
+mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1
+y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n
+n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12
+x11 sub atan def /ArrowPos 0. def /Length x12 x11 sub y12 y11 sub
+Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add
+def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos mul add y11
+Alpha sin ArrowPos mul add currentdict /ArrowInside known { ArrowInside
+} if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1.
+ 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos
+add def x12 x11 sub ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11
+add currentdict /ArrowInside known { ArrowInside } if pop pop } repeat
+} ifelse pop pop Lineto } def n { 4 copy /y11 ED /x11 ED /y12 ED /x12
+ED drawArrows } repeat x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED
+/y12 y0 def /x12 x0 def drawArrows /y11 y0 def /x11 x0 def /y12 yy1
+def /x12 xx1 def drawArrows pop pop closepath } ifelse gsave 1 1
+1 setrgbcolor 1. .setopacityalpha fill grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 0.251 0 0 setrgbcolor [ 4.48442 13.93988
+8.1485 16.86197 6.11497 12.63942 6.11497 17.32668 8.1485 13.10411 4.48442
+16.02621 9.05394 14.98299 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+end
+
+@endspecial eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcbombe.pdf b/Master/texmf-dist/doc/latex/bclogo/bcbombe.pdf
new file mode 100644
index 00000000000..9edeb9dfacf
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcbombe.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bccalendrier.eps b/Master/texmf-dist/doc/latex/bclogo/bccalendrier.eps
new file mode 100644
index 00000000000..db1696f09cb
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bccalendrier.eps
@@ -0,0 +1,3545 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Wed Sep 23 14:45:25 2009
+%%BoundingBox: 71 700 90 721
+%%DocumentFonts: LMMono10-Regular LMMono8-Regular
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\bclogo\Logos\bccalendrier.eps
+%+ CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.23:1445
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: lm-ec.enc 0 0
+% This file belongs to the Latin Modern package. The work is released
+% under the GUST Font License. See the MANIFEST-Latin-Modern.txt and
+% README-Latin-Modern.txt files for the details. For the most recent version of
+% this license see http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt
+% or http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt
+
+/enclmec[
+/grave
+/acute
+/circumflex
+/tilde
+/dieresis
+/hungarumlaut
+/ring
+/caron
+/breve
+/macron
+/dotaccent
+/cedilla
+/ogonek
+/quotesinglbase
+/guilsinglleft
+/guilsinglright
+/quotedblleft
+/quotedblright
+/quotedblbase
+/guillemotleft
+/guillemotright
+/endash
+/emdash
+/cwm
+/perthousandzero
+/dotlessi
+/dotlessj
+/ff
+/fi
+/fl
+/ffi
+/ffl
+/visiblespace
+/exclam
+/quotedbl
+/numbersign
+/dollar
+/percent
+/ampersand
+/quoteright
+/parenleft
+/parenright
+/asterisk
+/plus
+/comma
+/hyphen
+/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
+/hyphen.alt
+/Abreve
+/Aogonek
+/Cacute
+/Ccaron
+/Dcaron
+/Ecaron
+/Eogonek
+/Gbreve
+/Lacute
+/Lcaron
+/Lslash
+/Nacute
+/Ncaron
+/Eng
+/Ohungarumlaut
+/Racute
+/Rcaron
+/Sacute
+/Scaron
+/Scedilla
+/Tcaron
+/Tcedilla
+/Uhungarumlaut
+/Uring
+/Ydieresis
+/Zacute
+/Zcaron
+/Zdotaccent
+/IJ
+/Idotaccent
+/dcroat
+/section
+/abreve
+/aogonek
+/cacute
+/ccaron
+/dcaron
+/ecaron
+/eogonek
+/gbreve
+/lacute
+/lcaron
+/lslash
+/nacute
+/ncaron
+/eng
+/ohungarumlaut
+/racute
+/rcaron
+/sacute
+/scaron
+/scedilla
+/tcaron
+/tcedilla
+/uhungarumlaut
+/uring
+/ydieresis
+/zacute
+/zcaron
+/zdotaccent
+/ij
+/exclamdown
+/questiondown
+/sterling
+/Agrave
+/Aacute
+/Acircumflex
+/Atilde
+/Adieresis
+/Aring
+/AE
+/Ccedilla
+/Egrave
+/Eacute
+/Ecircumflex
+/Edieresis
+/Igrave
+/Iacute
+/Icircumflex
+/Idieresis
+/Eth
+/Ntilde
+/Ograve
+/Oacute
+/Ocircumflex
+/Otilde
+/Odieresis
+/OE
+/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
+/oe
+/oslash
+/ugrave
+/uacute
+/ucircumflex
+/udieresis
+/yacute
+/thorn
+/germandbls
+] def
+
+%%EndProcSet
+%%BeginProcSet: texps.pro 0 0
+%!
+TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2
+index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll
+exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]/Metrics
+exch def dict begin Encoding{exch dup type/integertype ne{pop pop 1 sub
+dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}
+ifelse}forall Metrics/Metrics currentdict end def[2 index currentdict
+end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{
+dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1
+roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def
+dup[exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}
+if}forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}
+def end
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+%%BeginFont: LMMono8-Regular
+%!PS-AdobeFont-1.0: LMMono8-Regular 1.106
+%%CreationDate: 22nd January 2008
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2008 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).
+% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG.
+% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki
+% from GUST (http://www.gust.org.pl).
+% This work is released under the GUST Font License.
+% For the most recent version of this license see
+% This work has the LPPL maintenance status `maintained'.
+% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki.
+% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file.
+% ADL: 778 222 0
+%%EndComments
+FontDirectory/LMMono8-Regular known{/LMMono8-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(1.106)readonly def
+/Notice(Copyright 2003--2008 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def
+/FullName(LMMono8-Regular)readonly def
+/FamilyName(LMMono8)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch true def
+/ItalicAngle 0 def
+/UnderlinePosition -133 def
+/UnderlineThickness 61 def
+end readonly def
+/FontName /LMMono8-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-456 -320 743 1014}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF105BFA1C4BAA954C1A4935178C1A8D83170E28AC
+DAB69F06AA3E48B756686721C14D38161315F37969C634B4F3577ECE895C6566
+8D35539B83440079BCEE18E8A01299022FC701D373A96A65121458A851F6B279
+FD73DC43B4726E792C719A80C077CA984EF33E1A7EEF3ADE8418A1D33938889D
+3EC38630976AECD0F57FE3BA459909DBB874968612943DCEF878CC71DA1DA11B
+D7CDE67361D032D485A02996638D482E237B32ADD01457BB4F428C7775E01CFE
+D17A68E3118DDE73343B40DDEA548DF7932D97AF81AF5D696FD8A5FC35F9BF80
+18E7C96E9C8AB1E7DDF21962F1A70B50E5B079BF553C33AD2B8F53FF62D75363
+8952144C9D7C1CD0211508979FAF6DABDB6582E0999DFFA3A1309DB5D00AD611
+DB1F6949A2AFA36C7D751D7EC43CB55FBDE79CE6B26A682BA9CA7BCD141E2B90
+95B82C7AFEEB7D02B13A1CFEF7F6322D4EB72DA4FF49BFD78811D831B49BF69F
+ECAE484519FBBBC76501DBB7BCBB3D3A29C932EDD289E54EA987C1924683EA2E
+D4383D5B8E32FAE0BC42B5FFA7FA2F724A5F362DB03D83DC9C975FC851D23CFE
+5896C22744D590C0E76357030350B314639C3BB8B40E9F03D7608B6630B996D2
+741BE7AB853D7DE4B32BB12C9E3250B9A1C523D00E9FADF4C35BF1D5CB875B2A
+43838E84EE8B55B299F7DE5884208F3A480C8030A85C0B4332C6BD451141CAC4
+52EE7BE6EBC3D0BFBD63718D39ECA43A2D461F4534FC680164A4D34F9307A86B
+81DA3F7ECCF3D8E2B0157BB082E5EB5E4E069D3865B3B3C46F8E9F9B17CDBA5E
+B367E9883141CF21B1D502BA67C1F8312CB08F3179160B3555D2E2D2DA4EFEC9
+6FB4086BA92A0BF28F15AFA39C5F99B9B74CB9CABDCF62DF163FB9FF43229B74
+CE9D0C64C56A927FEB12B9E76FEA5288574DA436F896C6E5F33484C8D266FA91
+01DB5FD7B53F01A47C434084695881F997C99E46BC0BF3A4EC2B5CEC1FF8D4F6
+C358A712769605D9E32DDC8A2AF6F6A7FC749C54E38BCAC20ED17BF51EAE2C85
+21AB6B8FC85ABEEDEAAEB3423E9A88A13229E9843F0EE896ADE39A284DF9EFC8
+8D77D02D396C46577715C95A57D76C2C39A36A0320EFC9D45441BEBB7148DADE
+2547DB52F38098A03B11EAA856CB690E4D9D6B4452C138A84B53712BD7B63F09
+73FFDD625749018A1EC11BE08075931F909D2CA2E5DB900DC43E65D720CB772B
+840B1F52CBDB39B6E9E037705608D71FF78077E0118B0B9702ACED9DB6F1156B
+5FE3882E8AE45DAB0A4848457A42152F9BCF7C4A5E7EA4AB7D3BB0F9DC7CE31C
+AD25EF631C48E3B2431BF4511551B4793C42178514EC183BE32AAE65DC84BBBF
+FEAE07A0CDFC782280B8436B909CB12D82ADEEF2560AE491DE4908C94E372BEF
+64BB6CA5F0E38B4A157603F4C29E1240F90533E281EEEDCC3F5E4DE80BCCDE28
+EA61C710496DD8A4F0AB05ECA72D6DAE2C3C67CB3B4E4A19BC80F638158DDC1B
+6DDD5CFAA56386D1764B92BD48CCF7CFA30A7E92FA628D056602E7EADA129167
+8E402EC73D4064328E15B8921F38FDB6F24414A757007424641F740EC5307A40
+735A718B09064159479685AA9AE8DF53A2A21D951A60E73E67169DC0D53B5B7F
+23CD96597C5D225B4C7A3FD940B5B7DAD3C2AAC5B80EC514976A747B8E08E66B
+C3DDA8287F550A0681726C4D377CA89ABD1BEE3C9BD84A05DD11C97BB780BB6D
+7ADA1E291A67DA9DC8C112D33C10AA8CDCB94DFC5FBFA569DB2DEE9C6F9B59FE
+8E849CF8FC24D3AAE7AB25DF8A37E992D8580FF57E5ED0D3627029DDCC2A5D4F
+1C948FD5F508EF79A6E58394BD8316E74E486126604BB3082C40A65639E91B97
+483486C378BB58A04CCF5560C9BC0F1062E5F9BB623801E5500EB43C05DA8960
+309A86FF740C208AD152E12301D4CC5F0E4927B5D413A21080DCFDFED080F13E
+5F04E1D4B28BEE5E71772C8921D69D11ACDDE095D43077D47E332D8273DED975
+BD53607ED94253CB78FFAD6ED697153C95555805F13A46336CD2171FFC355965
+BDD4589064D7950B82F1DE12E1EBB53F8D738E0ECEECB452C7059F491D1C8BE0
+38ADD1FA4019E1C78B8C76510D8E883C2A3E8826B5A2A74206C0A2FD237CDA51
+8A4D5AD87BC27392D7A101E273541B8FFD8A9F88AF4464F3201708E5E6CCD078
+D772DD8B03B8407E5D1395C428BD92DC4EDA5C72C6F813D53F1E9C3734B81C2A
+DED2156928CFC8EE865A632AB4A611CAD82809B7204B707CFD45E588F7F0CEA7
+717976FBB04E6A3577A3C0A859888B5DC6EDA08D241782F0B701960683AC1376
+F4E12449863C38560F4C025E8158D68F71F943AD74C985BA26DD7650B28A326F
+8B92F4E100749B38E43EECAA35374EC47A70CB070853165C61C1EE74FF06F22A
+CB9624AEB7824D5B0AE928DA1E4073F2400FAF3C00857A57EFDD6BABBB2B1539
+76A11DDD81276D76A9549BD550F5600AA8036BC6094AD5D0C723C2131B7FD8B6
+C20CD382EB8EEC2982333428081F09F426BE53C87C2C5CAA2F2A5BE02C895D60
+E536D3DAB7BF60A75AC6D3B5746051A0E8E152C99FF20214153556441E002375
+52934829824046E10E39028ACCCCB0D002853B54BA0DDD6C54A36A495743B1D1
+65EA43C14069106589A066E3C09DEF8C946669EF2C286DAB56E327ADED08D5D7
+5F78405FA20565E8593A4E99A03A3595EEFAC28BAC01932FF6D3254526D953F2
+7586F8CD1056B6969602161C8FA3B0A8335A4D3AE1C38CDB5F176631A69FDABF
+8E5FB7ACA43E545C1129D021A5E90BC65020446B3C96FF9C99042164C633B9FF
+63BCB644DCC3AE03D656334D7A3E9F845B49E2E0C1B754A6731667C48C39B007
+A51A697A4D8A360D401719C5FDD35E2A091350294B1A1AE1533EAAC17EF92DC3
+567F61D33816DF7E935CF4233C2614BB02993C18F5228D9C33BDBAC2EE943566
+F917B7E3C6B26FF7C075A884DD1EE8AF71499D39CE0567AEA286091BEA9D6A44
+3A5892BBD7756CFD54770E2A8D81BD4618D916A30EC70F16A060C09502E182EA
+B0E7D0D01ABC1E310F7D2A2CF63FFD0AA111D6B991AB46827F81542BCA6356A3
+924969BBBE7F59D359C188F8D6F5D6D67FFAA12B256C0A58AE75843EEC7B5DA6
+5FC5113028F5CA15C2FF5C0CE1AD4B3E9909F220E99C367B96C474DF3C2D253C
+0F83DA625EF5CC0FC9F75FB7A90677C02630C6B4D5393D9E96E3E09612F99B10
+0345D53EDC134D23DCAABF22FCD1AD8EADCFEE7E92637D00097377258E81C9C8
+98C8CAE1F50A8D81F244A01498B59AAD06E09E59659F2B7C58BE9909CBFCD273
+EF5617183CFA6475788ADB642F09E20933D1022D57370B9BB48DBDF15D0CFAB4
+0CCF15567797367A96A03D3AC106E06F828E956E5AB3A47D574A3D68FE38181F
+8C09AD6DC1446B3E65065F555A41FA4A0C8ABEA034AE870E385830AFA9886711
+7694133A3248571E032FA87046115B70830C4AA68E87D470463759F200DAA04B
+33D16DB6B31C5236F099107F153E3FFC70BED6D04DB4820FDAC0024BC58BCAE4
+2E376A4BF18143CB463B43B8D35C1AF046275EED4FC60F6AE7BF7BE43085E59A
+7E8982198427830820DD196E4EE2631788B5B292CBD205BD8A7EE242C7B965D9
+AE82D16F0DDFA0306B260C5CD4D9A58A2AB6B31D984F0072AA303D33D5478995
+B5338186408583FCA0C342E95FB053CBDAB825988EF44CA9EB4A2FE8BBE548A8
+C92D6D52BBBD815700DDBF74140C32A2AAB5337B999E290BB4078ED610795231
+E3FE9BE99117EBF4E753A713F08859480588CA6F6C580A811E48D10296D1AB86
+3C95186206F7453C174D514A9C4DF3FB399D621E90E7A0F10941DE0F2AC2D901
+074A77981D49919570F2E5F06D721403053F2058E88858E733E7227EC0C4F85C
+A74278CE1F76F4545C11F06148915DDB312011F19F94F8BD632589AF0FB8C8BA
+BC8A44A5C70008DC13655D7241194A25388FEDA8896ED5785E0D4677DE8945C1
+299AFF8554B37C97284940DD33D9D66638FDA8BDD4DE1F10153D551CCD732503
+2D027AF5D96EDC72B7B9B4BCC12F4209B1951AF23FF686F6FC48EFBC5C66A86D
+A1267EFD0181C65C2F290D74871316D8FAE438A579EBA81C0456BF0297BBD91F
+79D3C09D5E90650BC469454D661AF243C250B6193547DEB0F706747EC06BC9FE
+94C5B89747B85F1D107E7FBEE52ADFFE31C81FB964E824A7C9994B56C119FA5C
+3274FEAAE12CA8D40B40B3B362AA3B778C47E857E4C2AC635DFFA4C9F987EAF1
+4699937EC5E60FFB3A13AC9FCE3CC664E3B5C473F46090D631EF06BC9B62A95F
+E764579DE0CC5B4E5E15AECA8C66082082F59C3DE71163335BECDDB32B48CAC4
+3A4C530DB3EA06EF9672983138D713933F6765EC3CE1B0C7B5C121106509D02C
+6FEF286C526C019514EA451987C715206297C0971364CC5B83001B07895F089B
+372BBC0F0F89FE477C2413903A61E139B0D0A1F4692D7477AFF41983B1FA5937
+DF61E9CCA3BFE943C25C000413A12A4D2A05B5C1F8295AC799CAC6349A8030F0
+2D5D2296FBFA1E5C6668641E4C15421F6D812255D98D2E8AAB81E93EE65123A9
+456E301532929320D07646B8F4EFA8445799658F955BF73F38B67E1FDD63579E
+E3AA4E8985E3C3F61076183D794D012E55C69242F195F75851616E483BE513ED
+163242C8A16395C67E4EEAA170C20BB6AD11DBD978F3032D2FC6BD54FD7664FA
+F472BBF13868C5D0712B114BB44747C291F571D6E0ED8901F90F6CF84B22474C
+84C7C3696AD83CA15099ECDF3A273E8CEF09B0E4AA470CFF413429B3CBDE2628
+B4A301C4AEEEF3DB685568D9A4A02AA79B5975C140AABA1B604C266E6FB55E0F
+6F6F786A20316B992F547DE9372FEEA0BE4053B07640A4713C65620D09F8EFFE
+7766EDBD7CE06A64C2CBA83EA906842C86B5147254A6EB06C3E874B88A2E4C38
+098DC1B5EB22D5F83D6A295AB9E01BF45591DFC3BF8B32E5A35132E206921E31
+23164FD0AAC0858943DD324F4CF7064627B70B61C638952B9509F7501E561EFD
+FB8F1E70B5759D7DEA6A5634D8C408A4217BBD280FAA448F5BF23680C0DA9FF7
+E6BF4298E548FE405D01D18D8EBE0269B68A357DDA4E9A4396479FD092AA6766
+50FF097D8A100C3CF0C05C0E30F0B3C40E64085640324695590A087E71F8C21B
+A46E833E6C0DCF6556C1CC6A1C88E8243FEE108988BE87E309577263E7B3061B
+B6599DDE33CF62E3E17CA208450468258082D6400021C593C2475A14648A8087
+85ED46B2205D9BCAEA85DAF9DFB14F50FE1D963E9327FB8671DC9F1B6ECB2EC7
+EE483531E3DF9BCCC9757D7B51A9DB721193CA8D8B9795BAC734FF40961F4881
+12ED925C55E4B0DF0E5BEE4B29E5DA8177D46AE2C7EFD20CB37230AE9012BE8E
+990CA41D0EBC56994A3A64EE0A5930150D0AB4682B25D8FBBB10124FFCE47CEE
+F2B56DC959DE82E9467C98255B361BFB67AF9124F7510F6853DB8998F9CBE047
+2F641CF6660A76C929E5680BFA65C25A312852770DAB7D39E1217619DADD5A52
+9F4AAF707B0A9B94E0BEF9D47D21527A3B1D808785CA3493751088D410AEA9CA
+C3C1C46158F508D7AB7F99ADD20B351B58302CCC65CB916CBB6C5996C95C98B3
+40BCB45BD0239F0F41E86F2D4EEB998520A57985CEEF4463EEDFD8D1802F2EC8
+62FB85A143D7B299223ED8525202C1BB1AA20CC2172E8954FE7E4AE6BDDDCCD0
+3A3A1B7138B48D6105A0E23FA25DD024213A0F8087A08EFE3C136CFDAD3947E2
+93CC426E38653A16E2A7EDF6D500E92372AC26A1209E17F22E4F250B1AD23480
+8045A2343483AF580690A1C2394520D09923F16F3816C9775FCE5AEB0B4FD753
+6C922E5D54C8528E8A4BEB8FAB9005788A5B01823B27291F2D47B02EC7F91571
+FCF8978A464394EA84D2DF962A9E72C29C0B7A875CE92C07241444957DEF22D0
+2AE6333848C9658E9E37741A481FF3F7E0CB583C75756CD2F3976186D22F9F05
+4D68CB91DE66F19076D8D365CDD8FF305059C2E913B7978671AC30CD51D35385
+0158CF3C78E858E34B8CFFDC7A128BEC0947A9E4FF16D3AB8647D6542B4C6CD7
+7F4469A676906BA0888497FCABFBDC68C6EB5DA286DA3420805F6205E00B2A2B
+A18A1F5E4453A41E2104508C1F0683360F2D36241C76BD7D555403B83025FC25
+9D4ABAD69050D64014F1B2D2DB8453CCFADA24266BE73CA1B36B4B2F2784D24C
+676AD7F3EEEB60A6554A2CEE9C22560739C926926B73B5A3F17F9B343C3728B2
+6AAEF33C0C45D0B3A5A116E52569AA2577DBBD57648E398F5A052751A5B22688
+4049A139265531BD241735EFDC419077B3882F31F29C281C2F75B1F1589DE405
+A8F821C2EEA5310936F6232750BBF9EF28E722B7CB9131013B77B216FE145E5E
+49AF9C313B38BAACA5F6565B966BF65083A9120FC2606A9025D3DB7F074CFD27
+28ECD18DDA85175E3CE67FD4A6528AC6E33F43467A18708A41B051F31A13C3EA
+3D583D1AA7FBCF211BF0A0B29BFB01DBCF14D4CA5F89463EF6D0CDD0EACD7326
+BAC78D75F9B073B562F6812D9491A77D5F75F024E63E4D7235723125FDA6A45D
+9B4C62FE9472309F64D20E5DCC5484AD230FBC4EB1D310296E53F69B1CFFA43B
+97B9C6282E98DAD2C3ADE7D975F1B658A581597AB3C7962224D4E3873D2DD75B
+B1C61281E75298D261E87E2CB6BC949688B30F0B4F3FD3AFC9CAA04A796E5AF9
+2FB97784C67E58AB7F8DE615CB09E909AA836C2B4F5DE2E775A3D3261F152EBA
+489EC9E5BB44ADFB7558DD953EDE1309B66F009808B3E847A873C89176E74807
+8A8DE1F2EA9821454CB759B3D82921AB4B9278E652C2F309C960C042EA679F78
+F37398401D0670B1F871F98366F7E8FAB04A0D7F1783EAAB80313773E1AEEA85
+7364EFDDB58A3C4FCA7B685CB9BBF818D140C7D6C640672801A45C344BDE1B37
+34804F72600587293247C5DB2C5FA1FDF7996A5D843F40FE063935776459C824
+FA2F48C9A647FD2AAA67DCB9DC94301EA34C3872A7A145184E7661CBCD39E577
+C63265C59F3BD53A8882D82929177263931EB25BB03850ECDAF201BBABA43032
+6604E56F26766ABC26A6A10E3A4E2B8A1F5584EB0A7E91A4FCB9BCD2AD4AC306
+27BE974490F2C2A1EDF171B5A5F7ED24B33D2C3AA5AA5E846B6302B1D58E2DAB
+B37541DF88049C1F1B0E7C3620451636E19BC9CEA795AF21EF3258E5238D15FE
+B57C4DBEA8C96CDEAF8149911A78DF6691E34EC130A824549B599829376AB867
+F43B2F6320B331A6EA21B51EAE40D3F4F013108405DF82E0D367A0200CEDC0AA
+E2ED72D1D214356F2F45DBAEB9560610E8BC8794666459CD5C0A78314EDF4F43
+61872DFA2C65EB44D5CB662BE0B2857AB51ABA1CEDC02E319A37EB5CEFDBF364
+92D265A429BA518605960ED34E950BEE93FCFFCDA7DC7C5761CF52AA53D2995F
+020A0BC9F8959C4ABDF4FE7C245CA0CD2A4127A3FC408EC625E310DA3E7E84BD
+A3755FE79337630AA14DA5BD9E017D60FC01124BABE23FF62E75FCA39AC6F394
+CD7FA1132EEB0C7442A63B99930B70AF8F83BCC2FE8BC6D819708103BB963F6F
+0BDA611B948CBEC8CBEBDB62AE9ED4A5E7039852BE3A89071578898052C2152D
+6AD2291E6FA8684619451A3D0928F822846260B8358DECEC977F9C78F5BB0972
+7EBC06D1830262FBD400CA217255FBBBA1E86D352FF8A9BC757F9DD3565AC9CA
+F908C0880C2DEF08A6B185F274EEB557DF134CA24FD71890C2F11FEE063BF60E
+C48ED7A31FA35DBDD6CCD7D1C332F4231C62C5F3370C9D152978760F1E449125
+4E666FD8F21F61FC2EE6DF51A16B4969B5619E2B15FEDB0CEE627589FB0EA874
+920BAFB89889071729076D755022032D31B6BE9D16367A5FAB1D14D281D3E8D0
+9DC525FFBD6D76B627A600BE050E645BEC59B1DB14A6EECC6AF3F799F2581F14
+FAA51AE0B81D6AF0602B80FD0E86AC17D1679FFA26F1D282EBC19257DBC8AFC1
+D266C3CD4D3B94486D92B811D773B475C03A372183C536651BCD25496516A425
+88342850F206E4C631AE0472AE86C7CEF8887B137B7E2D7A8185EB91514A80F8
+1FE7226F6720890E2AA399C35791FE45F069B7946B5EB1D7A5CFCC0057DC032D
+0A5ED2A5165A9A2EBC4A7516246D99C18A0A61F658CDAE3E8EF86BD5CBD90AAA
+608A3F65C0FB12D24CD51A76F2A8ACE261620AA95755D6941EB85166FB6E723F
+9B892781BB126FFE6BE23910E7F181D048F238829D47059814DCD688554EFA8D
+7F2FC0737E4E6A6C452DDD57FC1BF8B388B207BDEAD9C007BD094F08F395887C
+E66F5595AAEEF01AF41FA14D10AB03AF3809856DDE35FBD02E18A45809360329
+ACF5B8136EC07CBC550A59BEF7C88A393CD68D78DB2A5DFBF469C3D02FFFD3B2
+1DFE7CBA8CB281B4C8002485CB219AD22C6E76503F3FE34DF9CC129525104AD5
+A57EC21CF733A46B22C39FBE586A54E53633D9B6B47266B4A1084BE171D03696
+A026FA7A544E4D1139CD650B2CEBB80EB68DBC5D82F253F83F629586E89A5540
+57B9862A120162EE8B3F4E8DA71604E693340009C324B840252750485AD8A5BE
+240B63473C5E2AE22538695899B1F2CC0C69C7195DDA63FFC07231A6AAD8FAFB
+68A234C9BECC29AB2EA93D4D4B5A2BCEB8AB14C9730B1E2F1B972B143DA98F5C
+F93DB14805DB66731CE5C25800128822C32CD9A82C230C5BCEB0FEB0423C4EC7
+CAB638692995EE0690A278917A0BE8BF278B612A84F1B129137B05A079E7C728
+D8AE7462A5C4D2D09AC4B8DF83261D7E280371E1F963484EC4796E7CFA879014
+528B7D49E25BBD0E75F70B0F06F5417CA5CB3E7BD25031B04F3AA152186EF35D
+59BB974980F8D0478935C577AAC93E198CEF273808B048A910329044B0344247
+E6C405F168F785C8B0DDF9A3963D0B1161934B23A5C5C87D078FD970074E35E3
+5172BEC6F4580AB5F541431E0E308517DEE57FA72987C464D5A507A40F2C061D
+1DBBC2F811A719AE4E389BA5D63E8BE4455B35E59BD39AC3F00B126694FF25EF
+5CC6B22EDC09857D3E5F676DD05F584CCE1BF61EBB5E4F958D452D448485D7F6
+4F8FEE8212CD7722EA8B45D4B0DBF3B4F29F053C44053E14ED09E3E7A0FCACD3
+EFEE1980413950EE4337ADCCE3606B1AB98B58BCFA8CD53AE8C12FFB85421943
+A78832A4DE2BB999F2EEB33FEF0BDA5CD019A73B7944C9C20553244EEF2BB5B9
+D2B8E55DEE1AF58852B50FD3884410A7B77F47D006E6B076E3F920E0E400838F
+718712D374D9AED7F0A85A6D7AE6237AB288B5E6B4F9091D3510AA88179260F7
+A7B324FB3485903C00361D3E72B126ED17CC167AF71471691ACCBB9903C3A52B
+C4DD75B203A7B04921F0B535C66D2EE6E3C8B5345709E0843D17D3C5727AB54D
+C757EB0EB7D66FCE28DB743BC92B2EC376370FD355FA08C74EF1419B052D8F22
+71585D7BD902F471D99ED216F355139932AFD4B981D3DE3CD424E81DA2094448
+67A5E1A79AFC6F702EA3ABCB6D3BCED34EC348D7790A37C975F5D8C322EC3E80
+50A97238F88827E75E2F51339FAD5776CBFBFCFA5B299B012DCADFEB8FE99007
+AC7E0C796555994EA20B74A252291322ACF12EE7FE8A738607329268F441F869
+9608CCA03A3BB26BB18234A5285B5517039417C972EA0903D75CD251701B242F
+82E2205AFBF3D4BC3AAF7485AB65E5FEB2374FF8AACD9F9E421646BE14E2BC94
+C540E9287085A2AB71783B16A4DFA77B1E74ABF75AAAA0BF73C080BA84A84C9B
+C4093E2151EA61F538857EEF1DB2F599C06F191AD74C9BEBB1440692D6B4EC91
+B8324C688D606142E4B244E66A85437E20B97683C69DA60A916F0C6BB9167136
+A1638B15D4BC9AE7F57F252FCB0CB9E65724EA4468506521BD15E02CB2F4E5B6
+02F5521318234DF89B6FB3948163350E034A3CFA568DD26363EE3B3F55D24A4B
+D23C04CFE4EC3C5E8F62FB9F8B01DC905C2EBDD36FA9C48822F17C1071C0C7FC
+963342019ACE480DF8D7E491950CC7076CEEE71E5A9BA77C4347E35E54D6D7CD
+B0C0D4E78DA460FB06216530AA86C1A034689B87BEEA512B1FC55E137D23FE61
+B7D69D1EE4836317F350A08A6091BF4B9D6AC543B626847B574F60E61F9B5C26
+7A1DB15FA670091B9CF82B633EABD93E2DE097215FAF5D766B378FE86691BB12
+83618D234ECFE8B485CE205C8D8735EC6EC9E847FE8D54CEE9CBC3B88AF70F6D
+0A4289976428984A7DFACBD3FE28A8903CB42EB0ECB4F53201F904E211AB3D33
+62FEA9B831E269C4FC8B2C762304F33EEA48ACCD58D8B69468E67AB377C6BD16
+D11FEFCD7621B1E7E9D9AE9AA465942C8C19D915CFC941150298706EA336F898
+80CE4C5B805C3C54F112F7AA206FB9B9A623061C6A4784D911FB585269B20E63
+0978C45F9436FB436F629EAD2AB3BF6C3781D123D7B13FA066222C6333F3F59A
+B471CF2A7D3ABB64199B13F41E579130F7345021B84227ACE310658B076EA7A4
+A87509C43CF8698A87B0FF0AA4C418F45F2D92CFEA647A6508A8ED99A86D14E3
+7F10FD04479236E61A1F8F270BFD806FACBBDC9B156D594FEA136F2ED0C853EF
+819F0A9796DFC3E85E29F8B488B6F5A8EF8D69FEF91E13323FAE6EAAC2E706DA
+8555CEDD6B1BDFD5E9ADEEC72918FDDBC8621128B6FD5D6144F4E38ADD0EDC24
+0662FB553E583C4694CC3C440DF86ED83F3D39BB928CC90202CF18A994B50C1E
+2D1F62FDFF275A0A7A86DDD96474F7F7DD350006200F6C411D5AB3FEA20864A4
+90BF977C9C50690DB088FC074EC1152A769B76E0C0329C0FAB54D836A5923D3E
+6DA6278A1DBFD8BC7F2661AC6E39CB510EDF4CCABC332ED75D63D33C69225223
+7B500D16D93E9EC5E63A2E348BFB23374230C6A08BB4FB0CDEA7D44636102D47
+AB90B92EF9CBE42B793B74454BEB72102588169E618E6B2A23E5D984209F1234
+B69484C237E2D1E2E64C0D48329329AF97FF99307C50C7D8E3C246E698C6593F
+110D2B1C36425DF22F12BAF2EA2AB937056D3B806BA7F408F14F24D9F568F8AF
+8CFA76772D207D8683066FD5D51EDEB3149602DC8C8BF53AB40E03103A5A199C
+FC46CA3D96BE9DF24140E64E85C73135133A1C84C65793AEF98DA25996EA2237
+63B7102FEF09C25D849D7DAE91025A4C6D38DB10100DAEF25DF62093536D23CC
+3D95D3D147D7B7F1A1A055C6F365FF184DE2E1877358910BD08EADBB9EBE4B1F
+6A5931DAE2BB997196CD7EE878F929BB0ED1195074A23B3CA9BAF76DBFB5783D
+B3C0F6D60E34BE594B65D76B13FD7FA372D5CF659CB8BCC3A264110C2C6A3590
+9BA4D3B607DC6C0B52D99ECCF89764E3718CF5AAD7E22763615B2307DC67AF67
+232A23714071519EA6CAEF429F2A8C8B5CEE544EA7E773049D63C65BD60F8EA4
+F783BAA1C39C3DBC1C0D31756164B01C3061C549A475AF4E7F53DBD9B0D01AC8
+00091119DE5CA7DA8A6A6D87679CAE83B9AA2F46B49774F8273B5E98BD87426D
+2BDDD573535648C174EA2B71F11EE71DCB66501BB4E9E340BFB3CA7146076DD9
+E879857B6B39E7DC1FA69943D9D567ABBE7728EF822007395A5D78C698C7366C
+1C453FD7CC6E94C5230EEDFCC22B9C02C7B4DC651BC88CB2EE8097A410A2965E
+984E69BF65497EDD146516938637D1DDF0F7255E1242EA0CDCB1659C7C1D4462
+EE897EB2BBA0A8746AEF4B275D89AC35C5C0CAFF832B64AC2DDCAD7C4F17AA5F
+04F22C03D1492C3091905914B27B4FE5D1AB2DCE37925A2F20FCD23AB28D932E
+EFF25B5D70F45018920ED597C2668F1B02C9134BA366936CDFD7FCD625790626
+2C8A6F19CD328295CF922FF601D69125F828B4B2DB8F0E5CB31FD4278BEA11CC
+BD331D01F6A9C361CD5118B5DDB108EDF3AFDC577DF8F4B125C0BAC2EA874D55
+8B0F46BE41309ED965A99750A337D1FCB6E77FE5E754546F80AB2D4A6A6DA3E6
+70E6D13BC51C01FAFED3D47621376F2D4E5B392102C671FE3892C7AFAA422153
+9F3C13CB018543DD10A913779C7DACB01E8E1587D9C2843A426FD737145AAD59
+7845887AAFDB061C48AF125E5940927893B0966B57D782416D6696AC8645E10F
+DD80D52109B4D0063C8295771DFFCF89E918F1702F5867DF3636C4F5C223051A
+D457CD214D05982AE778AEA1330D4DDD264FD3CC4F0B8F4299DD65D7A610D793
+1FB4BAB8ED9D6F1DE7DABAF41491FA65C5A183BB8E20C9C72188A83CB6FCB808
+AC9E406B7A6D96510D772EB2BED726D5F12B4487AF4496F8C24DD5A6AD833A4B
+A6F96FE67FE603F3DE0BC537FEC194A1FFE1162F4B61C257CED6EAB227200220
+E95B195F50D653FC3FA379FB4FA0AD9F83269A99D5503669157A69ECFF4F8876
+134E5B5D5D1D811F297520B630C1F81D619BC67D712BF7CEC27CE0B7ED8D31A2
+9D7F2D8A6C5E3BADC0B6FA3628B1EB9EAA51B861EEC948584C8F3F9FD7BE2DB0
+24F9A283E12327A26FFA9F875020231A7DD8E2B830669F8630FB55709D85C29E
+7014A84F5926AC7AD368F48FAD6D6556644783FFE23953B99EBFA7AFFB09D5BD
+796ABA334160229587F4DC11F6EC986B036E3D06E4BEDEB3910CC58C443610F2
+9206047613EFC7DD4A8448B6413766DDE50E614E2022AFC909284A4D43B2A710
+8156D4D3249712471E85A059529C7D6101E2D5C83CA4AC3069202557823519C6
+22921A615C4F1256B77DD594B71FF1281B0D67D4D3CD375C79603EFA6E08301A
+90A2706528524A9FA3EF41B38E2DC4F1D8AE32B1AF84F6C666443D2E7102592E
+101CA38B5112E39CC5E243756B81C136DC8767B74025EF5FAF470A272F57F548
+D73FA114A849E99BE97280ED370D6909828DE61CA45D557F087B85E408493226
+6C621A42B8A3139CE953DFA96871DFE443579A012D18FD7A725B42CBFFA9B024
+C740B0ACCD0067AE6499663C88B604B2A8F947700A630BFD6A51E3BA22FC8326
+02DC5027B4CDA589D4204A5A5E0722F328E50B89E6C76EA6E4A377AEF9264FA0
+3610C2764987AB638505738399691E13A39724DB49888E5D912DC57F96BE7A66
+97F6664AC6B6C1F5650255776305892A6E3CE1A9A347B174992DB8D542BEC631
+C8069D0DF3B6F3A21747724BD33EF52F6EB0456379A5018902545D6704FA852D
+8E3112888B1EEFA597E1623529F8734C0E096F1CF7FDB89D0ABDF10E46CF71C0
+5A7C911225D77F40262094D3FB3A9FE077F2E6D4384BE6BC394E71C5DB81E42C
+4C52519520CC06361F075BCCC0E4C90A598B0F9E10ABA225DFE775C4064934FB
+530B35AD9155EF03D074AB553BB8EA0A5CE7E682B6A859D852D22ADDC8B4AAE9
+F227E41BC8B8E3B1270C1BEB1C4042BBA0D34125774CAC72BC59648DA5099658
+3B43EBE59F7AA29B4339C799EA817DC570159B5621D374878E63B56C35023AFC
+EB539775182D5C958C053897ABA5BB7950FDC9E0867CF4C02FF879AA4FECB20D
+7C10A20D83A8223AB771CA61F867D73D257CCFAAEA1E34B8938673AA6D760A80
+C38EFAE41268C40BB07933495A954F676F7DFA49F81BA6B221FAB4FA66294EA2
+5AA159168EBB2C3776B64C0436F1F67FCEFC7B15787974F7593F2CC8CF006AEF
+8B1106D9E42E1BD62809B0C8A6C144DBAC1FC39DB9BAE78383486A34CEE3A0C0
+7BBF8FBE60B6F7491BCC79E2531E1715A18BF843AE09DF06EA99B3174459E7BF
+82AD59FD366E775F2BDFA9D987DE8A6A3C971A03327FEC53F1F43913282D7DD4
+778565A82A1D003242430EB6FF1DBE8C3D96F2BAFCE0A73639C772AB771A74EB
+93E3DAC78B1A952BCB3C63AECB598331F31E58AF3A560C46F0F9A0A0E9FA210E
+E258A6860492A232441928AFE6C02A531DB33EE368F0F8789AE88F81F85DBFA4
+4D2F9C0DE26C2417D362C41DD7F96DE814CFF0AD50200A157151F7625E63296E
+325E2C3344042E09112C7A95D887EEFCA9B9A6A03E80DEE3F0D51C50F7E90CD1
+2E44EDF8487C1626E9F42099F4D9EFFB1EA6FC5643B5EA52C15F5AEF6F3D61FE
+A77636909877E7CCAA97AD291A3032F4198B12D0D7A61B06D63389A665CC6C82
+9A4A06AE64852665BCA6B481C1830FFE95E9F6A8347B4F9354DC900685CE73A8
+D5738C2BC3A5CAA87A3BAD79429321A8F96E2E1F02AD70E2FDBEEE625BB25AC4
+115789C442E6BEFDADB6D2A741F03577E7AA7BB7E0B5B6601794E5B4C81CF3F7
+384A29702F0BA28FB2F1F6BB34DB61A325BE0A37CEE6CC1D4C8F3B8D3031204E
+510C0C9D7CDDEBEB00524F2A8AA21C85408FA4D85B5C060328723810DAD7CE08
+EB085D29AC7925CE02513B497B58746CDC1EC49ED6114400F4724ECFF05FE0BE
+D47B370A4643F4B76AB7BF41CDB0A2CFB2CFF7A3E022256BB39745B643CF704F
+17BDC1FA8D6B8D4FA4A4E2AB54280CD07742D72880716E925D1E0F1ABBDF7066
+30395891A22C5D5C1344B963C22330524564CF6C39C230A6A9FBF53589E001EF
+E2B853747CA6CF900D3224297F610CA618F916ED2887C57FDBAB63E602D113C8
+1A461ED958FCE2C6496EAB8EF09A09CC7FBBC0008CF2A70C000FC01D32C0F9D6
+62FC2E59673DEF563AECCABF724C09CEEB58C44A37DD52DD42EA7B5C52558761
+3D335148791C6FB0E33D901A80A18BB3DF60DF1D9C1F0526611190E892DDAC80
+10BE3AB1624D36C6C0F3EE53F3F6B2182D887C905C38154924F4739C650A8EF8
+D238C73BD6689A0657DE7F20C2A05133861783867EAA0867AD50B7ACCDDA8AFF
+B5FA35F3A681733DAE65FD33F5535C1235C62F5FA085FE263442FA852F66E1E2
+044AEE7A98C72AA0DF2D07B1BC8CABC9772F8502DD9589879DD872D4747775D5
+CDE9E55C8B4911B8C82EA079623BA19E2CD19ACC174A587D687E9F1425C9DA4B
+0B2A389C185F7FCB4561656CD37E950097AA2B3B5EA40431A79BB15A93FF08E3
+782FA0F6BF2D9554E7D9855E01803A2E4A4A44D467EB26AD61D0E3DBB92F8F73
+013AD9CCB7B29C953456EBCF09E56387D51EC7F689EA1119ED5923656F6B6529
+5F00A4A4F6B902A679D7CAAB514DDC66C6966D943FC4A489C3155C53626C0ED4
+A3681A84D170419B1D9D825F30DF959CEB4AA8FABA1AB7FCA5E3B9A0C63FADBA
+FA0F37397279F2A6314B2DBCC1F6C1B64632B2FDBEC9FE7C7B0BD419C0E6FA6A
+77AABA48CD601358BFC654F3C7516FBE690A678288FCA7D897D7E9C788459B39
+B30321C6ECAE276B63BD885E1CC36E692F4624D84D70949442CA8BB93B63EEB7
+7A5C28328970333D68C7090E454AF9E45392F1B4CA755474D97AC659ACB1B0C3
+D46B8C6B8C53ADF57D33E989C41FE327B928E4410E361E59D541ECE44496E5D0
+B74C3885F0A33C46EC274A77BC37F4CF7C183FA6844ADA69A86EEEAEEC81170F
+40C2ADF359D8B6002BA1B01A8F02C86D0299D8043C4F35B031A2488E7B130462
+CAC1C618EA8C7050D043B09368E43CEB4EB4ACAB454C6CB74F0E451C38BE3102
+83619DCD7B2DFDC9DCC814084EDBCA0DB7034C57DA2EB014C1532DE7B779D265
+3784BDF0B0CD29A39B4B06515964BBF8B495D29D7D5ED039B7AA0610FE700DE5
+8303F330D4174CFF671246AAF42E01E6C3B9A69746CD8E49514D2144DC84805F
+2CC6A06F395F24385312F08ED2A1FD0A5402021BC1CE44C52EB715CB13A293D6
+AB8B3A938D628CF0E8FE7DA6F737726336AFFA73F17C135472030108CD0DF3BE
+0F813F424364678789109A668E707C52E55E9B0ABA056F165FAF11A279BA06F8
+21D24EDF72ECD263C41A49FF5264C650C4EB8D3587528DFF595862B251C232AF
+7B4BB76EDC1CEF784F9E51820F0A0E80E0D1A01FE0D5A739D0D9BE2A07D15C2B
+58549F6B8E4A54ACC47A66CE4966A116F68304BC2EEA41651A4F0D768E70F1C0
+1E4A7AC43C783B6BFFC4E6E7D6E303529915D709497D1D53C0121C177CA7A3AB
+A468FA39B093E77D6F2A7D77A990393CA5CBCA996BE2E5186292AE65265E488E
+CF3EF7B3069EF25ECDCE357DC6CBCC1EE0B9D7226A0CF6FC0A11C83C4E7AE0B9
+95385A56B21FA5766AB617E37CBD332EB57640CA4878CF17E822E395763F474C
+E61D7F5B5320DB4E6C7F70B76CB486438D247D073D2CB071C8B15143C0A3A3C2
+1733B85D1285B001D05B7DC83D34152E7A950505550B8420A45DB0FDF9B94F0C
+0BD6441DAB9EA47FFE2D1A17D780BD338B7A205499FE433BF6795B119EC6803B
+D53A8882D82929177263931B1795019B108DE3495306C998EEB3A70D1E457571
+8CF2D0DAAB8488A7787CD10ABB9A367CBA8CED2BADB20B549F8310BF6E72FEAA
+21C559B945A22203FAF11FD52AC85B5F20BC36287AD77F1645EFCF7B2F0DF91B
+2EE14B1BC50CACC11363B9956CF14ED9447063229ACD93D2CF22ED6687A91676
+4EC5D7EF84C28DDEB5E13A0EEA14A3E49EE1B9FBA368B8858506DFE6D4234493
+111D20121EFF5D72A830B9E2ADD5E26339D2B5A426A1DF64E50C1BBA1841498B
+D5A56107790BE7B3C7F5589B6DE7BBE53504F2B08A80874CF0D889281F4761B0
+DCF6D0539AE22FD45086F515FDDA17F86B2C3CEF1E2915D5492161A8DCE38246
+532ACA149B0F4009A17BF57484A22EB2F9CF2B71058CCD97763B6A3F95EA4700
+66F36D9C2AF45A55EA03A132AAA54B5AC1B745CA3E8A11FAF96EB8FDB5F81E5D
+42A27D3BC70BB815896C3C727D60EE52D57B04264069FCE544AAD5E290723AA3
+5FBB650B123EF9125AC8AB538565E06699AE5D68759A52096B795842BD8D8CF4
+1DC6D30C3B8744042875AD434486947FD83FE1C097719A22BFF5D31C9C6C0FF5
+6F9B3DF1963730B8C7858A863A9AB484C68F7021E9A1E1CC9750DBB35D327CB0
+63615D5CAB61566957AE18AE6ED6C800EC832708EA1B3EC877FAEF37091968B9
+DCDF924979BEE3F3B54090554D08F54200A21BEAEE003B83CC929683EA64F833
+C552C5B0B6B2F652D5909461F774D36EF277706253A3B785A51BA3F73CDCAD65
+BE718C0072A840C5D661E36F3E27FF79F6F5EE718D4A499D90EDC8267492DFC1
+6203B423D096EE2A4B193612337A6D180D9FA91E94F85985CE8137E42846577F
+66B459169FE19DCF73C5380BDDFB85442351D5CBAD32CCCAF251A9F2C4CF3C02
+2BC1A446906276AD0A5D2E23697DC5DFF896EC8C1916D52E30118488C7F45F09
+194096200A65571E7C455D56202342024389C7F3A03283BE32C9F7785F8E9842
+20443B845D291928AC72D636AE969256DC91944150153C99FBFF33F784442D49
+5C241BF0CB3F2CD4CFA7805F434DFBD7B1180FACA51328C628017AC93638DEA1
+21647C09131AF640463D49DBB6803FD753A9E426992ED6BC8BEFEEAD4B80FC2D
+950DB053BB719CE9B2D2F75106CCA90E75B241810A1BF88AD26FB7EE9A331172
+C242FCC8E3D582A3A1FF6EB2DC3B235BB50BFB85FF25992C81E31E226BD21A3D
+8DDBAA07A27A116C80E837DC740E86068952F0A57A5A2C46280FDDDFC1EE8102
+8E13027F26BABF3AE38AF75E668A3218998113988006CA5FD98D09AC897D19DF
+725A4416514A13C7441651605B9CA5DB8F1C9212688E3204F6E065F3449D4A7F
+C310108DC95F8A624BC961432A8722EFD97218971819C58624089FE39F416FB3
+FC681EB9D735E487C20BB53D87CEF1C564E90FEA605DC6AEC57939BEC2CF893B
+0D3DA4B73D66460D19A6BC8AF994F11D16B0AA8636673A031C4EB0CBCA8FE2C5
+FA3DA9FACC64D0405ADA3E1BF030E67C7B8BCD803B4C9ED2CA50CD3A3FFC0B77
+BB85D026CE39C8A5D9B970AC4A2E427253956B85189D60E0AFA1B871E3F89A7E
+6D828400DB7B47D23006C01F9FA087F96A56472D20E36B733F75CF9D508F9312
+5DBCC3489C04F227D170EA0C1E8E021294FBF57A8B95DA6F09568FD192E61959
+1F4674B74BF4CA9EE4027FB2EB67845910BBCEB2A446111B25F62DC4A7E06974
+D78AB9A9E70887177E32CF45F52768B6086C41EBDD68793AFE11526767E2C752
+79BCFBAC46D8224E8952DF582AFE472415598E1470196F65230F7B80B54EBAE4
+8E2636D375E1C76993260A62D4613D6131B075F03A20EFFFEE9D2EC17787C412
+E7273D2D2B39BB55D84E02F4D2E85E087F117A6F028D2F2BB95F7428AAB77EBC
+61E052C1A14548B4769A0AED35C6A162A2F8042E0762A9360B261E0B04884EB5
+5F2EA19B8C272B6A0DD805B9332C6A5252A2C113C8D2D5BC6FD512165E6A771F
+180872D18B0C8D9EB605E0167D24052ADA3213CA5EBCA0F8DB437B044F7793E5
+227B06A188677603D1102A8A685ADFDBC16D110FDBDB306D7C787BDFC298BE54
+64E1FDE8190F92D3E68257076676FBC638F830426328CF13180FCF1525D44EC1
+73C7282DBC800772F15E98CBAF92057BC238246D6E913A7D988627BF757E7E3A
+E3BF9D3AA5AD4F5C80A022B82697B96B8E4D4D6DE09E0ACD2F00DDE25D97C704
+AF29B499BC8A5A10BA8FA1D34686001ADF08CCB34048963523892CF3C8706F2B
+45C0D0E17A30A5F04527192730F09ECB07AFDE14287A32E1F9046A37CDCD8388
+542A2B137E896DDFEC3016130BE8F3E7C2E2C0DD526775B3F19351B2B7870AE7
+F5774ED4172CFC330E0BDE8871C5F2A5806161D31FB9F7B11D1F3A161B31F707
+2115A793E9B530D6C6977137319321BFDB6A526B7AEA07EB64855B7CE6665D8C
+4432AFFCBF37F6900013D0DD0D4B50C2010D519DA028D46BD8A6C8689151A105
+3F96BD81D88AF20514F88E8FD48F0B675F296A83AC1938FCE2DF9F4A072D2AD2
+B24A76AB48A5F30BA8F41A4BC3C8794BDF5AB41E02A128DCC9D51903ED585E15
+81310C8DB07D3494342BEDD3B24A29EE505F477B50A2864C72187FB7CD5893A3
+4B24F711FF571E75403D111C5EFE83AB5351D182DE4A22CC6D41C71E83A013BC
+707547BA0EDF9A1826A13BCD7AA88C4440621D15736E9DFA4315D50D8B93136E
+19807F8AFB0BBDB5417E6D852FF038407BC405811F4814A15B11DC762246E3E7
+3952EF80E39E1059BA3B8F6C2B2875ECFF84EA5FB1D26743416B6D20BA817AB4
+9D1A8CEB59E5E1B9022D2E4700F5F4896B8AFA47B40437DE05FA5E093727714B
+F6D938131BFD0940A7628C8CFC1BBB129973FE3E492016FA5C52E9920B3939DD
+7709707FDF9939279A093CEA32F30D8B9715C091CAF8D0B985B3CEC1455E18A3
+501C33AF14F3D1F63AD8688325E8C9F025DB20C9F233D885BD42C04DC9300D4C
+FA004F89A10237375DB5675E54C76D7531F8D41028432E91C7ADB3A718FF0DA8
+87E39D1FFCBA9B1336D70BC262D165E99EC7DB780BA17A05A01B74BF8D0AA0BA
+DF717AD3D206B08DBD3EAAFCEDC3F42F4101AC88024884C018C7D0DF61BF5571
+6CDDE73E441BAC714E8769A512D05CF9D7D566A0E53CB5B3540FE72436B7BDC9
+E33F6D4B2E9C167AD8933A934AC1172ED7DF4001ABAF75230B6DFDB2309D0B97
+EEFAC28BAC01932FF6D3254526D953F27586F8CD105752BB4DAD4B0FF3779D39
+D39D12059B64E8C6097B5464FE27680D2ACC6987BE974B04232D56DDA60AD254
+9E4E3B146AE55A893A5F9B7B3709B544C8412F8BF642048220227B34D001A98B
+961862B5BA481DA1E4DB4B8B2EB0731E4E3F32A4B1E22FEFF347BD3FDAC64590
+A3E6AA5EACD8729C829BA0F99C9D401B825ACF0CFFA9A4A2416E28BF2EFCBBD3
+0636E1F31B355F9617AFD58A54622E52AFE7CEA158E99E37E4773B561C5CD2EE
+10814CC2C3E2906A59CD4D305F731ECDEBA2A8C7B93F359219DBEC2EFE13B1C5
+E2DE5B1C88FADF22976279F1B8285F5EEBD77006279C91938C746FFB2F9BB185
+9B9E19B54C00F58AEEBABF3DD73B968D7E025311BEA11FD3D09B4505A9EDCA73
+207EB3018D5C09EA88CA0873AE690E94D43B323B53340EBAAB090E28DB9EEFF9
+B99D887C2344393FA89D67F327D58731A241E11468BBA16BA3494A4E80FF1202
+C8ADC435799D547BD2B0D0179A96E8C1BBEBFBE83CDE780028E65449802E6C1E
+310E78A4D28ADDB131FA22535ED930E9021BEA3D463E8FA8B45EA921B9FED123
+083A9D65A4691664E373B5C24B3EB36CB7D5F86AB267E5014A98E1DEA814D34A
+D1C22BF3D7E222146343ADA948C30BE1D0DD6BE2E1A4D52E20ADB9D647DE6009
+28D0523DF3B1D9C5D34017A12D8C3F1DFD0B90AD438A22F578C292260822E618
+B71F2FD585B9685A7A51091536FFA80EA70CFDA85B3EFC1C18FD44FF2BC993B8
+8B9FDA9A8CFB92D04ABDE47EFEC71E4973F629B392CE3475109E2605C0463CE5
+C32B054A731210DF35A32EB4B613956536D8539B88596E341CB47F5382316B75
+38794D9D414DB3BD99FE9772B67F797F9EB5B41391DA87E6AD902DC406EC381B
+2E9CEFC29A1772EDCACBCE337B4DCD113B4648D024B94EB181D2943267C158AC
+94F834EB78FBA80798F01BC2AF85CBA7D0FCFEE888CC7FFDEFCBD57372571767
+CBC51CC2CF1FB9573924D8613BE48CC4826515D027505FDE4F12067CA525859B
+73E6FD4FDC8F586559540547A004949564F64A1A197E2A9809F715609F5F30FE
+E57E8A403C373E5CDD5962599AE3BA0D086EE6BE16833091C9C061F2F9BAAF63
+6F17EB88960EA70F1F0F037DDC9682E486CAB5C7D0D9AF69A89FE5F8EE5CCB4A
+2E547457B5E91D7D802FB65F4066B638056F697BA89C4DBFF9B1768E5CB12B87
+89A8A267C1EEA6D458112EF1FA8508EE0EAC77FA44C3B89C7255A4F118846B75
+70803990AA19F568DEA6D43A6C9B262C5BAF4AD6E854F5D7A6DB6F94CF9340C5
+0778EDDB5E0A218C79625498AFDDA45201F039E9AA44ECB7649E3347035449BC
+D936328FEDB5C069E86BD275BF88D7E1F8FF373ED07D33E42FF9C37B29DE4002
+8C70E43447EFC2E50AD5550235270EA6787A4D6489797FB00B7026D3CAE5BCD3
+97BA1FDCA43DFE85D83BF9EE5CDA220987161A2E2BE7F4212FB8E2A9BA738766
+4872B574E18981FD2B469D303AD1CEB6594C64FFBBB3F50187B1C11A39A5F66D
+239B14CD8EE411C90A03F80E4BC988F98528CE2BF580724B588C348665435FEC
+6478D9926ACD273FE63A16FE984DD5FFF5F83DD310DC7E55D254FC01407126D3
+973FE22CD3AC4F6FBB0AD7B9689FE02665CFCF412B99167152D35BC0E671E657
+EDD871DCE85CD2460FC8F8BA2C70E744D0C9ECB5CDFA5812B81AFFFDD9DC994C
+11AC11F9038B2B1B5F0771332BF0149E7CF1D47DE4897284B2FFF95A8A508A19
+C3281F49B3A3A92853AE7AD9F459C54082DD302A15ACF17034C74DEA93A04EA9
+0994D3233D447E8F87527C35F3CDE94D945A7D93099D13B81C3904DF76D09C57
+5A27CD28508B545B6B27BA9173B2B324C4A9667F5692B30D09EFB60C1AA5E9D5
+278ACEC4A55F1A082D537B3C1EE890A6FD2ECACE1D265178E45959BD7D3CCA69
+C4BCE2D5E9EC06945AB88A39199BFCD1C4FF3CE4851D494EF97D357057B13BE8
+E8021D3FB5D5882F227F5EFEADD582C932F59D55E90B924C01FD5FE881F99944
+98B9CA251192A91D5EE10D322FDF1A494A3F81C9D5B5AE42F44FB0118252A235
+42904AEF8A29BA9972B1C7AA6BA53BA32A081D3006CF35BE5F1041B0EE4D1E1A
+FB6B6FA6EFF9D626D24C4FCC956B268B30DF26FC381D8D871D0D96566F0E4910
+D17120CEC875CD212E6BC289D87F1E08E6EA810D7009159F1FAF384957485E52
+C2815090CA3B1221A12F749E5C41948A9F0B6D3A86FB04163ED36491F24D7C3D
+634B25C2C8D2C8569E58941EC067EC4C03A2F8D4D19690C2AFC60980B26361D3
+5B0C05E68E1C0C20518533DA77B3495C336CD67106B1EB2CCE2D70A82A8366D5
+3A10FA663E1F74935FF1A2BA3EAB6FB86ACAD4DBE2B70E8198A1BC0A952F694D
+D22AE64DB1186C10A7C760D3569E5EDD235ABF2CA82D0890A369061A83A29725
+5CDA995A30B8144AC2CC69BE5F80E23A8F5206C817E75FD12153EF75A00DC208
+92AAEDEDF87704921CCFA16F0DCD60F522EE900DAA6529AEF512224950615DA2
+039D4EB3B18C87BC21D806D278CFAB6B8AC894D3DE5A07441A79952846B0AD9E
+0F8899CCF1CB0F26A82703271ECB04CC388498F04F23F8B3C50117C0EA512125
+DC02C19B85C24B38B1B40D53EBC0422556E76F11E21940DED1DD6815946798BA
+5647052C155CCE495AE3EC6EE9C4FADAA72FC2C4A95C05EDBCF7593927317440
+E34D425850AF9EFFB5200DCFCEA613CC3A7A4F85B11AC1806B4526F23484D8B7
+2BB65CDD626E7FFD23BC99D34FCB2E6586DE317EE3BC34234AEDFA4C83BB0BCB
+DA4B8FD30EBFD8E947926A7AD4A39C3E396A1C89BC2DB1381ADB11431C97A8DB
+C052426E3C954762E35A9BD114ECEAE9E2018FFE5B97E3F9B57EC47115943BB7
+AF6043F860D5D548B166C25921D8DDAD33982E864586C8FDAD35CA3EA60BE1E2
+8418837CFC7209F4A0569D19475976933B742305066D1656493996A2A629087A
+5949E34D4359CD47A000608F799114BE5D36359D0D3FB0ED01DFD581E9F3F68D
+C6F44D503C233895B9C85B82E6828392F3978EFB0530AA2239903E4B3F8196C3
+AD3F91E6B9AFFA3E9950914CB0781D5442DC61E235A209A4B764F63C7588955B
+F73F38B67E1FDD63579EE3AA49872D498A17C7ECFFAF85013B5C541204F79824
+5660D440E80394960014969BD78FD57BCFE092F16FC59B70F1C3D4DE36946FBF
+C4D184CB3471F958F98B5D411933162DDE8472D73AE198962F216A97E1BB4621
+8720C44A3F16BE706170B67822A5FF7C730360CF6EB23BC007F53624B87091C0
+DDC1AC4A2265D10F6A7CEC42FC81D1F4CF2BD3DB3168F736647968BDA608B66B
+AE07DEC4257E78246187838F532359D6FBC18512610FC852B07E15D4B6893042
+6F3112E17476602F3D7B5AA66AC712573010697ED8B89EFFEF7EF9EF46CD604D
+79D4F83161C24A1CA0B8EA185C378E7C7961340E398551177A7D13B2A9214E43
+CA381CD2DE3DB70458D95772040A5D25C06408446C9C266DB1BFB84FA980E06F
+E4DB4778ED1E2057402F90782F4B7219F31E5A942286CB11A0D89420D72ECB55
+F9274DA1D76EB088B8E6123958523931DB4FAA798AE995CEA8507680ACA37850
+B30D1BBCDD128AC48359893727FCF9433139132A62240BB9C4839AE787FD2548
+7D6E7275F2D61C1D0A16CA68A4AF96E6F89370958884EE230983271ACEDE0DFD
+0A5AE49C1E9B1A8D95ACDFD83095F12A656C1E182D115BB3ADC01428F7B73929
+7CC4B6A305EA2B3A50C3275885620061EB2DF4472122948167369B0ECDC43A4C
+530DB3EA06EF9672983138D713933F67624B5469A467ED1223C8CF29FD813EDD
+931A53CB338FE4ED8B20CD1D15987A7716BBFC20EB3DB805CAC99BDB86F253D0
+260C1157555524CED262025524283F4864FC0D42139B37EB84B0D6297FA506FD
+D296949F8FE9C26D822F0515BF6AE3921693A7B12C5083F0C991CCB5EED23085
+111B4757BF7017016826D699540EDCF90853ACE507C388CAA1BF17BBFA4E9D98
+849E6AB20FAEFA93C3F0A0CE906A8D14156A2604D976052BCAD16FD258A3016B
+F248D1BA01D0E1E9DACA45F94EFC91D568C63F0DF55132EF7CD9A8D1BE060CB3
+43627CC5EA64D47B8012CEE096018F0F45B5B14743D409366D9B06578A1C23B4
+8A90E45E5BBF004B19B3310F6288DCD79C864499251C58ED888B9CB2CA9BC97C
+804325EC599D755882E751A70A0EAE6413953A7B17D211E29E3F949F0338DB92
+FCC991DFF7A88316E5FE553BAE20B09A6F8AE40BE89370893222868F3FFB11A8
+2E401A42DF13634343E4A666C7A27E6ABF8BD9B53E7CE250174A661C774B556C
+7F853DF36DA9DE6913151A57D02371497BA21EA208A185D6B82C973F1935A458
+8B34522F89E6B7EACEC2DA13A8D0B66AA0C3A6F585A1C44A2A00554667CFAFF8
+A417D246F28CEE9056594C5B6F39E58816C7A84839C069CFBB069C10AF003760
+BCE91CFC17FF79588A0DBE8669A47636E612EC6678528E56DDC31E3C30CC36F3
+BD12FDBD8233796A985C09A5E2E90A5D8304CE37D3D708FB4C197F972E2941C9
+90E9B3AA469E3B149F0E450313D8BEE3496EA31276759299B1095A1B6EF1661A
+4DA77B723EEEAE8EF961E3CDB4A8BBDFCC29F4A3B54C712E006E1D6BD9936689
+99C3AE0E45D2C688956D013FB0402EF25AAD74978C52E040ADF1D0B06BA5E122
+6A5E029527C3FAAA34FB1CE195856BCBEBF18DFA6C417149ED9AD951A3927846
+EC08782BE06F828EC06691564896ADBD78625001BED0F468B73136F9AF343903
+99CB01AE02D9F65CCD02F475EC35EFA28DE86728F795325D9888D8096ED5DBF2
+9A8D720D4C03973D6A85A31C7A02F478B38C81212374608C1E14C26C7B8E3519
+77F20C49E981C6F195F1504AB7976BDB0BA9541C902BB62B941674DD58814B73
+9CC6A246711262D0BBC0108222DC42AA85CECC350612812534DF15EE532FAEB1
+64ECCC2D1D7CA87420015E3B5373A4DB75F295679E9A1CD97971FCC7D20A16D8
+3542482971C6209DF01498D6ED3FA6D41F1121F9CCD3E6FB4365972F12C46190
+4C87B315A7A14B849FEADF8A4521F41626A60F3EE25E
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+%%BeginFont: LMMono10-Regular
+%!PS-AdobeFont-1.0: LMMono10-Regular 1.106
+%%CreationDate: 22nd January 2008
+% Generated by MetaType1 (a MetaPost-based engine)
+% Copyright 2003--2008 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).
+% Supported by CSTUG, DANTE eV, GUST, GUTenberg, NTG, and TUG.
+% METATYPE1/Type 1 version by B. Jackowski & J. M. Nowacki
+% from GUST (http://www.gust.org.pl).
+% This work is released under the GUST Font License.
+% For the most recent version of this license see
+% This work has the LPPL maintenance status `maintained'.
+% The Current Maintainer of this work is Bogus\l{}aw Jackowski and Janusz M. Nowacki.
+% This work consists of the files listed in the MANIFEST-Latin-Modern.txt file.
+% ADL: 778 222 0
+%%EndComments
+FontDirectory/LMMono10-Regular known{/LMMono10-Regular findfont dup/UniqueID known{dup
+/UniqueID get 0 eq exch/FontType get 1 eq and}{pop false}ifelse
+{save true}{false}ifelse}{false}ifelse
+17 dict begin
+/FontInfo 9 dict dup begin
+/version(1.106)readonly def
+/Notice(Copyright 2003--2008 by B. Jackowski and J.M. Nowacki (on behalf of TeX USERS GROUPS).)readonly def
+/FullName(LMMono10-Regular)readonly def
+/FamilyName(LMMono10)readonly def
+/Weight(Normal)readonly def
+/isFixedPitch true def
+/ItalicAngle 0 def
+/UnderlinePosition -167 def
+/UnderlineThickness 69 def
+end readonly def
+/FontName /LMMono10-Regular def
+/Encoding 256 array
+0 1 255 {1 index exch /.notdef put} for
+dup 0 /.notdef put
+readonly def
+/PaintType 0 def
+/FontType 1 def
+/StrokeWidth 0 def
+/FontMatrix[0.001 0 0 0.001 0 0]readonly def
+%/UniqueID 0 def
+/FontBBox{-451 -316 731 1016}readonly def
+currentdict end
+currentfile eexec
+D9D66F633B846A97B686A97E45A3D0AA0525392EECAC163E584A9104D99AD0BC
+1B1844A0E222653FA481B8809B26A46F4C483A5D7E95816EA6582584156CFEDE
+B994ADCFF4645140E3617E4D7E1B0E4541CB9F562E55829B4DD880AABE2229E9
+4A9FA259A734D29BBA91BA1E2055CBEA4339BCBFF98D32CEFF11F296225CAABA
+DCA10577A5D431B714726C1278D8101ABD1BD8D0BD0174FFF9148F8C61C241D9
+2AD360A28616CB4A0670C1BF105A2B97A25458EAC07B98B8F1ABC91ED489DF5A
+340A9C333CA5AF409E52EE1BA5629A1DA85B8B9EA3150173A28A696C6B98D060
+4CD8AE5F032FC97BAA1F5394B526DA51B5521D60F8531E0E5A437F5E00E9B683
+3F08ED5C6A216D2CA9C1806AEA6B335CD03C87CB35115D28AF52BF955F7F349A
+C9C2519FBF9D866A7CC0AB363443FFA4831A9FAF41181CC67437D2315BA0438C
+2D2387CED780B0C89728BF50FCD44E9E83FAB34746B8A417D64F6A3378ABB41E
+655FEC203D698B28ADFE7F4E92DBA914A99EC52429572D9ED80EB023C537E01E
+9E4A40D09D9417817392A223A65B72414BF703DACFE722CFDABF22F430B889F4
+78F10384B1AA42BC0699162947733AA28CFE1C6F895AF011BE4D69462DA368DD
+E0053158F0014ABEE1F0DA8BF9BA079506AE79E051EBCCB7BBB8D2C132161CB6
+19B35E1E9FECC094D9A6076CFA54929EFF586B52FE4402D2EC025D6DCD58A336
+F4A5B4D49BBF0C3E6110D43D55077CE8A1EBCC74391EEFE1913FA20F2AE348EB
+843E78C800542E95512021F184447244F446ED8EFFA98C77513FAB5FA2F59FD3
+532B4D697D9EE88DB732E3D285343D16BD71155A92ACF29FA2A980D26E9D9524
+466FCFBB1D451F9AA392333A6E7894401FFD1ABB307EB3B2C5B3A961D2EDC875
+BF0BA966C0C9C212D108BA78ED297AE4D564EC84C58B4FED6ED0E184B0671E00
+7A6D4F4CEE644E0EDA1A0C34536133ACDAF5072A8B95B71881E6D93FD686DFB9
+FD246BF331BAC2ACDB8234E068B12CEC255B4655A9F16A0EB4D085C0315E98B7
+C3CC3918C819415305FFAD3576154406C6A4EE753D9AF484110B36E71B639738
+157FEA63660CCD40DE243E5B4A2CAA150F2956E15AA3C01AB47DE8B9908BCD8A
+425798CCB9717332C22357C0D62F9B2EB84DE06F84221B1FDCC1E198146D83BF
+4F3B499DD83177D1E35A9779CD5BB3FEE084E9C930439360DAC904379DAEF266
+E8EC1CD2F174945C87770CD195208EA56CC1E588221139EA424EDD2441CCA7AC
+9BC05C7A851862E20031E2FB675DFC7BE3CC51FE58FC26FAB5DBB7AB222BCA35
+1A5EC765F601CAE8C1A63B99930B70AF8F83ADEE6CAD7951FBF3D7B2F18A5483
+9BF443E9FF5A66AED00F22804A5B31B13418130BA661F22AFB5B8B42C09FC53F
+4725299207CC83212A4DDCBE0C2A201B9CB49EA61EDD405047825AA849C47F9E
+7C396C0FBA34E1611C40142A3D0ADF020BC4EF5A0641324A603608EA9CED3CC4
+A8D4AC4B1394A19FCD8E550632C6B917D1C2BC8E88733F061220110198F87E3E
+DC35597142F07C21A0E5EEC94A34801B354952F73CB1304CB721184B7D1D9B3D
+2BAF8C379476FC910BD87BD590E136AC565250067880F5E7ECD0F788DB3C7D74
+E8725B11CF3178D43FB7678053EBA645D18D5D8C0840BD4E0707DD7912E77E70
+546C07CD45B42A0839B340CCEC22569071FCC788DFA28F3C30B2F6541C9D7A64
+21F96B87E4DD451BE0A249260F17FACCAF4BAC67E3B5488D734F7A11336B032D
+4C08B0D2F26D9A9645F2
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+{restore}if
+%%EndFont
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start /Fa 177[26 3[26 8[26 65[{ enclmec ReEncodeFont }3
+49.8132 /LMMono8-Regular rf /Fb 206[44 49[{ enclmec ReEncodeFont }1
+83.022 /LMMono10-Regular rf end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 155 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 155 a
+0 155 142 156 v 142 155 a
+ currentpoint grestore moveto
+ 142 155 a 51 67 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 6.09454 8.12607 -6.09454
+8.12607 -6.09454 -8.12607 /Lineto /lineto load def false 1 setlinejoin
+ NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5
+2. CLW mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch
+def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan
+def ArrowA x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength
+mul add /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.2 SLW 0 0
+0 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0.502 0.502 0.502 setrgbcolor /ArrowA
+{ moveto } def /ArrowB { } def /ArrowInside { } def [ 6.3822 7.8384
+-5.80688 7.8384 -5.80688 -8.41373 /Lineto /lineto load def false
+1 setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length
+0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength
+exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1
+sub Atan def ArrowA x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength
+mul add /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.1 SLW 0.502
+0.502 0.502 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke
+ grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0.502 0.502 0.502 setrgbcolor /ArrowA
+{ moveto } def /ArrowB { } def /ArrowInside { } def [ 6.669 7.55159
+-5.52008 7.55159 -5.52008 -8.70053 /Lineto /lineto load def false
+1 setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length
+0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength
+exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1
+sub Atan def ArrowA x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength
+mul add /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.1 SLW 0.502
+0.502 0.502 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke
+ grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0.502 0.502 0.502 setrgbcolor /ArrowA
+{ moveto } def /ArrowB { } def /ArrowInside { } def [ 6.95668 7.26393
+-5.2324 7.26393 -5.2324 -8.98819 /Lineto /lineto load def false 1
+ setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length
+0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength
+exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1
+sub Atan def ArrowA x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength
+mul add /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.1 SLW 0.502
+0.502 0.502 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke
+ grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0.502 0.502 0.502 setrgbcolor /ArrowA
+{ moveto } def /ArrowB { } def /ArrowInside { } def [ 7.24359 6.977
+-4.9455 6.977 -4.9455 -9.27512 /Lineto /lineto load def false 1
+setlinejoin NArray n 0 eq not { n 1 eq { 0 0 /n 2 def } if () length
+0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength
+exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1
+sub Atan def ArrowA x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength
+mul add /n n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1
+0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length
+x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.1 SLW 0.502
+0.502 0.502 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke
+ grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor [ -4.65782 6.68935
+7.53127 6.68935 7.53127 -9.56277 -4.65782 -9.56277 /Lineto /lineto
+load def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3
+lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll
+/y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1
+add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha
+ fill grestore gsave 0.2 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 1 setlinecap stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.2 SLW 0 0 0 setrgbcolor 0.2 SLW 0 0
+0 setrgbcolor /ArrowA { /lineto load stopped { moveto } if } def
+/ArrowB { } def /ArrowInside { } def [ -1.21886 -7.3134 -3.06029 -6.31638
+-3.81516 4.20773 -4.65782 6.68935 /currentpoint load stopped pop false
+/dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def BezierNArray
+n 1 eq { pop pop }{ 2 copy /y0 ED /x0 ED ArrowA n 4 sub 3 idiv { 6
+2 roll 4 2 roll curveto } repeat 6 2 roll 4 2 roll ArrowB /y3 ED /x3
+ED /y2 ED /x2 ED /y1 ED /x1 ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub
+3 mul def /bx x2 x1 sub 3 mul cx sub def /by y2 y1 sub 3 mul cy sub
+def /ax x3 x0 sub cx sub bx sub def /ay y3 y0 sub cy sub by sub def
+/getValues { ax t0 3 exp mul bx t0 t0 mul mul add cx t0 mul add x0
+add ay t0 3 exp mul by t0 t0 mul mul add cy t0 mul add y0 add ax t
+3 exp mul bx t t mul mul add cx t mul add x0 add ay t 3 exp mul by
+t t mul mul add cy t mul add y0 add } def /getdL { getValues 3 -1 roll
+sub 3 1 roll sub Pyth } def /CurveLength { /u 0 def /du 0.01 def 0
+100 { /t0 u def /u u du add def /t u def getdL add } repeat } def /GetArrowPos
+{ /ende 0.5 1 gt {ArrowPos} {ArrowPos CurveLength mul} ifelse def
+/u 0 def /du 0.01 def /sum 0 def { /t0 u def /u u du add def /t u def
+/sum getdL sum add def sum ende gt {exit} if } loop u } def /ArrowPos
+0. def /loopNo 0.5 1 gt {CurveLength 0.5 div cvi }{ 1. } ifelse
+def loopNo cvi { /ArrowPos ArrowPos dArrowPos add def /t GetArrowPos
+def /t0 t 0.95 mul def getValues ArrowInside pop pop pop pop } repeat
+x1 y1 x2 y2 x3 y3 curveto } ifelse 0.2 SLW 0 0 0 setrgbcolor /ArrowA
+{ /lineto load stopped { moveto } if } def /ArrowB { } def /ArrowInside
+{ } def [ 10.97023 -7.3134 /currentpoint load stopped pop /Lineto
+/lineto load def false 1 setlinejoin NArray n 0 eq not { n 1 eq {
+0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul
+exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2
+ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength
+mul add y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1
+sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2 y1 sub Pyth def
+/dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add def ArrowPos
+Length gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos
+mul add ArrowInside pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub
+ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto
+} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4
+2 roll ArrowB L pop pop } if 0.2 SLW 0 0 0 setrgbcolor /ArrowA
+{ /lineto load stopped { moveto } if } def /ArrowB { } def /ArrowInside
+{ } def [ 7.53127 6.68935 8.37393 4.20773 9.1288 -6.31638 /currentpoint
+load stopped pop false /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5
+} ifelse def BezierNArray n 1 eq { pop pop }{ 2 copy /y0 ED /x0 ED
+ArrowA n 4 sub 3 idiv { 6 2 roll 4 2 roll curveto } repeat 6 2 roll
+4 2 roll ArrowB /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /cx x1 x0
+sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3 mul cx sub def
+/by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx sub def /ay
+y3 y0 sub cy sub by sub def /getValues { ax t0 3 exp mul bx t0 t0 mul
+mul add cx t0 mul add x0 add ay t0 3 exp mul by t0 t0 mul mul add cy
+t0 mul add y0 add ax t 3 exp mul bx t t mul mul add cx t mul add x0
+add ay t 3 exp mul by t t mul mul add cy t mul add y0 add } def /getdL
+{ getValues 3 -1 roll sub 3 1 roll sub Pyth } def /CurveLength { /u
+0 def /du 0.01 def 0 100 { /t0 u def /u u du add def /t u def getdL
+add } repeat } def /GetArrowPos { /ende 0.5 1 gt {ArrowPos} {ArrowPos
+CurveLength mul} ifelse def /u 0 def /du 0.01 def /sum 0 def { /t0
+u def /u u du add def /t u def /sum getdL sum add def sum ende gt {exit}
+if } loop u } def /ArrowPos 0. def /loopNo 0.5 1 gt {CurveLength
+0.5 div cvi }{ 1. } ifelse def loopNo cvi { /ArrowPos ArrowPos dArrowPos
+add def /t GetArrowPos def /t0 t 0.95 mul def getValues ArrowInside
+pop pop pop pop } repeat x1 y1 x2 y2 x3 y3 curveto } ifelse gsave
+1 1 1 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.2 SLW
+0 0 0 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -4.65782 -9.56277 -6.09454
+-8.12607 /Lineto /lineto load def false 1 setlinejoin NArray n
+0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW
+mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.2 SLW 0 0
+0 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -4.65782 6.68935 -6.09454
+8.12607 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.2 SLW 0 0
+0 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 7.53127 6.68935 6.09454
+8.12607 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.2 SLW 0 0
+0 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 10.97023 -7.3134 -1.21886
+-7.3134 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 1 1
+setrgbcolor 1. .setopacityalpha fill grestore gsave 0.2 SLW 0 0
+0 setrgbcolor 1. .setopacityalpha 1 setlinecap stroke grestore
+end
+
+@endspecial
+51 67 a
+ tx@Dict begin { 2.24924 -0.62405 } PutCoor PutBegin end
+ 51 67 a -22 w Fb(1)51 67 y
+ tx@Dict begin PutEnd end
+ 51 67 a 51 67 a
+ tx@Dict begin { 3.6567 -6.50087 } PutCoor PutBegin end
+ 51
+67 a -40 w Fa(JAN)51 67 y
+ tx@Dict begin PutEnd end
+ 51 67 a eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bccalendrier.pdf b/Master/texmf-dist/doc/latex/bclogo/bccalendrier.pdf
new file mode 100644
index 00000000000..97bbd7d866e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bccalendrier.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bccube.eps b/Master/texmf-dist/doc/latex/bclogo/bccube.eps
new file mode 100644
index 00000000000..84c5f0293dd
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bccube.eps
@@ -0,0 +1,175 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 18
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%Cube (Utilisateur)
+1 setlinecap
+1 setlinejoin
+0.3098 0.0275 0.0863 rgb
+0.1 setlinewidth
+0.3485 4.4288 m 11.9545 5.6804 l 16.4446 2.4453 l 4.8386 1.1937 l closepath
+gs 0.3098 0.0275 0.0863 rgb fill gr s
+0.3686 0.0353 0.102 rgb
+11.9545 5.6804 m 11.9545 17.6314 l 16.4446 14.3964 l 16.4446 2.4453 l closepath
+gs 0.3686 0.0353 0.102 rgb fill gr s
+0.7882 0.0706 0.2157 rgb
+0.3485 4.4288 m 0.3485 16.3799 l 11.9545 17.6314 l 11.9545 5.6804 l closepath
+gs 0.7882 0.0706 0.2157 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+11.9545 5.6804 m 16.4446 2.4453 l
+s
+11.9545 5.6804 m 11.9545 17.6314 l
+s
+0.3485 4.4288 m 11.9545 5.6804 l
+s
+0.7882 0.0706 0.2157 rgb
+0.1 setlinewidth
+4.8386 1.1937 m 16.4446 2.4453 l 16.4446 14.3964 l 4.8386 13.1448 l closepath
+gs 0.7882 0.0706 0.2157 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+16.4446 2.4453 m 4.8386 1.1937 l
+s
+16.4446 14.3964 m 16.4446 2.4453 l
+s
+0.3686 0.0353 0.102 rgb
+0.1 setlinewidth
+0.3485 16.3799 m 0.3485 4.4288 l 4.8386 1.1937 l 4.8386 13.1448 l closepath
+gs 0.3686 0.0353 0.102 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+4.8386 1.1937 m 0.3485 4.4288 l
+s
+4.8386 1.1937 m 4.8386 13.1448 l
+s
+0.3485 16.3799 m 0.3485 4.4288 l
+s
+0.3098 0.0275 0.0863 rgb
+0.1 setlinewidth
+0.3485 16.3799 m 4.8386 13.1448 l 16.4446 14.3964 l 11.9545 17.6314 l closepath
+gs 0.3098 0.0275 0.0863 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.3485 16.3799 m 4.8386 13.1448 l
+s
+11.9545 17.6314 m 16.4446 14.3964 l
+s
+4.8386 13.1448 m 16.4446 14.3964 l
+s
+11.9545 17.6314 m 0.3485 16.3799 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bccube.pdf b/Master/texmf-dist/doc/latex/bclogo/bccube.pdf
new file mode 100644
index 00000000000..fee5819b250
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bccube.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdallemagne.eps b/Master/texmf-dist/doc/latex/bclogo/bcdallemagne.eps
new file mode 100644
index 00000000000..70b1a525526
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdallemagne.eps
@@ -0,0 +1,214 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 26
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%DrapeauxH (Utilisateur)
+1 setlinejoin
+0 0 0 rgb
+0.4 setlinewidth
+0 24.8 m 0.5065 24.861 l 0.9859 24.906 l 1.4396 24.9359 l 1.8689 24.9515 l
+2.2751 24.9538 l 2.6595 24.9437 l 3.0233 24.9223 l 3.368 24.8902 l 3.6947 24.8486 l
+4.0048 24.7984 l 4.2995 24.7403 l 4.5803 24.6755 l 4.8483 24.6048 l 5.105 24.5291 l
+5.3515 24.4493 l 5.5892 24.3664 l 5.8194 24.2814 l 6.0433 24.195 l 6.2624 24.1083 l
+6.4778 24.0222 l 6.691 23.9376 l 6.9031 23.8554 l 7.1155 23.7766 l 7.3295 23.7021 l
+7.5464 23.6327 l 7.7675 23.5695 l 7.994 23.5133 l 8.2274 23.4651 l 8.4689 23.4258 l
+8.7197 23.3964 l 8.9813 23.3776 l 9.2548 23.3706 l 9.5416 23.3762 l 9.843 23.3952 l
+10.1604 23.4288 l 10.4949 23.4777 l 10.8479 23.5429 l 11.2207 23.6253 l 11.6146 23.7259 l
+12.0309 23.8455 l 12.4709 23.9852 l 12.9359 24.1458 l 13.4272 24.3282 l 13.946 24.5334 l
+14.4938 24.7623 l 15.0718 25.0158 l 15.6813 25.2949 l 16.3236 25.6004 l 17 25.9333 l
+17 22.1933 l 16.3236 21.8604 l 15.6813 21.5549 l 15.0718 21.2758 l 14.4938 21.0223 l
+13.946 20.7934 l 13.4272 20.5882 l 12.9359 20.4058 l 12.4709 20.2452 l 12.0309 20.1055 l
+11.6146 19.9859 l 11.2207 19.8853 l 10.8479 19.8029 l 10.4949 19.7377 l 10.1604 19.6888 l
+9.843 19.6552 l 9.5416 19.6362 l 9.2548 19.6306 l 8.9813 19.6376 l 8.7197 19.6564 l
+8.4689 19.6858 l 8.2274 19.7251 l 7.994 19.7733 l 7.7675 19.8295 l 7.5464 19.8927 l
+7.3295 19.9621 l 7.1155 20.0366 l 6.9031 20.1154 l 6.691 20.1976 l 6.4778 20.2822 l
+6.2624 20.3683 l 6.0433 20.455 l 5.8194 20.5414 l 5.5892 20.6264 l 5.3515 20.7093 l
+5.105 20.7891 l 4.8483 20.8648 l 4.5803 20.9355 l 4.2995 21.0003 l 4.0048 21.0584 l
+3.6947 21.1086 l 3.368 21.1502 l 3.0233 21.1823 l 2.6595 21.2037 l 2.2751 21.2138 l
+1.8689 21.2115 l 1.4396 21.1959 l 0.9859 21.166 l 0.5065 21.121 l 0 21.06 l
+closepath
+0 0 0 rgb fill s 0 0 0 rgb
+0 21.06 m 0.5065 21.121 l 0.9859 21.166 l 1.4396 21.1959 l 1.8689 21.2115 l
+2.2751 21.2138 l 2.6595 21.2037 l 3.0233 21.1823 l 3.368 21.1502 l 3.6947 21.1086 l
+4.0048 21.0584 l 4.2995 21.0003 l 4.5803 20.9355 l 4.8483 20.8648 l 5.105 20.7891 l
+5.3515 20.7093 l 5.5892 20.6264 l 5.8194 20.5414 l 6.0433 20.455 l 6.2624 20.3683 l
+6.4778 20.2822 l 6.691 20.1976 l 6.9031 20.1154 l 7.1155 20.0366 l 7.3295 19.9621 l
+7.5464 19.8927 l 7.7675 19.8295 l 7.994 19.7733 l 8.2274 19.7251 l 8.4689 19.6858 l
+8.7197 19.6564 l 8.9813 19.6376 l 9.2548 19.6306 l 9.5416 19.6362 l 9.843 19.6552 l
+10.1604 19.6888 l 10.4949 19.7377 l 10.8479 19.8029 l 11.2207 19.8853 l 11.6146 19.9859 l
+12.0309 20.1055 l 12.4709 20.2452 l 12.9359 20.4058 l 13.4272 20.5882 l 13.946 20.7934 l
+14.4938 21.0223 l 15.0718 21.2758 l 15.6813 21.5549 l 16.3236 21.8604 l 17 22.1933 l
+17 18.34 l 16.3236 18.0071 l 15.6813 17.7015 l 15.0718 17.4225 l 14.4938 17.169 l
+13.946 16.9401 l 13.4272 16.7349 l 12.9359 16.5524 l 12.4709 16.3919 l 12.0309 16.2522 l
+11.6146 16.1326 l 11.2207 16.032 l 10.8479 15.9495 l 10.4949 15.8843 l 10.1604 15.8354 l
+9.843 15.8019 l 9.5416 15.7828 l 9.2548 15.7773 l 8.9813 15.7843 l 8.7197 15.803 l
+8.4689 15.8325 l 8.2274 15.8718 l 7.994 15.92 l 7.7675 15.9761 l 7.5464 16.0394 l
+7.3295 16.1087 l 7.1155 16.1833 l 6.9031 16.2621 l 6.691 16.3443 l 6.4778 16.4289 l
+6.2624 16.515 l 6.0433 16.6017 l 5.8194 16.688 l 5.5892 16.7731 l 5.3515 16.856 l
+5.105 16.9357 l 4.8483 17.0114 l 4.5803 17.0822 l 4.2995 17.147 l 4.0048 17.205 l
+3.6947 17.2553 l 3.368 17.2969 l 3.0233 17.3289 l 2.6595 17.3504 l 2.2751 17.3605 l
+1.8689 17.3581 l 1.4396 17.3425 l 0.9859 17.3127 l 0.5065 17.2677 l 0 17.2067 l
+closepath
+1 1 0 rgb fill s 0 0 0 rgb
+0 17.2067 m 0.5065 17.2677 l 0.9859 17.3127 l 1.4396 17.3425 l 1.8689 17.3581 l
+2.2751 17.3605 l 2.6595 17.3504 l 3.0233 17.3289 l 3.368 17.2969 l 3.6947 17.2553 l
+4.0048 17.205 l 4.2995 17.147 l 4.5803 17.0822 l 4.8483 17.0114 l 5.105 16.9357 l
+5.3515 16.856 l 5.5892 16.7731 l 5.8194 16.688 l 6.0433 16.6017 l 6.2624 16.515 l
+6.4778 16.4289 l 6.691 16.3443 l 6.9031 16.2621 l 7.1155 16.1833 l 7.3295 16.1087 l
+7.5464 16.0394 l 7.7675 15.9761 l 7.994 15.92 l 8.2274 15.8718 l 8.4689 15.8325 l
+8.7197 15.803 l 8.9813 15.7843 l 9.2548 15.7773 l 9.5416 15.7828 l 9.843 15.8019 l
+10.1604 15.8354 l 10.4949 15.8843 l 10.8479 15.9495 l 11.2207 16.032 l 11.6146 16.1326 l
+12.0309 16.2522 l 12.4709 16.3919 l 12.9359 16.5524 l 13.4272 16.7349 l 13.946 16.9401 l
+14.4938 17.169 l 15.0718 17.4225 l 15.6813 17.7015 l 16.3236 18.0071 l 17 18.34 l
+17 14.6 l 16.3236 14.2671 l 15.6813 13.9615 l 15.0718 13.6825 l 14.4938 13.429 l
+13.946 13.2001 l 13.4272 12.9949 l 12.9359 12.8124 l 12.4709 12.6519 l 12.0309 12.5122 l
+11.6146 12.3926 l 11.2207 12.292 l 10.8479 12.2095 l 10.4949 12.1443 l 10.1604 12.0954 l
+9.843 12.0619 l 9.5416 12.0428 l 9.2548 12.0373 l 8.9813 12.0443 l 8.7197 12.063 l
+8.4689 12.0925 l 8.2274 12.1318 l 7.994 12.18 l 7.7675 12.2361 l 7.5464 12.2994 l
+7.3295 12.3687 l 7.1155 12.4433 l 6.9031 12.5221 l 6.691 12.6043 l 6.4778 12.6889 l
+6.2624 12.775 l 6.0433 12.8617 l 5.8194 12.948 l 5.5892 13.0331 l 5.3515 13.116 l
+5.105 13.1957 l 4.8483 13.2714 l 4.5803 13.3422 l 4.2995 13.407 l 4.0048 13.465 l
+3.6947 13.5153 l 3.368 13.5569 l 3.0233 13.5889 l 2.6595 13.6104 l 2.2751 13.6205 l
+1.8689 13.6181 l 1.4396 13.6025 l 0.9859 13.5727 l 0.5065 13.5277 l 0 13.4667 l
+closepath
+1 0 0 rgb fill s 0 0 0 rgb
+thinlines
+0 24.8 m 0.5065 24.861 l 0.9859 24.906 l 1.4396 24.9359 l 1.8689 24.9515 l
+2.2751 24.9538 l 2.6595 24.9437 l 3.0233 24.9223 l 3.368 24.8902 l 3.6947 24.8486 l
+4.0048 24.7984 l 4.2995 24.7403 l 4.5803 24.6755 l 4.8483 24.6048 l 5.105 24.5291 l
+5.3515 24.4493 l 5.5892 24.3664 l 5.8194 24.2814 l 6.0433 24.195 l 6.2624 24.1083 l
+6.4778 24.0222 l 6.691 23.9376 l 6.9031 23.8554 l 7.1155 23.7766 l 7.3295 23.7021 l
+7.5464 23.6327 l 7.7675 23.5695 l 7.994 23.5133 l 8.2274 23.4651 l 8.4689 23.4258 l
+8.7197 23.3964 l 8.9813 23.3776 l 9.2548 23.3706 l 9.5416 23.3762 l 9.843 23.3952 l
+10.1604 23.4288 l 10.4949 23.4777 l 10.8479 23.5429 l 11.2207 23.6253 l 11.6146 23.7259 l
+12.0309 23.8455 l 12.4709 23.9852 l 12.9359 24.1458 l 13.4272 24.3282 l 13.946 24.5334 l
+14.4938 24.7623 l 15.0718 25.0158 l 15.6813 25.2949 l 16.3236 25.6004 l 17 25.9333 l
+17 14.6 l 16.3236 14.2671 l 15.6813 13.9615 l 15.0718 13.6825 l 14.4938 13.429 l
+13.946 13.2001 l 13.4272 12.9949 l 12.9359 12.8124 l 12.4709 12.6519 l 12.0309 12.5122 l
+11.6146 12.3926 l 11.2207 12.292 l 10.8479 12.2095 l 10.4949 12.1443 l 10.1604 12.0954 l
+9.843 12.0619 l 9.5416 12.0428 l 9.2548 12.0373 l 8.9813 12.0443 l 8.7197 12.063 l
+8.4689 12.0925 l 8.2274 12.1318 l 7.994 12.18 l 7.7675 12.2361 l 7.5464 12.2994 l
+7.3295 12.3687 l 7.1155 12.4433 l 6.9031 12.5221 l 6.691 12.6043 l 6.4778 12.6889 l
+6.2624 12.775 l 6.0433 12.8617 l 5.8194 12.948 l 5.5892 13.0331 l 5.3515 13.116 l
+5.105 13.1957 l 4.8483 13.2714 l 4.5803 13.3422 l 4.2995 13.407 l 4.0048 13.465 l
+3.6947 13.5153 l 3.368 13.5569 l 3.0233 13.5889 l 2.6595 13.6104 l 2.2751 13.6205 l
+1.8689 13.6181 l 1.4396 13.6025 l 0.9859 13.5727 l 0.5065 13.5277 l 0 13.4667 l
+closepath
+s
+Thicklines
+0 1 m 0 25.9333 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdallemagne.pdf b/Master/texmf-dist/doc/latex/bclogo/bcdallemagne.pdf
new file mode 100644
index 00000000000..e08252e7eb9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdallemagne.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdbelgique.eps b/Master/texmf-dist/doc/latex/bclogo/bcdbelgique.eps
new file mode 100644
index 00000000000..ec1b50583d9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdbelgique.eps
@@ -0,0 +1,2414 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 14:16:58 2009
+%%BoundingBox: 71 693 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcdbelgique.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1416
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 216 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 216 a
+0 216 142 217 v 142 216 a
+ currentpoint grestore moveto
+ 142 216 a 0 94 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 0.0 -1.13759 0.50839
+-1.07614 0.9897 -1.03067 1.44464 -1.00099 1.8758 -0.98502 2.28299 -0.98276
+2.66972 -0.993 3.03491 -1.0147 3.38068 -1.04646 3.70837 -1.08864 4.01994
+-1.13863 4.3157 -1.19781 4.59673 -1.26256 4.86629 -1.3332 5.12334 -1.40941
+5.37138 -1.48907 5.61021 -1.57326 5.84125 -1.65848 6.06532 -1.74492
+6.25642 -1.82008 6.25642 9.55518 6.06532 9.63034 5.84125 9.71678 5.61021
+9.802 5.37138 9.88618 5.12334 9.96585 4.86629 10.04205 4.59673 10.1127
+4.3157 10.17744 4.01994 10.23663 3.70837 10.28662 3.38068 10.3288 3.03491
+10.36057 2.66972 10.38226 2.28299 10.3925 1.8758 10.39024 1.44464 10.37427
+0.9897 10.34459 0.50839 10.29912 0.0 10.23767 /Lineto /lineto load
+def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt {
+n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0
+ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add
+2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 6.25642 -1.82008
+6.50203 -1.9178 6.71588 -2.0032 6.92868 -2.08513 7.14148 -2.1648 7.35635
+-2.23978 7.5747 -2.3092 7.79654 -2.37291 8.0241 -2.42862 8.25737 -2.47757
+8.50073 -2.51732 8.75206 -2.547 9.01485 -2.56505 9.2891 -2.57199 9.57687
+-2.56627 9.87941 -2.54805 10.19792 -2.51385 10.53343 -2.46507 10.8884
+-2.39912 11.26262 -2.31598 11.37527 -2.2875 11.37527 9.08775 11.26262
+9.05928 10.8884 8.97614 10.53343 8.91019 10.19792 8.8614 9.87941 8.82721
+9.57687 8.80899 9.2891 8.80327 9.01485 8.81021 8.75206 8.82826 8.50073
+8.85794 8.25737 8.89769 8.0241 8.94664 7.79654 9.00235 7.5747 9.06606
+7.35635 9.13548 7.14148 9.21046 6.92868 9.29013 6.71588 9.37206 6.50203
+9.45746 6.28593 9.5439 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 0 setrgbcolor 1. .setopacityalpha fill grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 11.37527 -2.2875
+11.65732 -2.21582 12.07477 -2.09537 12.51738 -1.95546 12.98376 -1.79387
+13.4762 -1.61075 13.99725 -1.40489 14.54784 -1.17508 15.12791 -0.92131
+15.73889 -0.64047 16.38388 -0.33447 17.06291 0.0 17.06291 11.37527
+16.38388 11.04079 15.73889 10.73479 15.12791 10.45395 14.54784 10.20018
+13.99725 9.97037 13.4762 9.76451 12.98376 9.58139 12.51738 9.4198 12.07477
+9.27989 11.65732 9.15944 11.37527 9.08775 /Lineto /lineto load def
+false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 1 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor [ 0.0 -1.13759 0.50839
+-1.07614 0.9897 -1.03067 1.44464 -1.00099 1.8758 -0.98502 2.28299 -0.98276
+2.66972 -0.993 3.03491 -1.0147 3.38068 -1.04646 3.70837 -1.08864 4.01994
+-1.13863 4.3157 -1.19781 4.59673 -1.26256 4.86629 -1.3332 5.12334 -1.40941
+5.37138 -1.48907 5.61021 -1.57326 5.84125 -1.65848 6.06532 -1.74492
+6.28593 -1.83136 6.50203 -1.9178 6.71588 -2.0032 6.92868 -2.08513 7.14148
+-2.1648 7.35635 -2.23978 7.5747 -2.3092 7.79654 -2.37291 8.0241 -2.42862
+8.25737 -2.47757 8.50073 -2.51732 8.75206 -2.547 9.01485 -2.56505 9.2891
+-2.57199 9.57687 -2.56627 9.87941 -2.54805 10.19792 -2.51385 10.53343
+-2.46507 10.8884 -2.39912 11.26262 -2.31598 11.65732 -2.21582 12.07477
+-2.09537 12.51738 -1.95546 12.98376 -1.79387 13.4762 -1.61075 13.99725
+-1.40489 14.54784 -1.17508 15.12791 -0.92131 15.73889 -0.64047 16.38388
+-0.33447 17.06291 0.0 17.06291 11.37527 16.38388 11.04079 15.73889
+10.73479 15.12791 10.45395 14.54784 10.20018 13.99725 9.97037 13.4762
+9.76451 12.98376 9.58139 12.51738 9.4198 12.07477 9.27989 11.65732
+9.15944 11.26262 9.05928 10.8884 8.97614 10.53343 8.91019 10.19792
+8.8614 9.87941 8.82721 9.57687 8.80899 9.2891 8.80327 9.01485 8.81021
+8.75206 8.82826 8.50073 8.85794 8.25737 8.89769 8.0241 8.94664 7.79654
+9.00235 7.5747 9.06606 7.35635 9.13548 7.14148 9.21046 6.92868 9.29013
+6.71588 9.37206 6.50203 9.45746 6.28593 9.5439 6.06532 9.63034 5.84125
+9.71678 5.61021 9.802 5.37138 9.88618 5.12334 9.96585 4.86629 10.04205
+4.59673 10.1127 4.3157 10.17744 4.01994 10.23663 3.70837 10.28662 3.38068
+10.3288 3.03491 10.36057 2.66972 10.38226 2.28299 10.3925 1.8758 10.39024
+1.44464 10.37427 0.9897 10.34459 0.50839 10.29912 0.0 10.23767 /Lineto
+/lineto load def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def
+} if n 3 lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2
+mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1
+y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n
+n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12
+x11 sub atan def /ArrowPos 0. def /Length x12 x11 sub y12 y11 sub
+Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add
+def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos mul add y11
+Alpha sin ArrowPos mul add currentdict /ArrowInside known { ArrowInside
+} if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1.
+ 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos
+add def x12 x11 sub ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11
+add currentdict /ArrowInside known { ArrowInside } if pop pop } repeat
+} ifelse pop pop Lineto } def n { 4 copy /y11 ED /x11 ED /y12 ED /x12
+ED drawArrows } repeat x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED
+/y12 y0 def /x12 x0 def drawArrows /y11 y0 def /x11 x0 def /y12 yy1
+def /x12 xx1 def drawArrows pop pop closepath } ifelse gsave 0.2
+SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 1.4 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 0.0 11.37527 0.0 -13.65028
+ /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq not
+{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup
+1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha
+cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub
+def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha
+y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2
+y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos
+add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add
+y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1.4 SLW
+0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdbelgique.pdf b/Master/texmf-dist/doc/latex/bclogo/bcdbelgique.pdf
new file mode 100644
index 00000000000..8ca0f29a389
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdbelgique.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdfrance.eps b/Master/texmf-dist/doc/latex/bclogo/bcdfrance.eps
new file mode 100644
index 00000000000..fdadd41df69
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdfrance.eps
@@ -0,0 +1,2414 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 14:16:28 2009
+%%BoundingBox: 71 693 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcdfrance.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1416
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 216 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 216 a
+0 216 142 217 v 142 216 a
+ currentpoint grestore moveto
+ 142 216 a 0 94 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 0.0 -1.13759 0.50839
+-1.07614 0.9897 -1.03067 1.44464 -1.00099 1.8758 -0.98502 2.28299 -0.98276
+2.66972 -0.993 3.03491 -1.0147 3.38068 -1.04646 3.70837 -1.08864 4.01994
+-1.13863 4.3157 -1.19781 4.59673 -1.26256 4.86629 -1.3332 5.12334 -1.40941
+5.37138 -1.48907 5.61021 -1.57326 5.84125 -1.65848 6.06532 -1.74492
+6.25642 -1.82008 6.25642 9.55518 6.06532 9.63034 5.84125 9.71678 5.61021
+9.802 5.37138 9.88618 5.12334 9.96585 4.86629 10.04205 4.59673 10.1127
+4.3157 10.17744 4.01994 10.23663 3.70837 10.28662 3.38068 10.3288 3.03491
+10.36057 2.66972 10.38226 2.28299 10.3925 1.8758 10.39024 1.44464 10.37427
+0.9897 10.34459 0.50839 10.29912 0.0 10.23767 /Lineto /lineto load
+def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt {
+n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0
+ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add
+2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0 0 1 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 6.25642 -1.82008
+6.50203 -1.9178 6.71588 -2.0032 6.92868 -2.08513 7.14148 -2.1648 7.35635
+-2.23978 7.5747 -2.3092 7.79654 -2.37291 8.0241 -2.42862 8.25737 -2.47757
+8.50073 -2.51732 8.75206 -2.547 9.01485 -2.56505 9.2891 -2.57199 9.57687
+-2.56627 9.87941 -2.54805 10.19792 -2.51385 10.53343 -2.46507 10.8884
+-2.39912 11.26262 -2.31598 11.37527 -2.2875 11.37527 9.08775 11.26262
+9.05928 10.8884 8.97614 10.53343 8.91019 10.19792 8.8614 9.87941 8.82721
+9.57687 8.80899 9.2891 8.80327 9.01485 8.81021 8.75206 8.82826 8.50073
+8.85794 8.25737 8.89769 8.0241 8.94664 7.79654 9.00235 7.5747 9.06606
+7.35635 9.13548 7.14148 9.21046 6.92868 9.29013 6.71588 9.37206 6.50203
+9.45746 6.28593 9.5439 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 11.37527 -2.2875
+11.65732 -2.21582 12.07477 -2.09537 12.51738 -1.95546 12.98376 -1.79387
+13.4762 -1.61075 13.99725 -1.40489 14.54784 -1.17508 15.12791 -0.92131
+15.73889 -0.64047 16.38388 -0.33447 17.06291 0.0 17.06291 11.37527
+16.38388 11.04079 15.73889 10.73479 15.12791 10.45395 14.54784 10.20018
+13.99725 9.97037 13.4762 9.76451 12.98376 9.58139 12.51738 9.4198 12.07477
+9.27989 11.65732 9.15944 11.37527 9.08775 /Lineto /lineto load def
+false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 1 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor [ 0.0 -1.13759 0.50839
+-1.07614 0.9897 -1.03067 1.44464 -1.00099 1.8758 -0.98502 2.28299 -0.98276
+2.66972 -0.993 3.03491 -1.0147 3.38068 -1.04646 3.70837 -1.08864 4.01994
+-1.13863 4.3157 -1.19781 4.59673 -1.26256 4.86629 -1.3332 5.12334 -1.40941
+5.37138 -1.48907 5.61021 -1.57326 5.84125 -1.65848 6.06532 -1.74492
+6.28593 -1.83136 6.50203 -1.9178 6.71588 -2.0032 6.92868 -2.08513 7.14148
+-2.1648 7.35635 -2.23978 7.5747 -2.3092 7.79654 -2.37291 8.0241 -2.42862
+8.25737 -2.47757 8.50073 -2.51732 8.75206 -2.547 9.01485 -2.56505 9.2891
+-2.57199 9.57687 -2.56627 9.87941 -2.54805 10.19792 -2.51385 10.53343
+-2.46507 10.8884 -2.39912 11.26262 -2.31598 11.65732 -2.21582 12.07477
+-2.09537 12.51738 -1.95546 12.98376 -1.79387 13.4762 -1.61075 13.99725
+-1.40489 14.54784 -1.17508 15.12791 -0.92131 15.73889 -0.64047 16.38388
+-0.33447 17.06291 0.0 17.06291 11.37527 16.38388 11.04079 15.73889
+10.73479 15.12791 10.45395 14.54784 10.20018 13.99725 9.97037 13.4762
+9.76451 12.98376 9.58139 12.51738 9.4198 12.07477 9.27989 11.65732
+9.15944 11.26262 9.05928 10.8884 8.97614 10.53343 8.91019 10.19792
+8.8614 9.87941 8.82721 9.57687 8.80899 9.2891 8.80327 9.01485 8.81021
+8.75206 8.82826 8.50073 8.85794 8.25737 8.89769 8.0241 8.94664 7.79654
+9.00235 7.5747 9.06606 7.35635 9.13548 7.14148 9.21046 6.92868 9.29013
+6.71588 9.37206 6.50203 9.45746 6.28593 9.5439 6.06532 9.63034 5.84125
+9.71678 5.61021 9.802 5.37138 9.88618 5.12334 9.96585 4.86629 10.04205
+4.59673 10.1127 4.3157 10.17744 4.01994 10.23663 3.70837 10.28662 3.38068
+10.3288 3.03491 10.36057 2.66972 10.38226 2.28299 10.3925 1.8758 10.39024
+1.44464 10.37427 0.9897 10.34459 0.50839 10.29912 0.0 10.23767 /Lineto
+/lineto load def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def
+} if n 3 lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2
+mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1
+y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n
+n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12
+x11 sub atan def /ArrowPos 0. def /Length x12 x11 sub y12 y11 sub
+Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add
+def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos mul add y11
+Alpha sin ArrowPos mul add currentdict /ArrowInside known { ArrowInside
+} if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1.
+ 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos
+add def x12 x11 sub ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11
+add currentdict /ArrowInside known { ArrowInside } if pop pop } repeat
+} ifelse pop pop Lineto } def n { 4 copy /y11 ED /x11 ED /y12 ED /x12
+ED drawArrows } repeat x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED
+/y12 y0 def /x12 x0 def drawArrows /y11 y0 def /x11 x0 def /y12 yy1
+def /x12 xx1 def drawArrows pop pop closepath } ifelse gsave 0.2
+SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 1.4 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 0.0 11.37527 0.0 -13.65028
+ /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq not
+{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup
+1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha
+cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub
+def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha
+y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2
+y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos
+add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add
+y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1.4 SLW
+0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdfrance.pdf b/Master/texmf-dist/doc/latex/bclogo/bcdfrance.pdf
new file mode 100644
index 00000000000..9e8bb487b30
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdfrance.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcditalie.eps b/Master/texmf-dist/doc/latex/bclogo/bcditalie.eps
new file mode 100644
index 00000000000..4980aa8b078
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcditalie.eps
@@ -0,0 +1,2414 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 14:15:29 2009
+%%BoundingBox: 71 693 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcditalie.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1415
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 216 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 216 a
+0 216 142 217 v 142 216 a
+ currentpoint grestore moveto
+ 142 216 a 0 94 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 0.0 -1.13759 0.50839
+-1.07614 0.9897 -1.03067 1.44464 -1.00099 1.8758 -0.98502 2.28299 -0.98276
+2.66972 -0.993 3.03491 -1.0147 3.38068 -1.04646 3.70837 -1.08864 4.01994
+-1.13863 4.3157 -1.19781 4.59673 -1.26256 4.86629 -1.3332 5.12334 -1.40941
+5.37138 -1.48907 5.61021 -1.57326 5.84125 -1.65848 6.06532 -1.74492
+6.25642 -1.82008 6.25642 9.55518 6.06532 9.63034 5.84125 9.71678 5.61021
+9.802 5.37138 9.88618 5.12334 9.96585 4.86629 10.04205 4.59673 10.1127
+4.3157 10.17744 4.01994 10.23663 3.70837 10.28662 3.38068 10.3288 3.03491
+10.36057 2.66972 10.38226 2.28299 10.3925 1.8758 10.39024 1.44464 10.37427
+0.9897 10.34459 0.50839 10.29912 0.0 10.23767 /Lineto /lineto load
+def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt {
+n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0
+ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add
+2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 0 1 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 6.25642 -1.82008
+6.50203 -1.9178 6.71588 -2.0032 6.92868 -2.08513 7.14148 -2.1648 7.35635
+-2.23978 7.5747 -2.3092 7.79654 -2.37291 8.0241 -2.42862 8.25737 -2.47757
+8.50073 -2.51732 8.75206 -2.547 9.01485 -2.56505 9.2891 -2.57199 9.57687
+-2.56627 9.87941 -2.54805 10.19792 -2.51385 10.53343 -2.46507 10.8884
+-2.39912 11.26262 -2.31598 11.37527 -2.2875 11.37527 9.08775 11.26262
+9.05928 10.8884 8.97614 10.53343 8.91019 10.19792 8.8614 9.87941 8.82721
+9.57687 8.80899 9.2891 8.80327 9.01485 8.81021 8.75206 8.82826 8.50073
+8.85794 8.25737 8.89769 8.0241 8.94664 7.79654 9.00235 7.5747 9.06606
+7.35635 9.13548 7.14148 9.21046 6.92868 9.29013 6.71588 9.37206 6.50203
+9.45746 6.28593 9.5439 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 11.37527 -2.2875
+11.65732 -2.21582 12.07477 -2.09537 12.51738 -1.95546 12.98376 -1.79387
+13.4762 -1.61075 13.99725 -1.40489 14.54784 -1.17508 15.12791 -0.92131
+15.73889 -0.64047 16.38388 -0.33447 17.06291 0.0 17.06291 11.37527
+16.38388 11.04079 15.73889 10.73479 15.12791 10.45395 14.54784 10.20018
+13.99725 9.97037 13.4762 9.76451 12.98376 9.58139 12.51738 9.4198 12.07477
+9.27989 11.65732 9.15944 11.37527 9.08775 /Lineto /lineto load def
+false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n {
+pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED
+/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2
+div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 1 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor [ 0.0 -1.13759 0.50839
+-1.07614 0.9897 -1.03067 1.44464 -1.00099 1.8758 -0.98502 2.28299 -0.98276
+2.66972 -0.993 3.03491 -1.0147 3.38068 -1.04646 3.70837 -1.08864 4.01994
+-1.13863 4.3157 -1.19781 4.59673 -1.26256 4.86629 -1.3332 5.12334 -1.40941
+5.37138 -1.48907 5.61021 -1.57326 5.84125 -1.65848 6.06532 -1.74492
+6.28593 -1.83136 6.50203 -1.9178 6.71588 -2.0032 6.92868 -2.08513 7.14148
+-2.1648 7.35635 -2.23978 7.5747 -2.3092 7.79654 -2.37291 8.0241 -2.42862
+8.25737 -2.47757 8.50073 -2.51732 8.75206 -2.547 9.01485 -2.56505 9.2891
+-2.57199 9.57687 -2.56627 9.87941 -2.54805 10.19792 -2.51385 10.53343
+-2.46507 10.8884 -2.39912 11.26262 -2.31598 11.65732 -2.21582 12.07477
+-2.09537 12.51738 -1.95546 12.98376 -1.79387 13.4762 -1.61075 13.99725
+-1.40489 14.54784 -1.17508 15.12791 -0.92131 15.73889 -0.64047 16.38388
+-0.33447 17.06291 0.0 17.06291 11.37527 16.38388 11.04079 15.73889
+10.73479 15.12791 10.45395 14.54784 10.20018 13.99725 9.97037 13.4762
+9.76451 12.98376 9.58139 12.51738 9.4198 12.07477 9.27989 11.65732
+9.15944 11.26262 9.05928 10.8884 8.97614 10.53343 8.91019 10.19792
+8.8614 9.87941 8.82721 9.57687 8.80899 9.2891 8.80327 9.01485 8.81021
+8.75206 8.82826 8.50073 8.85794 8.25737 8.89769 8.0241 8.94664 7.79654
+9.00235 7.5747 9.06606 7.35635 9.13548 7.14148 9.21046 6.92868 9.29013
+6.71588 9.37206 6.50203 9.45746 6.28593 9.5439 6.06532 9.63034 5.84125
+9.71678 5.61021 9.802 5.37138 9.88618 5.12334 9.96585 4.86629 10.04205
+4.59673 10.1127 4.3157 10.17744 4.01994 10.23663 3.70837 10.28662 3.38068
+10.3288 3.03491 10.36057 2.66972 10.38226 2.28299 10.3925 1.8758 10.39024
+1.44464 10.37427 0.9897 10.34459 0.50839 10.29912 0.0 10.23767 /Lineto
+/lineto load def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def
+} if n 3 lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2
+mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1
+y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n
+n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12
+x11 sub atan def /ArrowPos 0. def /Length x12 x11 sub y12 y11 sub
+Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos add
+def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos mul add y11
+Alpha sin ArrowPos mul add currentdict /ArrowInside known { ArrowInside
+} if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1.
+ 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos
+add def x12 x11 sub ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11
+add currentdict /ArrowInside known { ArrowInside } if pop pop } repeat
+} ifelse pop pop Lineto } def n { 4 copy /y11 ED /x11 ED /y12 ED /x12
+ED drawArrows } repeat x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED
+/y12 y0 def /x12 x0 def drawArrows /y11 y0 def /x11 x0 def /y12 yy1
+def /x12 xx1 def drawArrows pop pop closepath } ifelse gsave 0.2
+SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 1.4 SLW 0 0 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 0.0 11.37527 0.0 -13.65028
+ /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq not
+{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup
+1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha
+cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub
+def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha
+y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2
+y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos
+add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add
+y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1.4 SLW
+0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcditalie.pdf b/Master/texmf-dist/doc/latex/bclogo/bcditalie.pdf
new file mode 100644
index 00000000000..d3fbe55e762
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcditalie.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.eps b/Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.eps
new file mode 100644
index 00000000000..42c6fc44462
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.eps
@@ -0,0 +1,250 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 18
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%Dodecaedre (Utilisateur)
+1 setlinecap
+1 setlinejoin
+0.5922 0.0549 0.1608 rgb
+0.1 setlinewidth
+11.5801 6.1865 m 10.7894 12.1494 l 14.051 14.8204 l 16.8575 10.5083 l 15.3304 5.1723 l
+closepath
+gs 0.5922 0.0549 0.1608 rgb fill gr s
+0.4353 0.0392 0.1176 rgb
+11.5801 6.1865 m 15.3304 5.1723 l 12.3165 2.0608 l 6.7034 1.152 l 6.2483 3.7019 l
+closepath
+gs 0.4353 0.0392 0.1176 rgb fill gr s
+0.8471 0.0784 0.2314 rgb
+11.5801 6.1865 m 6.2483 3.7019 l 2.1624 8.1292 l 4.9689 13.3501 l 10.7894 12.1494 l
+closepath
+gs 0.8471 0.0784 0.2314 rgb fill gr s
+0.5451 0.051 0.149 rgb
+10.7894 12.1494 m 4.9689 13.3501 l 4.6333 16.7631 l 10.2464 17.6718 l 14.051 14.8204 l
+closepath
+gs 0.5451 0.051 0.149 rgb fill gr s
+0.2784 0.0235 0.0745 rgb
+2.8988 4.0034 m 0.0923 8.3156 l 2.1624 8.1292 l 6.2483 3.7019 l 6.7034 1.152 l
+closepath
+gs 0.2784 0.0235 0.0745 rgb fill gr s
+0.3529 0.0314 0.098 rgb
+4.6333 16.7631 m 4.9689 13.3501 l 2.1624 8.1292 l 0.0923 8.3156 l 1.6194 13.6516 l
+closepath
+gs 0.3529 0.0314 0.098 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.0923 8.3156 m 2.1624 8.1292 l
+s
+15.3304 5.1723 m 11.5801 6.1865 l
+s
+4.9689 13.3501 m 10.7894 12.1494 l
+s
+10.7894 12.1494 m 14.051 14.8204 l
+s
+6.2483 3.7019 m 11.5801 6.1865 l
+s
+2.1624 8.1292 m 4.9689 13.3501 l
+s
+11.5801 6.1865 m 10.7894 12.1494 l
+s
+4.9689 13.3501 m 4.6333 16.7631 l
+s
+6.2483 3.7019 m 2.1624 8.1292 l
+s
+6.7034 1.152 m 6.2483 3.7019 l
+s
+0.2784 0.0235 0.0745 rgb
+0.1 setlinewidth
+10.7015 15.122 m 14.7874 10.6947 l 16.8575 10.5083 l 14.051 14.8204 l 10.2464 17.6718 l
+closepath
+gs 0.2784 0.0235 0.0745 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+14.051 14.8204 m 16.8575 10.5083 l
+s
+10.2464 17.6718 m 14.051 14.8204 l
+s
+0.3529 0.0314 0.098 rgb
+0.1 setlinewidth
+12.3165 2.0608 m 15.3304 5.1723 l 16.8575 10.5083 l 14.7874 10.6947 l 11.9809 5.4738 l
+closepath
+gs 0.3529 0.0314 0.098 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+15.3304 5.1723 m 12.3165 2.0608 l
+s
+16.8575 10.5083 m 15.3304 5.1723 l
+s
+16.8575 10.5083 m 14.7874 10.6947 l
+s
+0.4353 0.0392 0.1176 rgb
+0.1 setlinewidth
+10.7015 15.122 m 10.2464 17.6718 l 4.6333 16.7631 l 1.6194 13.6516 l 5.3697 12.6373 l
+closepath
+gs 0.4353 0.0392 0.1176 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+10.7015 15.122 m 10.2464 17.6718 l
+s
+4.6333 16.7631 m 10.2464 17.6718 l
+s
+4.6333 16.7631 m 1.6194 13.6516 l
+s
+0.5922 0.0549 0.1608 rgb
+0.1 setlinewidth
+5.3697 12.6373 m 1.6194 13.6516 l 0.0923 8.3156 l 2.8988 4.0034 l 6.1604 6.6744 l
+closepath
+gs 0.5922 0.0549 0.1608 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.0923 8.3156 m 2.8988 4.0034 l
+s
+1.6194 13.6516 m 0.0923 8.3156 l
+s
+5.3697 12.6373 m 1.6194 13.6516 l
+s
+0.5451 0.051 0.149 rgb
+0.1 setlinewidth
+2.8988 4.0034 m 6.7034 1.152 l 12.3165 2.0608 l 11.9809 5.4738 l 6.1604 6.6744 l
+closepath
+gs 0.5451 0.051 0.149 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+6.1604 6.6744 m 2.8988 4.0034 l
+s
+12.3165 2.0608 m 6.7034 1.152 l
+s
+12.3165 2.0608 m 11.9809 5.4738 l
+s
+2.8988 4.0034 m 6.7034 1.152 l
+s
+0.8471 0.0784 0.2314 rgb
+0.1 setlinewidth
+11.9809 5.4738 m 14.7874 10.6947 l 10.7015 15.122 l 5.3697 12.6373 l 6.1604 6.6744 l
+closepath
+gs 0.8471 0.0784 0.2314 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+6.1604 6.6744 m 11.9809 5.4738 l
+s
+14.7874 10.6947 m 10.7015 15.122 l
+s
+10.7015 15.122 m 5.3697 12.6373 l
+s
+11.9809 5.4738 m 14.7874 10.6947 l
+s
+5.3697 12.6373 m 6.1604 6.6744 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.pdf b/Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.pdf
new file mode 100644
index 00000000000..05f7b30cc3e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdodecaedre.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.eps b/Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.eps
new file mode 100644
index 00000000000..30ead058dc8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.eps
@@ -0,0 +1,214 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 26
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%DrapeauxH (Utilisateur)
+1 setlinejoin
+0 0 0 rgb
+0.4 setlinewidth
+0 24.8 m 0.5065 24.861 l 0.9859 24.906 l 1.4396 24.9359 l 1.8689 24.9515 l
+2.2751 24.9538 l 2.6595 24.9437 l 3.0233 24.9223 l 3.368 24.8902 l 3.6947 24.8486 l
+4.0048 24.7984 l 4.2995 24.7403 l 4.5803 24.6755 l 4.8483 24.6048 l 5.105 24.5291 l
+5.3515 24.4493 l 5.5892 24.3664 l 5.8194 24.2814 l 6.0433 24.195 l 6.2624 24.1083 l
+6.4778 24.0222 l 6.691 23.9376 l 6.9031 23.8554 l 7.1155 23.7766 l 7.3295 23.7021 l
+7.5464 23.6327 l 7.7675 23.5695 l 7.994 23.5133 l 8.2274 23.4651 l 8.4689 23.4258 l
+8.7197 23.3964 l 8.9813 23.3776 l 9.2548 23.3706 l 9.5416 23.3762 l 9.843 23.3952 l
+10.1604 23.4288 l 10.4949 23.4777 l 10.8479 23.5429 l 11.2207 23.6253 l 11.6146 23.7259 l
+12.0309 23.8455 l 12.4709 23.9852 l 12.9359 24.1458 l 13.4272 24.3282 l 13.946 24.5334 l
+14.4938 24.7623 l 15.0718 25.0158 l 15.6813 25.2949 l 16.3236 25.6004 l 17 25.9333 l
+17 22.1933 l 16.3236 21.8604 l 15.6813 21.5549 l 15.0718 21.2758 l 14.4938 21.0223 l
+13.946 20.7934 l 13.4272 20.5882 l 12.9359 20.4058 l 12.4709 20.2452 l 12.0309 20.1055 l
+11.6146 19.9859 l 11.2207 19.8853 l 10.8479 19.8029 l 10.4949 19.7377 l 10.1604 19.6888 l
+9.843 19.6552 l 9.5416 19.6362 l 9.2548 19.6306 l 8.9813 19.6376 l 8.7197 19.6564 l
+8.4689 19.6858 l 8.2274 19.7251 l 7.994 19.7733 l 7.7675 19.8295 l 7.5464 19.8927 l
+7.3295 19.9621 l 7.1155 20.0366 l 6.9031 20.1154 l 6.691 20.1976 l 6.4778 20.2822 l
+6.2624 20.3683 l 6.0433 20.455 l 5.8194 20.5414 l 5.5892 20.6264 l 5.3515 20.7093 l
+5.105 20.7891 l 4.8483 20.8648 l 4.5803 20.9355 l 4.2995 21.0003 l 4.0048 21.0584 l
+3.6947 21.1086 l 3.368 21.1502 l 3.0233 21.1823 l 2.6595 21.2037 l 2.2751 21.2138 l
+1.8689 21.2115 l 1.4396 21.1959 l 0.9859 21.166 l 0.5065 21.121 l 0 21.06 l
+closepath
+0 0 1 rgb fill s 0 0 0 rgb
+0 21.06 m 0.5065 21.121 l 0.9859 21.166 l 1.4396 21.1959 l 1.8689 21.2115 l
+2.2751 21.2138 l 2.6595 21.2037 l 3.0233 21.1823 l 3.368 21.1502 l 3.6947 21.1086 l
+4.0048 21.0584 l 4.2995 21.0003 l 4.5803 20.9355 l 4.8483 20.8648 l 5.105 20.7891 l
+5.3515 20.7093 l 5.5892 20.6264 l 5.8194 20.5414 l 6.0433 20.455 l 6.2624 20.3683 l
+6.4778 20.2822 l 6.691 20.1976 l 6.9031 20.1154 l 7.1155 20.0366 l 7.3295 19.9621 l
+7.5464 19.8927 l 7.7675 19.8295 l 7.994 19.7733 l 8.2274 19.7251 l 8.4689 19.6858 l
+8.7197 19.6564 l 8.9813 19.6376 l 9.2548 19.6306 l 9.5416 19.6362 l 9.843 19.6552 l
+10.1604 19.6888 l 10.4949 19.7377 l 10.8479 19.8029 l 11.2207 19.8853 l 11.6146 19.9859 l
+12.0309 20.1055 l 12.4709 20.2452 l 12.9359 20.4058 l 13.4272 20.5882 l 13.946 20.7934 l
+14.4938 21.0223 l 15.0718 21.2758 l 15.6813 21.5549 l 16.3236 21.8604 l 17 22.1933 l
+17 18.34 l 16.3236 18.0071 l 15.6813 17.7015 l 15.0718 17.4225 l 14.4938 17.169 l
+13.946 16.9401 l 13.4272 16.7349 l 12.9359 16.5524 l 12.4709 16.3919 l 12.0309 16.2522 l
+11.6146 16.1326 l 11.2207 16.032 l 10.8479 15.9495 l 10.4949 15.8843 l 10.1604 15.8354 l
+9.843 15.8019 l 9.5416 15.7828 l 9.2548 15.7773 l 8.9813 15.7843 l 8.7197 15.803 l
+8.4689 15.8325 l 8.2274 15.8718 l 7.994 15.92 l 7.7675 15.9761 l 7.5464 16.0394 l
+7.3295 16.1087 l 7.1155 16.1833 l 6.9031 16.2621 l 6.691 16.3443 l 6.4778 16.4289 l
+6.2624 16.515 l 6.0433 16.6017 l 5.8194 16.688 l 5.5892 16.7731 l 5.3515 16.856 l
+5.105 16.9357 l 4.8483 17.0114 l 4.5803 17.0822 l 4.2995 17.147 l 4.0048 17.205 l
+3.6947 17.2553 l 3.368 17.2969 l 3.0233 17.3289 l 2.6595 17.3504 l 2.2751 17.3605 l
+1.8689 17.3581 l 1.4396 17.3425 l 0.9859 17.3127 l 0.5065 17.2677 l 0 17.2067 l
+closepath
+1 1 1 rgb fill s 0 0 0 rgb
+0 17.2067 m 0.5065 17.2677 l 0.9859 17.3127 l 1.4396 17.3425 l 1.8689 17.3581 l
+2.2751 17.3605 l 2.6595 17.3504 l 3.0233 17.3289 l 3.368 17.2969 l 3.6947 17.2553 l
+4.0048 17.205 l 4.2995 17.147 l 4.5803 17.0822 l 4.8483 17.0114 l 5.105 16.9357 l
+5.3515 16.856 l 5.5892 16.7731 l 5.8194 16.688 l 6.0433 16.6017 l 6.2624 16.515 l
+6.4778 16.4289 l 6.691 16.3443 l 6.9031 16.2621 l 7.1155 16.1833 l 7.3295 16.1087 l
+7.5464 16.0394 l 7.7675 15.9761 l 7.994 15.92 l 8.2274 15.8718 l 8.4689 15.8325 l
+8.7197 15.803 l 8.9813 15.7843 l 9.2548 15.7773 l 9.5416 15.7828 l 9.843 15.8019 l
+10.1604 15.8354 l 10.4949 15.8843 l 10.8479 15.9495 l 11.2207 16.032 l 11.6146 16.1326 l
+12.0309 16.2522 l 12.4709 16.3919 l 12.9359 16.5524 l 13.4272 16.7349 l 13.946 16.9401 l
+14.4938 17.169 l 15.0718 17.4225 l 15.6813 17.7015 l 16.3236 18.0071 l 17 18.34 l
+17 14.6 l 16.3236 14.2671 l 15.6813 13.9615 l 15.0718 13.6825 l 14.4938 13.429 l
+13.946 13.2001 l 13.4272 12.9949 l 12.9359 12.8124 l 12.4709 12.6519 l 12.0309 12.5122 l
+11.6146 12.3926 l 11.2207 12.292 l 10.8479 12.2095 l 10.4949 12.1443 l 10.1604 12.0954 l
+9.843 12.0619 l 9.5416 12.0428 l 9.2548 12.0373 l 8.9813 12.0443 l 8.7197 12.063 l
+8.4689 12.0925 l 8.2274 12.1318 l 7.994 12.18 l 7.7675 12.2361 l 7.5464 12.2994 l
+7.3295 12.3687 l 7.1155 12.4433 l 6.9031 12.5221 l 6.691 12.6043 l 6.4778 12.6889 l
+6.2624 12.775 l 6.0433 12.8617 l 5.8194 12.948 l 5.5892 13.0331 l 5.3515 13.116 l
+5.105 13.1957 l 4.8483 13.2714 l 4.5803 13.3422 l 4.2995 13.407 l 4.0048 13.465 l
+3.6947 13.5153 l 3.368 13.5569 l 3.0233 13.5889 l 2.6595 13.6104 l 2.2751 13.6205 l
+1.8689 13.6181 l 1.4396 13.6025 l 0.9859 13.5727 l 0.5065 13.5277 l 0 13.4667 l
+closepath
+1 0 0 rgb fill s 0 0 0 rgb
+thinlines
+0 24.8 m 0.5065 24.861 l 0.9859 24.906 l 1.4396 24.9359 l 1.8689 24.9515 l
+2.2751 24.9538 l 2.6595 24.9437 l 3.0233 24.9223 l 3.368 24.8902 l 3.6947 24.8486 l
+4.0048 24.7984 l 4.2995 24.7403 l 4.5803 24.6755 l 4.8483 24.6048 l 5.105 24.5291 l
+5.3515 24.4493 l 5.5892 24.3664 l 5.8194 24.2814 l 6.0433 24.195 l 6.2624 24.1083 l
+6.4778 24.0222 l 6.691 23.9376 l 6.9031 23.8554 l 7.1155 23.7766 l 7.3295 23.7021 l
+7.5464 23.6327 l 7.7675 23.5695 l 7.994 23.5133 l 8.2274 23.4651 l 8.4689 23.4258 l
+8.7197 23.3964 l 8.9813 23.3776 l 9.2548 23.3706 l 9.5416 23.3762 l 9.843 23.3952 l
+10.1604 23.4288 l 10.4949 23.4777 l 10.8479 23.5429 l 11.2207 23.6253 l 11.6146 23.7259 l
+12.0309 23.8455 l 12.4709 23.9852 l 12.9359 24.1458 l 13.4272 24.3282 l 13.946 24.5334 l
+14.4938 24.7623 l 15.0718 25.0158 l 15.6813 25.2949 l 16.3236 25.6004 l 17 25.9333 l
+17 14.6 l 16.3236 14.2671 l 15.6813 13.9615 l 15.0718 13.6825 l 14.4938 13.429 l
+13.946 13.2001 l 13.4272 12.9949 l 12.9359 12.8124 l 12.4709 12.6519 l 12.0309 12.5122 l
+11.6146 12.3926 l 11.2207 12.292 l 10.8479 12.2095 l 10.4949 12.1443 l 10.1604 12.0954 l
+9.843 12.0619 l 9.5416 12.0428 l 9.2548 12.0373 l 8.9813 12.0443 l 8.7197 12.063 l
+8.4689 12.0925 l 8.2274 12.1318 l 7.994 12.18 l 7.7675 12.2361 l 7.5464 12.2994 l
+7.3295 12.3687 l 7.1155 12.4433 l 6.9031 12.5221 l 6.691 12.6043 l 6.4778 12.6889 l
+6.2624 12.775 l 6.0433 12.8617 l 5.8194 12.948 l 5.5892 13.0331 l 5.3515 13.116 l
+5.105 13.1957 l 4.8483 13.2714 l 4.5803 13.3422 l 4.2995 13.407 l 4.0048 13.465 l
+3.6947 13.5153 l 3.368 13.5569 l 3.0233 13.5889 l 2.6595 13.6104 l 2.2751 13.6205 l
+1.8689 13.6181 l 1.4396 13.6025 l 0.9859 13.5727 l 0.5065 13.5277 l 0 13.4667 l
+closepath
+s
+Thicklines
+0 1 m 0 25.9333 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.pdf b/Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.pdf
new file mode 100644
index 00000000000..f56a706c9ab
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcdpaysbas.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bceclaircie.eps b/Master/texmf-dist/doc/latex/bclogo/bceclaircie.eps
new file mode 100644
index 00000000000..21f91cb18be
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bceclaircie.eps
@@ -0,0 +1,113 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 3 18 15
+%%HiResBoundingBox: 0.503516 3.855078 17.894922 14.746875
+%.............................................
+%%Creator: AFPL Ghostscript 853 (epswrite)
+%%CreationDate: 2009/09/23 11:38:17
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+% This copyright applies to everything between here and the %%EndProlog:
+% Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
+%%BeginResource: procset GS_epswrite_2_0_1001
+/GS_epswrite_2_0_1001 80 dict dup begin
+/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
+4 index eq and{ pop pop pop}{ PageSize dup 1
+5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
+{ pop/setpagedevice where
+{ pop 1 dict dup /PageSize PageSize put setpagedevice}
+{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
+setpage}if}ifelse}ifelse}ifelse} bind def
+/!{bind def}bind def/#{load def}!/N/counttomark #
+/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
+/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
+/w/setlinewidth #/J/setlinecap #
+/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
+/m/moveto #/l/lineto #/c/rcurveto #
+/p{N 2 idiv{N -2 roll rlineto}repeat}!
+/P{N 0 gt{N -2 roll moveto p}if}!
+/h{p closepath}!/H{P closepath}!
+/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
+/re{4 -2 roll m exch dup lx exch ly neg lx h}!
+/^{3 index neg 3 index neg}!
+/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
+/q/gsave #/Q/grestore #/rf{re fill}!
+/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
+/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
+/|{exch string readstring |=}!
+/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
+/@/currentfile #/${+ @ |}!
+/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
+3 1 roll}repeat pop pop true}!
+/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
+/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
+/Ic{exch Ix false 3 colorimage}!
+/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
+/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
+/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
+/@F{@ &2<<F}!/@C{@X &2 FX}!
+/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
+/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
+/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
+currentdict end image}!
+/~{@ read {pop} if}!
+end readonly def
+%%EndResource
+/pagesave null def
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+GS_epswrite_2_0_1001 begin
+/pagesave save store 197 dict begin
+0.1 0.1 scale
+%%EndPageSetup
+gsave mark
+Q q
+0 0 180 0 0 190 ^ Y
+0 255 r6
+92 93.39 m
+0 18.26 -14.64 32.9 -32.9 32.9 c
+-18.26 0 -32.9 -14.64 -32.9 -32.9 c
+0 -18.26 14.64 -32.9 32.9 -32.9 c
+18.26 0 32.9 14.64 32.9 32.9 c
+h
+f
+1.9925 w
+1 j
+255 128 64 rG
+92 93.39 m
+0 18.26 -14.64 32.9 -32.9 32.9 c
+-18.26 0 -32.9 -14.64 -32.9 -32.9 c
+0 -18.26 14.64 -32.9 32.9 -32.9 c
+18.26 0 32.9 14.64 32.9 32.9 c
+h
+59.1 93.39 S
+92.56 112.71 13.38 7.72 S
+78.42 126.84 7.73 13.38 S
+59.11 132.02 0 15.45 S
+39.8 126.84 -7.73 13.38 S
+25.66 112.71 -13.38 7.72 S
+20.48 93.39 -15.45 0 S
+25.66 74.08 -13.38 -7.72 S
+218 G
+33.16 49.27 m
+3.84 -10.23 125.1 -7.71 132.84 0 c
+24.75 24.66 -6.97 55.48 -30.91 30.04 c
+-8.38 42.49 -58.65 46.08 -65.83 9.58 c
+-33.51 1.2 -42.23 -23.27 -36.11 -39.62 c
+f
+7.9701 w
+185 G
+33.16 49.27 m
+3.84 -10.23 125.1 -7.71 132.84 0 c
+24.75 24.66 -6.97 55.48 -30.91 30.04 c
+-8.38 42.49 -58.65 46.08 -65.83 9.58 c
+-33.51 1.2 -42.23 -23.27 -36.11 -39.62 c
+h
+S
+cleartomark end end pagesave restore
+ showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
diff --git a/Master/texmf-dist/doc/latex/bclogo/bceclaircie.pdf b/Master/texmf-dist/doc/latex/bclogo/bceclaircie.pdf
new file mode 100644
index 00000000000..a51da3fb4f3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bceclaircie.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bchorloge.eps b/Master/texmf-dist/doc/latex/bclogo/bchorloge.eps
new file mode 100644
index 00000000000..942ba7047ff
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bchorloge.eps
@@ -0,0 +1,2334 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 15:46:20 2009
+%%BoundingBox: 71 701 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bchorloge.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1546
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 150 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 150 a
+0 150 142 151 v 142 150 a
+ currentpoint grestore moveto
+ 142 150 a 71 71 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor 0 360 8.53287 8.53287
+0.0 0.0 Ellipse closepath gsave 1 1 1 setrgbcolor 1. .setopacityalpha
+ fill grestore gsave 0.2 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor 0 360 7.89291 7.89291
+0.0 0.0 Ellipse closepath gsave 1 1 1 setrgbcolor 1. .setopacityalpha
+ fill grestore gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 0 setlinecap stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath 0.1 SLW 0 0 0 setrgbcolor [ 5.54214 -3.19981
+3.19981 -5.54214 0.0 -6.39964 -3.19981 -5.54214 -5.54214 -3.19981 -6.39964
+0.0 -5.54214 3.19981 -3.19981 5.54214 0.0 6.39964 3.19981 5.54214 5.54214
+3.19981 6.39964 0.0 false NArray /DS 2.0 2. CLW mul add 2 div def
+/PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot /Dot { moveto
+gsave 0.2 0.2 scale (b) show grestore } bind def newpath n { transform
+floor .5 add exch floor .5 add exch itransform Dot } repeat end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath 0.1 SLW 0 0 0 setrgbcolor [ 0.0 -6.39964
+-6.39964 0.0 0.0 6.39964 6.39964 0.0 false NArray /DS 2.0 2. CLW mul
+add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot
+/Dot { moveto gsave 0.3 0.3 scale (b) show grestore } bind def newpath
+n { transform floor .5 add exch floor .5 add exch itransform Dot }
+repeat end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -0.8243 0.22095
+-0.22095 -0.8243 5.17262 2.98654 /Lineto /lineto load def false 1
+ setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop
+} repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED
+/y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def
+/y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11
+y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0.
+ def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def
+{ /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit }
+if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict
+/ArrowInside known { ArrowInside } if pop pop } loop }{ /ArrowPos 0.
+ def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul
+x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } def n
+{ 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1
+x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows
+/y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop
+closepath } ifelse gsave 0.4118 0.4118 0.4118 setrgbcolor 1. .setopacityalpha
+ fill grestore gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 0 setlinecap stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 0.14842 -0.84044
+0.84044 0.14842 -3.49512 2.44725 /Lineto /lineto load def false 1
+ setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop
+} repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED
+/y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def
+/y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11
+y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0.
+ def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def
+{ /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit }
+if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict
+/ArrowInside known { ArrowInside } if pop pop } loop }{ /ArrowPos 0.
+ def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul
+x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } def n
+{ 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1
+x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows
+/y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop
+closepath } ifelse gsave 0.4118 0.4118 0.4118 setrgbcolor 1. .setopacityalpha
+ fill grestore gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 0 setlinecap stroke grestore end
+
+@endspecial eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bchorloge.pdf b/Master/texmf-dist/doc/latex/bclogo/bchorloge.pdf
new file mode 100644
index 00000000000..5eea2a53d2c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bchorloge.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcicosaedre.eps b/Master/texmf-dist/doc/latex/bclogo/bcicosaedre.eps
new file mode 100644
index 00000000000..cd58d814036
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcicosaedre.eps
@@ -0,0 +1,214 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 18 19
+%%HiResBoundingBox: 0.049219 0.916406 17.952734 18.655859
+%.............................................
+%%Creator: AFPL Ghostscript 853 (epswrite)
+%%CreationDate: 2009/09/15 09:28:34
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+% This copyright applies to everything between here and the %%EndProlog:
+% Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
+%%BeginResource: procset GS_epswrite_2_0_1001
+/GS_epswrite_2_0_1001 80 dict dup begin
+/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
+4 index eq and{ pop pop pop}{ PageSize dup 1
+5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
+{ pop/setpagedevice where
+{ pop 1 dict dup /PageSize PageSize put setpagedevice}
+{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
+setpage}if}ifelse}ifelse}ifelse} bind def
+/!{bind def}bind def/#{load def}!/N/counttomark #
+/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
+/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
+/w/setlinewidth #/J/setlinecap #
+/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
+/m/moveto #/l/lineto #/c/rcurveto #
+/p{N 2 idiv{N -2 roll rlineto}repeat}!
+/P{N 0 gt{N -2 roll moveto p}if}!
+/h{p closepath}!/H{P closepath}!
+/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
+/re{4 -2 roll m exch dup lx exch ly neg lx h}!
+/^{3 index neg 3 index neg}!
+/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
+/q/gsave #/Q/grestore #/rf{re fill}!
+/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
+/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
+/|{exch string readstring |=}!
+/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
+/@/currentfile #/${+ @ |}!
+/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
+3 1 roll}repeat pop pop true}!
+/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
+/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
+/Ic{exch Ix false 3 colorimage}!
+/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
+/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
+/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
+/@F{@ &2<<F}!/@C{@X &2 FX}!
+/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
+/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
+/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
+currentdict end image}!
+/~{@ read {pop} if}!
+end readonly def
+%%EndResource
+/pagesave null def
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+GS_epswrite_2_0_1001 begin
+/pagesave save store 197 dict begin
+0.1 0.1 scale
+%%EndPageSetup
+gsave mark
+Q q
+0 0 180 0 0 187 ^ Y
+167 15 45 rG
+47.89 137.91 23.28 -89.95 -66.15 28.42 f
+0.9962 w
+1 J
+1 j
+47.89 137.91 23.28 -89.95 -66.15 28.42 H
+S
+76 7 21 rG
+47.89 137.91 -42.87 -61.54 25.27 82.86 f
+47.89 137.91 -42.87 -61.54 25.27 82.86 H
+S
+81 7 22 rG
+47.89 137.91 -17.61 21.32 81.77 22.8 f
+47.89 137.91 -17.61 21.32 81.77 22.8 H
+S
+173 16 47 rG
+47.89 137.91 64.16 44.13 25.27 -68.77 f
+47.89 137.91 64.16 44.13 25.27 -68.77 H
+S
+220 20 60 rG
+47.89 137.91 89.43 -24.65 -66.15 -65.3 f
+47.89 137.91 89.43 -24.65 -66.15 -65.3 H
+S
+99 9 27 rG
+175 119.35 -37.68 -6.09 -25.27 68.77 f
+175 119.35 -37.68 -6.09 -25.27 68.77 H
+S
+105 10 29 rG
+137.32 113.26 37.68 6.09 -25.27 -82.86 f
+137.32 113.26 37.68 6.09 -25.27 -82.86 H
+S
+182 17 50 rG
+137.32 113.26 12.41 -76.77 -78.56 11.46 f
+137.32 113.26 12.41 -76.77 -78.56 11.46 H
+S
+98 9 27 rG
+71.17 47.95 78.56 -11.46 -81.77 -22.8 f
+71.17 47.95 78.56 -11.46 -81.77 -22.8 H
+S
+87 8 24 rG
+71.17 47.95 -3.21 -34.26 -62.94 62.68 f
+71.17 47.95 -3.21 -34.26 -62.94 62.68 H
+S
+7.9701 w
+255 182 193 rG
+67.96 13.69 3.21 34.26 S
+175 119.35 -37.68 -6.09 S
+112.06 182.03 -64.16 -44.12 S
+71.17 47.95 -66.15 28.42 S
+137.32 113.26 -89.43 24.65 S
+137.32 113.26 -66.15 -65.3 S
+149.73 36.49 -78.56 11.46 S
+5.02 76.37 42.88 61.54 S
+47.89 137.91 23.28 -89.95 S
+112.06 182.03 25.27 -68.77 S
+149.73 36.49 -12.41 76.77 S
+30.29 159.23 17.61 -21.32 S
+220 20 60 rG
+132.13 57.81 -23.28 89.95 -66.15 -65.3 f
+0.9962 w
+132.13 57.81 -23.28 89.95 -66.15 -65.3 H
+S
+167 15 45 rG
+132.13 57.81 42.88 61.54 -66.15 28.41 f
+132.13 57.81 42.88 61.54 -66.15 28.41 H
+S
+7.9701 w
+255 182 193 rG
+108.85 147.77 23.28 -89.95 S
+173 16 47 rG
+132.13 57.81 -89.43 24.65 25.27 -68.77 f
+0.9962 w
+132.13 57.81 -89.43 24.65 25.27 -68.77 H
+S
+7.9701 w
+255 182 193 rG
+132.13 57.81 -89.43 24.65 S
+76 7 21 rG
+132.13 57.81 17.61 -21.32 25.27 82.86 f
+0.9962 w
+132.13 57.81 17.61 -21.32 25.27 82.86 H
+S
+7.9701 w
+255 182 193 rG
+175 119.35 -25.27 -82.86 S
+175 119.35 -42.87 -61.54 S
+81 7 22 rG
+132.13 57.81 -64.16 -44.12 81.77 22.8 f
+0.9962 w
+132.13 57.81 -64.16 -44.12 81.77 22.8 H
+S
+7.9701 w
+255 182 193 rG
+149.73 36.49 -81.77 -22.8 S
+149.73 36.49 -17.61 21.32 S
+132.13 57.81 -64.16 -44.12 S
+182 17 50 rG
+30.29 159.23 12.41 -76.77 66.15 65.3 f
+0.9962 w
+30.29 159.23 12.41 -76.77 66.15 65.3 H
+S
+7.9701 w
+255 182 193 rG
+42.7 82.46 66.15 65.3 S
+105 10 29 rG
+5.02 76.37 37.68 6.09 -12.41 76.77 f
+0.9962 w
+5.02 76.37 37.68 6.09 -12.41 76.77 H
+S
+7.9701 w
+255 182 193 rG
+5.02 76.37 25.27 82.86 S
+42.7 82.46 -12.41 76.77 S
+99 9 27 rG
+5.02 76.37 62.94 -62.68 -25.27 68.77 f
+0.9962 w
+5.02 76.37 62.94 -62.68 -25.27 68.77 H
+S
+7.9701 w
+255 182 193 rG
+67.96 13.69 -62.94 62.68 S
+42.7 82.46 -37.68 -6.09 S
+67.96 13.69 -25.27 68.77 S
+87 8 24 rG
+112.06 182.03 -3.21 -34.27 66.15 -28.41 f
+0.9962 w
+112.06 182.03 -3.21 -34.27 66.15 -28.41 H
+S
+7.9701 w
+255 182 193 rG
+108.85 147.77 66.15 -28.41 S
+175 119.35 -62.94 62.68 S
+98 9 27 rG
+30.29 159.23 78.56 -11.46 3.21 34.27 f
+0.9962 w
+30.29 159.23 78.56 -11.46 3.21 34.27 H
+S
+7.9701 w
+255 182 193 rG
+30.29 159.23 81.77 22.8 S
+108.85 147.77 3.21 34.27 S
+30.29 159.23 78.56 -11.46 S
+cleartomark end end pagesave restore
+ showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcicosaedre.pdf b/Master/texmf-dist/doc/latex/bclogo/bcicosaedre.pdf
new file mode 100644
index 00000000000..f85b0355de0
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcicosaedre.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcinterdit.eps b/Master/texmf-dist/doc/latex/bclogo/bcinterdit.eps
new file mode 100644
index 00000000000..0aa310d4cae
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcinterdit.eps
@@ -0,0 +1,2289 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 14:17:40 2009
+%%BoundingBox: 71 701 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcinterdit.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1417
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 150 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 150 a
+0 150 142 150 v 142 150 a
+ currentpoint grestore moveto
+ 142 150 a 71 71 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor 0 360 8.53181 8.53181
+0.0 0.0 Ellipse closepath gsave 1 1 1 setrgbcolor 1. .setopacityalpha
+ fill grestore gsave 0.4 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor 0 360 7.75616 7.75616
+0.0 0.0 Ellipse closepath gsave 1 0 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor [ 5.04146 -1.16338
+5.04146 1.16338 -5.04146 1.16338 -5.04146 -1.16338 /Lineto /lineto
+load def false 1 setlinejoin NArray n 2 eq { 0 0 /n 3 def } if n 3
+lt { n { pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll
+/y0 ED /x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1
+add 2 div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows
+{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos
+0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs
+def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit
+} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add
+currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 }
+ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub
+ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside
+known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto }
+def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat
+x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def
+drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows
+pop pop closepath } ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcinterdit.pdf b/Master/texmf-dist/doc/latex/bclogo/bcinterdit.pdf
new file mode 100644
index 00000000000..09c8f50ab55
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcinterdit.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.pdf b/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.pdf
index d20d4820d99..e580cdbd4db 100644
--- a/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.pdf
+++ b/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.tex b/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.tex
index 9628f1d8e20..f02d03337b6 100644
--- a/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.tex
+++ b/Master/texmf-dist/doc/latex/bclogo/bclogo-doc.tex
@@ -1,7 +1,7 @@
-\documentclass[ a4paper, 11pt]{article}
+\documentclass[ a4paper, 10pt]{article}
\usepackage[utf8]{inputenc}
-\usepackage[garamond]{mathdesign}
-\usepackage{bclogo}
+\usepackage[charter]{mathdesign}
+\usepackage[blur]{bclogo}
\usepackage{verbatim}
\usepackage[margin=2.5cm]{geometry}
\usepackage{amsmath}
@@ -10,11 +10,19 @@
\usepackage{multicol}
\usepackage{listings}
\usepackage{pifont}
+\usepackage{lipsum}
\usepackage{url}
\definecolor{cPG}{RGB}{235, 227, 150}
\definecolor{link}{RGB}{150, 81, 0}
\usepackage[colorlinks, linkcolor=link]{hyperref}
+\definecolor{fbase}{gray}{0.95}
+\usepackage{framed}
+\newenvironment{gbar}[1]{%
+ \def\FrameCommand{{\color{#1}\vrule width 3pt}\colorbox{fbase}}%
+ \MakeFramed {\advance\hsize-\width \FrameRestore}}%
+{\endMakeFramed}
+
\definecolor{vert}{RGB}{0,105,29}
\definecolor{bleu}{RGB}{78,88,169}
\lstset{% general command to set parameter(s)
@@ -27,7 +35,8 @@
stringstyle=\ttfamily, % typewriter type for strings
showstringspaces=false,
language=[LaTeX]TeX,
- defaultdialect=[LaTeX]TeX
+ defaultdialect=[LaTeX]TeX,
+ morekeywords={RequirePackage}
}
\lstdefinestyle{numbers}
{numbers=left, stepnumber=1, numberstyle=\tiny, numbersep=10pt}
@@ -49,9 +58,9 @@
\definecolor{cPG}{RGB}{235, 227, 150}
-\title{\texttt{bclogo} version 2.22}
-\author{ Maxime \textsc{Chupin} et Patrick \textsc{Fradin} \footnote{Merci à Jean-Côme \textsc{Charpentier}, Ulrike \textsc{Fischer} et Manuel \textsc{Pégourié-Gonnard}}\\\url{notezik@gmail.com}}
-\date{12 Janvier 2009}
+\title{\texttt{bclogo} version 2.24}
+\author{ Maxime \textsc{Chupin} et Patrick \textsc{Fradin} \footnote{Merci à tous ceux qui ont participé, entre autres, Jean-Côme \textsc{Charpentier}, Ulrike \textsc{Fischer} et Manuel \textsc{Pégourié-Gonnard}\dots}\\\url{notezik@gmail.com}}
+\date{10 Septembre 2009}
\begin{document}
@@ -63,9 +72,7 @@ Ce paquet permet la création, via \texttt{Pstricks} ou \texttt{Tikz}, de boîte
\vspace*{2cm}
\begin{bclogo}[couleur = cPG, cadreTitre = true, arrondi = 0.1]{Le paquet \texttt{bclogo}}
-Voici les logos :
-\begin{multicols}{2}
-
+\begin{multicols}{3}
\begin{itemize}
\item La fleur : \bcfleur
\item Le chantier : \bcpanchant
@@ -78,13 +85,38 @@ Voici les logos :
\item Le crayon : \bccrayon
\item Attention : \bcattention
\item Le c\oe ur : \bccoeur
-\item Ornement : \bcdanger
+\item Danger : \bcdanger
\item Smiley heureux : \bcsmbh
\item Smiley malheureux : \bcsmmh
\item Le trèfle : \bctrefle
\item Le livre : \bcbook
\item Ornement : \bcorne{}
-\item Le pique de \LaTeX{} : \bcspadesuit
+\item Info : \bcinfo
+\item La plume : \bcplume
+\item Le pic de \LaTeX{} : \bcspadesuit
+\item La bombe : \bcbombe
+\item Le cube : \bccube
+\item Le dodecaèdre : \bcdodecaedre
+\item L'icosaèdre : \bcicosaedre
+\item L'octaèdre : \bcoctaedre
+\item Le tétraèdre : \bctetraedre
+\item L'Allemagne : \bcdallemagne
+\item La Belgique : \bcdbelgique
+\item La France : \bcdfrance
+\item L'Italie : \bcditalie
+\item Les Pays Bas : \bcdpaysbas
+\item Le soleil : \bcsoleil
+\item L'éclaircie : \bceclaircie
+\item La pluie : \bcpluie
+\item La neige : \bcneige
+\item Le sens interdit : \bcinterdit
+\item Le stop : \bcstop
+\item Le poisson : \bcpoisson
+\item L'horlage : \bchorloge
+\item Le calendrier : \bccalendrier
+\item La rose des vents : \bcrosevents
+\item Le ying et le yang : \bcying
+\item Danger glissant : \bcdz
\end{itemize}
\end{multicols}
@@ -110,6 +142,7 @@ Pour son bon fonctionnement, il est nécessaire d'avoir les paquets suivants ins
\item \verb+xkeyval+
\item \verb+pst-coil+
\item \verb+ifthen+
+\item \verb+pst-blur+ si l'on souhaite utiliser la fonction (voir section \ref{blur})
\end{enum}
\end{multicols}
et/ou \texttt{tikz} et ses librairies \texttt{shadows} et \texttt{decorations.pathmorphing}.
@@ -117,9 +150,9 @@ et/ou \texttt{tikz} et ses librairies \texttt{shadows} et \texttt{decorations.pa
\verb+xkeyval+ et \verb+ifthen+ sont nécessaires dans les deux utilisations.
\end{bclogo}
-\section{La chargement du paquet}
+\section{Le chargement du paquet}
-Depuis la version 2.0 de \texttt{bclogo}, le chargement s'effectue avec deux options, soit on utilise \texttt{pstricks} (par défaut)\footnote{Ceci est issue d'un conseil d'Herbert \textsc{Voss} qui vérifie à chaque nouvelle version le code, merci à lui.} soit \texttt{tikz}. Ceci s'effectue dans le préambule du document \LaTeX{} :
+Depuis la version 2.0 de \texttt{bclogo}, le chargement s'effectue avec deux options, soit on utilise \texttt{pstricks} (par défaut)\footnote{sur un conseil d'Herbert \textsc{Voss} qui vérifie à chaque nouvelle version le code, merci à lui.} soit \texttt{tikz}. Ceci s'effectue dans le préambule du document \LaTeX{} :
\begin{Code}
\begin{lstlisting}
@@ -172,16 +205,38 @@ On définit la couleur de fond grâce à \texttt{couleur = <macouleur>}, par exe
\bigskip
Ce qui donne :
-
+\medskip
\begin{bclogo}[couleur = blue!30]{Mon Titre}
Du texte qui se répète encore et encore pour l'exemple, du texte qui
se répète encore et encore pour l'exemple, du texte qui se répète
encore et encore pour l'exemple\dots
\end{bclogo}
-\bigskip
+\medskip
Par défaut la couleur est blanche.
+\subsection{La couleur du trait de bord}
+
+Cette nouvelle option a été créée sur la demmande de Philippe \bsc{Fortemps}. On commande la couleur du trait de bord par \texttt{couleurBord=<couleur>}. Voici un exemple~:
+\begin{Code}
+\begin{lstlisting}
+\begin{bclogo}[couleur = blue!30,couleurBord=red!30]{Mon Titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\end{lstlisting}
+\end{Code}
+\bigskip
+
+Ce qui donne :
+\medskip
+\begin{bclogo}[couleur = blue!30,couleurBord=red!30]{Mon Titre}
+ Du texte qui se répète encore et encore pour l'exemple, du texte qui
+ se répète encore et encore pour l'exemple, du texte qui se répète
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+
\subsection{L'arrondi des coins}
On commande la taille de l'arrondi dans les options de la manière suivante \texttt{arrondi=<valeur>}, elle\footnote{Avant la version 2.22, les arrondis pstricks étaient relatifs, ils sont maintenant absolus.} se règle en cm :
@@ -198,12 +253,13 @@ On commande la taille de l'arrondi dans les options de la manière suivante \tex
\bigskip
Ce qui donne :
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1]{Mon Titre}
Du texte qui se répète encore et encore pour l'exemple, du texte qui
se répète encore et encore pour l'exemple, du texte qui se répète
encore et encore pour l'exemple\dots
\end{bclogo}
-\bigskip
+\medskip
Par défaut, l'arrondi est à 0.
@@ -227,29 +283,82 @@ Le second style, plus élaboré, est un cadre avec un gradient de couleur \texti
\bigskip
Ce qui donne :
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, cadreTitre = true]{Mon Titre}
Du texte qui se répète encore et encore pour l'exemple, du texte qui
se répète encore et encore pour l'exemple, du texte qui se répète
encore et encore pour l'exemple\dots
\end{bclogo}
+\subsubsection{Sous-titre}
+
+Si on utilise le style de titre sans cadre (\textit{i.e.} le style par défaut) alors on peut définir un sous-titre grâce à la commande \texttt{sousTitre=<Mon sous-titre>}\footnote{Cette option a été mise en place sur la demande de Gaétan \textsc{Marris}}. Par exemple~:
+
+\begin{Code}
+\begin{lstlisting}
+\begin{bclogo}[couleur=blue!30, arrondi=0.1, sousTitre= Mon sous-titre]{Mon Titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\end{lstlisting}
+\end{Code}
+ \bigskip
+
+Ce qui donne :
+\medskip
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, sousTitre= Mon sous-titre]{Mon Titre}
+ Du texte qui se répète encore et encore pour l'exemple, du texte qui
+ se répète encore et encore pour l'exemple, du texte qui se répète
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\medskip
+\paragraph{Le style du sous-titre} On peut redéfinir le style de sous-titre comme ceci~:
+\begin{lstlisting}
+\renewcommand\styleSousTitre[1]{\textsl{#1}}
+\end{lstlisting}
+
+\renewcommand\styleSousTitre[1]{\textsl{#1}}
+
+On obtient alors
+
+\medskip
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, sousTitre= Mon sous-titre]{Mon Titre}
+ Du texte qui se répète encore et encore pour l'exemple, du texte qui
+ se répète encore et encore pour l'exemple, du texte qui se répète
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\medskip
+
+
+Dans \texttt{bclogo}, \verb+\styleSousTitre+ est définie comme ceci~:
+
+\begin{lstlisting}
+\newcommand\styleSousTitre[1]{\normalsize\textit{#1}}
+\end{lstlisting}
+
+\renewcommand\styleSousTitre[1]{\normalsize\textit{#1}}
+
\subsection{Les logos}
-C'est là que réside l'originalité de \texttt{bclogo}\dots{} Pour la plupart, je les ai dessinés avec \textit{Inkscape} et exportés en PSTricks.
+C'est là que réside l'originalité de \texttt{bclogo}\dots{} Pour la plupart des logos, je les ai dessinés avec \textit{Inkscape} et exportés en PSTricks. Pour d'autres, Patrick \bsc{Fradin} et Alphonse \bsc{Capriani} ont utilisé le super \TeX{}graph.
-Il y a depuis la version 2.0, plusieurs façons de créer des logos, soit au format \texttt{pstricks}, soit au format \texttt{pgf}, soit au format \texttt{eps}, soit au format \texttt{pdf}. Des commandes sont définies appelant les fichiers aux différents formats.
+Depuis la version 2.4, deux formats sont utilisés, soit \texttt{eps}, soit \texttt{pdf}.
La création de logo est un travail amusant, ceux qui veulent y participer n'ont qu'à me contacter par mail (les logos sont définis avec une largeur de 17pt, la hauteur est plus ou moins libre dans la mesure du raisonnable). Lors de la création des logos il faut veiller à permettre la double utilisation \texttt{tikz} et \texttt{pstricks}.
+Je remercie tout ceux qui participent à la création de logo et en particulier Alphonse \bsc{Capriani} qui a doublé la collection (du logo bombe au logo ying).
Voici la liste des logos :
+\medskip
+
\begin{bclogo}[arrondi=0.1, logo=\bcpanchant, couleur= cPG, cadreTitre = true]{Les logos}
+\begin{multicols}{2}
\begin{enumerate}
\item la fleur : commande \verb+\bcfleur+ \raisebox{-3mm}{\bcfleur}
\item \og{}en chantier\fg{} : commande \verb+\bcpanchant+ \raisebox{-3mm}{\bcpanchant} (Jean-Michel \textsc{Sarlat})
-\item la note : commande \verb+\bcnote+ \raisebox{-3mm}{\bcnote} (Thomas \textsc{Labarrusias})
+\item la note : commande \verb+\bcnote+ \raisebox{-3mm}{\bcnote} (Thomas \textsc{Labarussias})
\item l'étoile : commande \verb+\bcetoile+ \raisebox{-3mm}{\bcetoile}
\item l'ourson : commande \verb+\bcours+ \raisebox{-3mm}{\bcours}
\item \og{}attention\fg{} : commande \verb+\bcattention+ \raisebox{-3mm}{\bcattention}
@@ -265,7 +374,33 @@ Voici la liste des logos :
\item Le point d'interrogation : commande \verb+\bcquestion+ \raisebox{-3mm}{\bcquestion}
\item Le crayon : commande \verb+\bccrayon+ \raisebox{-1mm}{\bccrayon} (Anne-Sophie \textsc{Philippe})
\item Le pique de \LaTeX{} : commande \verb+\bcspadesuit+ {\bcspadesuit}
+\item Logo info : commande \verb+\bcinfo+ \raisebox{-2mm}{\bcinfo} (Thomas \textsc{Labarussias})
+\item La plume : commande \verb+\bcplume+ \raisebox{-2mm}{\bcplume}
+\item La bombe : commande \verb+\bcbombe+ \raisebox{-2mm}{\bcbombe}
+\item La cube : commande \verb+\bccube+ \raisebox{-2mm}{\bccube}
+\item La dodécaèdre : commande \verb+\bcdodecaedre+ \raisebox{-2mm}{\bcdodecaedre}
+\item L'icosaèdre : commande \verb+\bcicosaedre+ \raisebox{-2mm}{\bcicosaedre}
+\item L'octaèdre : commande \verb+\bcoctaedre+ \raisebox{-2mm}{\bcoctaedre}
+\item La tétraèdre : commande \verb+\bctetraedre+ \raisebox{-2mm}{\bctetraedre}
+\item L'Allemagne : commande \verb+\bcdallemagne+ (noter le \texttt{d} comme drapeau) \raisebox{-2mm}{\bcdallemagne}
+\item La Belgique : commande \verb+\bcdbelgique+ \raisebox{-2mm}{\bcdbelgique}
+\item La France : commande \verb+\bcdfrance+ \raisebox{-2mm}{\bcdfrance}
+\item L'Italie : commande \verb+\bcditalie+ \raisebox{-2mm}{\bcditalie}
+\item Les Pays-Bas : commande \verb+\bcdpaysbas+ \raisebox{-2mm}{\bcdpaysbas}
+\item Le soleil : commande \verb+\bcsoleil+ \raisebox{-2mm}{\bcsoleil}
+\item L'éclaircie : commande \verb+\bceclaircie+ \raisebox{-2mm}{\bceclaircie}
+\item La pluie : commande \verb+\bcpluie+ \raisebox{-2mm}{\bcpluie}
+\item La neige : commande \verb+\bcneige+ \raisebox{-2mm}{\bcneige}
+\item Le sens interdit : commande \verb+\bcinterdit+ \raisebox{-2mm}{\bcinterdit}
+\item Le stop : commande \verb+\bcstop+ \raisebox{-2mm}{\bcstop}
+\item Le poisson : commande \verb+\bcpoisson+ \raisebox{-2mm}{\bcpoisson}
+\item L'horloge : commande \verb+\bchorloge+ \raisebox{-2mm}{\bchorloge}
+\item Le calendrier : commande \verb+\bccalendrier+ \raisebox{-2mm}{\bccalendrier}
+\item La rose des vents : commande \verb+\bcrosevents+ \raisebox{-2mm}{\bcrosevents}
+\item Le ying et le yang : commande \verb+\bcying+ \raisebox{-2mm}{\bcying}
+\item Danger glkissant : commande \verb+\bcdz+ \raisebox{-2mm}{\bcdz} (Vincent \bsc{Pantaloni})
\end{enumerate}
+\end{multicols}
\end{bclogo}
Par exemple,
@@ -281,22 +416,23 @@ Par exemple,
\end{Code}
produit :
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bctrefle]{Mon Titre}
Du texte qui se répète encore et encore pour l'exemple, du texte qui
se répète encore et encore pour l'exemple, du texte qui se répète
encore et encore pour l'exemple\dots
\end{bclogo}
-\paragraph{Remarque :} On peut se définir soi-même de nouvelle commande de logo sans pour autant que ces logos soient disponible dans \verb+bclogo+. Par exemple, pour obtenir le \emph{coeur} de \LaTeX{} $\heartsuit$, il suffit de définir dans le préambule de document la commande :
+\paragraph{Remarque :} On peut se définir soi-même de nouvelles commandes de logo sans pour autant que ces logos soient disponibles dans \verb+bclogo+. Par exemple, pour obtenir le \emph{coeur} de \LaTeX{} $\heartsuit$, il suffit de définir dans le préambule de document la commande :
\begin{lstlisting}
\newcommand\bcheartsuit{\centering \huge $\heartsuit$}
\end{lstlisting}
-donnera le même resultat que pour le pique \LaTeX{} (attention \verb+\bcheartsuit+ n'est pas définie dans \verb+bclogo+).
+Ceci donnera le même resultat que pour le pique \LaTeX{} (attention \verb+\bcheartsuit+ n'est pas définie dans \verb+bclogo+).
On peut aussi faire ceci pour un code \verb+pstricks+, \verb+pgf+, une image\dots{} Voici trois exemples illustrant respectivement les trois cas mentionnés :
+
\begin{Code}
\begin{lstlisting}
% mon logo code pstricks
@@ -308,6 +444,22 @@ On peut aussi faire ceci pour un code \verb+pstricks+, \verb+pgf+, une image\dot
\end{lstlisting}
\end{Code}
+\subsubsection{Taille des logos}
+
+On peut redéfinir la taille des logos en largeur. Par défaut celle-ci est de 17pt. Cette redéfinition s'effectue de la manière suivante~:
+\begin{lstlisting}
+\renewcommand\logowidth{<valeur>pt}
+\end{lstlisting}
+
+Par exemple, une redifinition à 10pt donnera~:
+\medskip
+\renewcommand\logowidth{10pt}
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1]{Mon Titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\renewcommand\logowidth{17pt}
\subsection{L'ombre}
La gestion de l'ombre se règle comme les autres options. Par défaut, il n'y en a pas (la valeur \texttt{ombre} vaut \texttt{false}). On active l'ombre avec la commande \texttt{ombre = true}. Par exemple :
@@ -323,6 +475,8 @@ La gestion de l'ombre se règle comme les autres options. Par défaut, il n'y en
\end{Code}
Ce qui produit :
+\medskip
+
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, ombre = true]{Mon Titre}
Du texte qui se répète encore et encore pour l'exemple, du texte qui
se répète encore et encore pour l'exemple, du texte qui se répète
@@ -348,6 +502,7 @@ Voici un exemple illustrant les deux options :
\end{Code}
produit :
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, ombre = true, epOmbre = 0.25, couleurOmbre = black!30]{Mon Titre}
Du texte qui se répète encore et encore pour l'exemple, du texte qui
@@ -355,6 +510,36 @@ produit :
encore et encore pour l'exemple\dots
\end{bclogo}
+\subsubsection{Le paramètre \texttt{blur}}
+
+Depuis la version 2.24, on a rajouté l'option proposée par le paquet \texttt{pst-blur}. L'utilisation de celle-ci est légèrement plus compliquée que celle des autres.
+
+Si on utilise \texttt{pstricks}, alors, lors du chargement de \texttt{bclogo}, il faut mettre l'option \texttt{blur} qui permet de «~charger~» \texttt{pst-blur}.
+\begin{lstlisting}
+\usepackage[blur]{pstricks}
+\end{lstlisting}
+
+Si on utilise \texttt{tikz}, alors il n'y a pas besoin de rajouter l'option \texttt{blur} au chargement de \texttt{bclogo}.
+
+L'utilisation de cette option ne diffère pas selon \texttt{tikz} ou \texttt{pstricks}. On procède de la façon suivante~:
+
+\begin{Code}
+\begin{lstlisting}[ breaklines=true,breakindent=30pt]
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, ombre = true, couleurOmbre = black!60,blur]{Mon Titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\end{lstlisting}
+\end{Code}
+
+produit :
+\medskip
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, ombre = true, couleurOmbre = black!60,blur]{Mon Titre}
+ Du texte qui se répète encore et encore pour l'exemple, du texte qui
+ se répète encore et encore pour l'exemple, du texte qui se répète
+ encore et encore pour l'exemple\dots
+\end{bclogo}
\subsection{Styles de barre}
@@ -376,14 +561,14 @@ Par défaut, on a une barre verticale droite comme dans tous les exemples préc
\end{lstlisting}
\end{Code}
donne :
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, epBarre = 4.5]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
encore et encore pour l'exemple\dots
\end{bclogo}
-Par défaut cette valeur \texttt{epBarre = 1.5pt}.
+Par défaut cette valeur est \texttt{epBarre = 1.5pt}.
\subsubsection{La barre «~zigzag~»}
@@ -399,6 +584,7 @@ Ce style de barre s'obtient avec la commande \texttt{barre=zigzag}. Par exemple
\end{Code}
donne
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = zigzag]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -418,7 +604,7 @@ Ce style de barre s'obtient avec la commande \texttt{barre=snake}. Par exemple :
\end{Code}
donne
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = snake]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -439,7 +625,7 @@ Pour ces deux styles de barre, on règle la taille (ou amplitude) de l'ondulatio
\end{Code}
donne
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = snake,tailleOndu = 1.5]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -461,6 +647,7 @@ Cette fonction permet de répéter verticalement un motif quelconque à la place
\end{lstlisting}
\end{Code}
donne
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = motif,motifBarre = $\star$]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -468,12 +655,13 @@ donne
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
encore et encore pour l'exemple\dots
\end{bclogo}
+\medskip
-Si je dispose d'une image personnelle \texttt{spir.eps}\footnote{Ici, j'utilise un \texttt{.eps} mais un utilisateur de \texttt{pdflatex} peut très bien utiliser un \texttt{jpg}, \texttt{pdf}\dots} \includegraphics{spir.eps}, il suffit de mettre :
+Si je dispose d'une image personnelle, par exemple \texttt{spir.eps}\footnote{Ici, j'utilise un \texttt{.eps} mais un utilisateur de \texttt{pdflatex} peut très bien utiliser un \texttt{jpg}, \texttt{pdf}\dots} \includegraphics{spir.eps}, il suffit de mettre :
\verb+motifBarre = \includegraphics{spir}+.
Ceci donne :
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = motif,motifBarre = \includegraphics{spir}]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -481,8 +669,12 @@ Si je dispose d'une image personnelle \texttt{spir.eps}\footnote{Ici, j'utilise
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
encore et encore pour l'exemple\dots
\end{bclogo}
+\medskip
+
+Un autre exemple pour donner des idées\dots
+\medskip
-\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = motif,motifBarre = \includegraphics{bc-inter}]{Mon Titre}
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = motif,motifBarre = {\includegraphics[width=8pt]{bc-inter}}]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
encore et encore pour l'exemple\dots Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
@@ -492,11 +684,11 @@ Si je dispose d'une image personnelle \texttt{spir.eps}\footnote{Ici, j'utilise
\subsubsection{Image personnelle «~étendue~»}
-Si je dispose d'une image, par exemple \texttt{brace.eps}
+Si je dispose d'une image, par exemple \texttt{brace.eps}\footnote{Comme précédemment, les utilisateurs de pdf\LaTeX{} peuvent utiliser une image pdf.}
\includegraphics{brace.eps}
- grâce à la commande \texttt{barre = imageExt} couplée avec \texttt{imageBarre = brace} je l'obtiens «~étirée~» à la place de la barre verticale. Par exemple :
+ grâce à la commande \texttt{barre = imageExt} couplée avec \texttt{imageBarre = brace}, je l'obtiens «~étirée~» à la place de la barre verticale. Par exemple :
\begin{Code}
\begin{lstlisting}[ breaklines=true,breakindent=30pt]
@@ -510,6 +702,7 @@ Si je dispose d'une image, par exemple \texttt{brace.eps}
\end{lstlisting}
\end{Code}
donne
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = imageExt,imageBarre = brace]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -520,11 +713,11 @@ donne
\subsubsection{Image personnelle «~clippée~»}
-Si l'on dispose d'un image personnelle (très longue), on peut grâce à la commade \texttt{barre=imageClip} couplée encore avec la commande \texttt{imageBarre = <monimage>}. On obtient à la place de la barre verticale, l'image «~tronquée~». Par exmple, si je dispose de l'image \texttt{losanges.eps} (image tournée de 90 degrès) :
+Si on dispose d'une image personnelle (assez longue de préférence), on peut grâce à la commade \texttt{barre=imageClip} couplée encore une fois avec la commande \texttt{imageBarre = <monimage>}. On obtient à la place de la barre verticale, l'image «~tronquée~». Par exmple, si je dispose de l'image \texttt{losanges.eps} (image tournée de 90 degrès) :
\noindent\includegraphics[angle = 90,bb=0 0 17 \linewidth,clip]{losanges}
-cet exemple :
+Cet exemple
\begin{Code}
@@ -539,8 +732,8 @@ cet exemple :
\end{lstlisting}
\end{Code}
-donne :
-
+donne
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = imageClip,imageBarre = losanges]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -549,9 +742,36 @@ donne :
encore et encore pour l'exemple\dots
\end{bclogo}
+\subsubsection{Pour les utilisateurs de mathdesign}
+
+Si on utilise une police \textit{mathdesign}, alors on a accès à une barre ondulée, faite avec un glyph répété verticalement, grâce à la commande \texttt{barre = wave}. Voici un exemple :
+
+\begin{Code}
+\begin{lstlisting}[ breaklines=true,breakindent=30pt]
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = wave]{Mon Titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+\end{lstlisting}
+\end{Code}
+
+Ce qui donne :
+\medskip
+\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, barre = wave]{Mon Titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
+ se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
+ encore et encore pour l'exemple\dots
+\end{bclogo}
+
+
\subsubsection{Couleur de la barre}
-Pour les barres \texttt{line}, \texttt{zigzag}, \texttt{snake} et \texttt{motif} (pour motif, seulement si on utilise un motifs issue de \LaTeX{}, caractères, traits\dots), on peut changer la couleur. Pour ce faire, on utilise la commande \texttt{couleurBarre = <ma couleur>}. Par exemple :
+Pour les barres \texttt{line}, \texttt{zigzag}, \texttt{snake}, \texttt{motif} et \texttt{wave} (pour motif, seulement si on utilise un motif provenant de \LaTeX{}, caractères, traits\dots), on peut changer la couleur. Pour ce faire, on utilise la commande \texttt{couleurBarre = <ma couleur>}. Par exemple :
\begin{Code}
\begin{lstlisting}[ breaklines=true,breakindent=30pt]
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, couleurBarre = green!80!blue!60]{Mon Titre}
@@ -563,8 +783,8 @@ Pour les barres \texttt{line}, \texttt{zigzag}, \texttt{snake} et \texttt{motif}
\end{bclogo}
\end{lstlisting}
\end{Code}
-donne :
-
+donne
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion, couleurBarre = red!60!black!100]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -573,7 +793,8 @@ donne :
encore et encore pour l'exemple\dots
\end{bclogo}
-avec \texttt{barre = snake} :
+avec \texttt{barre = snake}
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion,barre = snake, couleurBarre = red!60!black!100]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -599,7 +820,7 @@ Si on ne veut pas de barre verticale sur le côté, il suffit d'utiliser la comm
\end{Code}
donne
-
+\medskip
\begin{bclogo}[couleur = blue!30, arrondi = 0.1, logo = \bcquestion,barre = none]{Mon Titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui
se r\'ep\`ete encore et encore pour l'exemple, du texte qui se r\'ep\`ete
@@ -608,7 +829,35 @@ donne
encore et encore pour l'exemple\dots
\end{bclogo}
-\subsection{Le bord}
+\subsection{Le bord--Épaisseur}
+
+On peut (depuis la version 2.24) régler l'épaisseur du trait de bord grâce à la commande \texttt{epBord=<valeur>} (attention, ne pas mettre d'unité). Par exemple~:
+\begin{Code}
+\begin{lstlisting}
+\begin{bclogo}[logo = \bccrayon, epBord=0.2]{Mon titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du
+ texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple\dots Du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple\dots
+\end{bclogo}
+\end{lstlisting}
+\end{Code}
+Ce qui donne :
+\medskip
+\begin{bclogo}[logo = \bccrayon, epBord=0.2]{Mon titre}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du
+ texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple\dots Du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple\dots
+\end{bclogo}
+\medskip
+Par défaut, l'épaisseur est à 0.8pt.
+
+\subsubsection{Option \texttt{noborder}}
Par défaut, il y a un trait pour délimiter le bord de la boîte, on peut cependant choisir de ne pas en mettre avec l'option \texttt{noborder = true} (par défaut elle est à \texttt{false}).
@@ -625,8 +874,8 @@ Par exemple :
\end{bclogo}
\end{lstlisting}
\end{Code}
-donne :
-
+donne
+\medskip
\begin{bclogo}[logo = \bccrayon, noborder = true]{Mon titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du
texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte
@@ -635,11 +884,11 @@ donne :
r\'ep\`ete encore et encore pour l'exemple, du texte qui se
r\'ep\`ete encore et encore pour l'exemple\dots
\end{bclogo}
-
+\medskip
\noindent Cela ne vous dit rien ?
\noindent Voici un autre exemple, avec de la couleur\dots
-
+\medskip
\begin{bclogo}[logo = \bcbook, noborder = true, couleur = red!30!blue!40]{Mon titre}
Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du
texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte
@@ -649,9 +898,41 @@ donne :
r\'ep\`ete encore et encore pour l'exemple\dots
\end{bclogo}
+\subsection{Les marges}
+
+On peut aussi régler les marges entre l'intérieur de la boîte et le bord. ceci se fait par la commande \texttt{marge= <entier>}. Elle est définie en nombre de points, par défaut \texttt{marge = 3} (ne pas préciser l'unité).
+
+Cette nouvelle commande (due à Patrick \textsc{Fradin} sur une demande de Gaétan \textsc{Marris}) permet, entre autre, de prolonger le texte jusqu'à la marge de la page lorsque \texttt{noborder=true}. Par exemple,
+\medskip
+\begin{Code}
+\begin{lstlisting}
+\noindent\hrule
+\begin{bclogo}[logo = \bccrayon, noborder = true,marge=0]{Mon titre}
+\lipsum[2]
+\end{bclogo}
+\noindent\hrule
+\begin{bclogo}[logo = \bccrayon, noborder = true,marge=8]{Mon titre}
+\lipsum[2]
+\end{bclogo}
+\noindent\hrule
+\end{lstlisting}
+\end{Code}
+
+produit ceci.
+\bigskip
+
+\noindent\hrule
+\begin{bclogo}[logo = \bccrayon, noborder = true,marge=0]{Mon titre}
+\lipsum[2]
+\end{bclogo}
+\noindent\hrule
+\begin{bclogo}[logo = \bccrayon, noborder = true,marge=8]{Mon titre}
+\lipsum[2]
+\end{bclogo}
+\noindent\hrule
\section{Liste des boîtes}
-On peut, comme avec table of contents, lister les boîtes utilisées dans le document et ce grâce à la commande :
+On peut, comme avec \verb+\tableofcontents+, lister les boîtes utilisées dans le document et ce grâce à la commande :
\begin{lstlisting}
\listofbclogo
@@ -669,303 +950,67 @@ Le titre de la liste peut alors être modifié par la commande :
\renewcommand{\titrebclogo}{Liste des fiches}
\end{lstlisting}
-\section{Le code}
+\section{Avec \texttt{framed.sty}}
-\begin{lstlisting}[style=numbers, breaklines=true,breakindent=30pt]
-NeedsTeXFormat{LaTeX2e}
-\def\PackageName{bclogo}
-\def\fileversion{v2.22}
-\def\filedate{2009/15/01}
-\ProvidesPackage{bclogo}
- [\filedate\space\fileversion]
-\RequirePackage{xkeyval,ifthen}
-
-%% Les options globales du package sont au nombre de 2: tikz ou pstricks
-
-\newif\iftikz%
-\define@key{bclogo.sty}{tikz}[]{\tikztrue}%
-\define@key{bclogo.sty}{pstricks}[]{\tikzfalse}%
-\newlength{\logowidth}\setlength{\logowidth}{17pt}%
-\ProcessOptionsX%
-
-\iftikz%
-\RequirePackage{tikz}%
-\usetikzlibrary{shadows}% pour l'ombre
-\usetikzlibrary{decorations.pathmorphing} % pour la barre ondulee
-\else%
-\RequirePackage{graphicx}%
-\RequirePackage{pstricks}%
-\RequirePackage{pst-grad}%
-\RequirePackage{pst-coil}% pour la barre ondulee
-\fi%
-% les symboles
-% ==============================================================================
-
-% si l'option tikz est chargee
-\iftikz%
-% la fleur
-\newcommand\bcfleur{\includegraphics[width=\logowidth]{bc-fleur}}
-% une note (Thomas Labarussias)
-\newcommand\bcnote{\includegraphics[width=\logowidth]{bc-note}}
-% panneau chantier (Jean-Michel Sarlat)
-\newcommand\bcpanchant{\includegraphics[width=\logowidth]{bc-aux-301}}
-% ours
-\newcommand\bcours{\includegraphics[width=\logowidth]{bc-ours}}
-% etoile
-\newcommand\bcetoile{\includegraphics[width=\logowidth]{bc-etoile}}
-% attention
-\newcommand\bcattention{\includegraphics[width=\logowidth]{bc-attention}}
-% attention P.Fradin
-\newcommand\bctakecare{\begingroup\input{bc-takecare.pgf}\endgroup}
-% lampe P.Fradin
-\newcommand\bclampe{\begingroup\input{bc-lampe.pgf}\endgroup}
-% coeur
-\newcommand\bccoeur{\includegraphics[width=\logowidth]{bc-coeur}}
-% ornement (tire du site http://openclipart.org )
-\newcommand\bcorne{\includegraphics[width=\logowidth]{bc-orne}}
-% danger (Francois)
-\newcommand\bcdanger{\includegraphics[width=\logowidth]{bc-danger}}
-% smiley bonne humeur (Francois)
-\newcommand\bcsmbh{\includegraphics[width=\logowidth]{bc-smiley_bonnehumeur}}
-% smiley bonne humeur (Francois)
-\newcommand\bcsmmh{\includegraphics[width=\logowidth]{bc-smiley_mauvaisehumeur}}
-% le trefle
-\newcommand\bctrefle{\includegraphics[width=\logowidth]{bc-trefle}}
-% le livre
-\newcommand\bcbook{\begingroup\input{bc-book.pgf}\endgroup}
-% point d'interrogation
-\newcommand\bcquestion{\includegraphics[width=\logowidth]{bc-inter}}
-% crayon anne-sophie philippe
-\newcommand\bccrayon{\includegraphics[width=\logowidth]{bc-crayon}}
-% le pic LaTeX
-\newcommand\bcspadesuit{\centering \huge $\spadesuit$}
-
-
-% si l'option pstricks (par defaut)
-\else
-% la fleur
-\newcommand\bcfleur{\begingroup\input{bc-fleur.tex}\endgroup}
-% une note (Thomas Labarussias)
-\newcommand\bcnote{\begingroup\input{bc-note.tex}\endgroup}
-% panneau chantier (Jean-Michel Sarlat)
-\newcommand\bcpanchant{\includegraphics[width=\logowidth]{bc-aux-301.eps}}
-% ours
-\newcommand\bcours{\begingroup\input{bc-ours.tex}\endgroup}
-% etoile
-\newcommand\bcetoile{\begingroup\input{bc-etoile.tex}\endgroup}
-% attention
-\newcommand\bcattention{\begingroup\input{bc-attention.tex}\endgroup}
-% attention P.Fradin
-\newcommand\bctakecare{\begingroup\input{bc-takecare.pst}\endgroup}
-% lampe P.Fradin
-\newcommand\bclampe{\begingroup\input{bc-lampe.pst}\endgroup}
-% coeur
-\newcommand\bccoeur{\begingroup\input{bc-coeur.tex}\endgroup}
-% ornement (tire du site http://openclipart.org )
-\newcommand\bcorne{\begingroup\input{bc-orne.tex}\endgroup}
-% danger (Francois)
-\newcommand\bcdanger{\begingroup\input{bc-danger.tex}\endgroup}
-% smiley bonne humeur (Francois)
-\newcommand\bcsmbh{\begingroup\input{bc-smiley_bonnehumeur.tex}\endgroup}
-% smiley bonne humeur (Francois)
-\newcommand\bcsmmh{\begingroup\input{bc-smiley_mauvaisehumeur.tex}\endgroup}
-% le trefle
-\newcommand\bctrefle{\begingroup\input{bc-trefle.tex}\endgroup}
-% le livre
-\newcommand\bcbook{\begingroup\input{bc-book.pst}\endgroup}
-% point d'interrogation
-\newcommand\bcquestion{\begingroup\input{bc-inter.tex}\endgroup}
-% crayon anne-sophie philippe
-\newcommand\bccrayon{\begingroup\input{bc-crayon.tex}\endgroup}
-% le pic LaTeX
-\newcommand\bcspadesuit{\centering \huge $\spadesuit$}
-
-\fi
-
-
-% =========================== La fonction listable =============================
-
-\newcommand{\titrebclogo}{Liste des \texttt{bclogo}}
-\newcommand\bccaption[1]{\addcontentsline{bcl}{bclogo}{#1}}
-\newcommand\listofbclogo{\section*{\titrebclogo}\@starttoc{bcl}}
-\newcommand\l@bclogo[2]{\par\noindent #1,~\textit{page~#2}}
-\newcounter{bclogocompteur} % idee de Francois Petiard
-
-% ======================================= les keys =============================
-
-\newlength{\val@epBarre} % on definit une longueur : l'epaisseur de la barre
-\newlength{\val@tailleOndu} % on definit une longueur : taille d'une ondulation
-\define@key{bclogo}{logo}[\bcfleur]{\def\val@logo{#1}}
-\define@key{bclogo}{couleur}[white]{\def\val@couleur{#1}}
-\define@key{bclogo}{arrondi}[0]{\def\val@arrondi{#1}}
-\define@key{bclogo}{epOmbre}[0.125]{\def\val@epOmbre{#1}}
-\define@key{bclogo}{arrondi}[0]{\def\val@arrondi{#1}}
-\define@key{bclogo}{couleurOmbre}[black]{\def\val@couleurOmbre{#1}}
-\define@key{bclogo}{couleurBarre}[black]{\def\val@couleurBarre{#1}}
-\define@key{bclogo}{imageBarre}[]{\def\val@imageBarre{#1}}
-\define@key{bclogo}{motifBarre}[*]{\def\val@motifBarre{#1}}
-\define@key{bclogo}{epBarre}[1.5]{\setlength{\val@epBarre}{#1 pt}}
-\define@key{bclogo}{tailleOndu}[2.5]{\setlength{\val@tailleOndu}{#1 pt}}
-\define@boolkey{bclogo}{cadreTitre}[true]{}
-\define@boolkey{bclogo}{noborder}[true]{}
-\define@boolkey{bclogo}{ombre}[true]{}
-\define@boolkey{bclogo}{avecBarre}[true]{}
-\define@choicekey{bclogo}{barre}{none,line,snake,motif,zigzag,imageExt,imageClip}[line]{%
-\ifthenelse{\equal{#1}{none}}{\KV@bclogo@avecBarrefalse}%
-{\def\bc@barre{\@nameuse{bc@barre#1}}}%
-}%
-
-
-
-% selection par defaut
-\presetkeys{bclogo}{logo,barre,couleur,arrondi,couleurOmbre,couleurBarre,epOmbre,epBarre,tailleOndu,ombre=false,cadreTitre=false, avecBarre = true,noborder=false}{}%
-
-% les differente commande de barre vertical a gauche
-
-\newcommand{\bc@barreline}{\color{\val@couleurBarre}\vrule width \val@epBarre}%
-
-\newcommand{\bc@barremotif}{%
-\begin{minipage}{\logowidth}\color{\val@couleurBarre}\centering%
-\vbox to \invboxh{\cleaders\vbox{\vss \val@motifBarre \vss}\vfill}%
-\end{minipage}}
-
-
-\newcommand{\bc@barresnake}{%
-\begin{minipage}{\logowidth}\centering
-\iftikz
-\begin{tikzpicture}[decoration={snake,segment length=2.66\val@tailleOndu, amplitude=\val@tailleOndu}]
-\draw[decorate,line width=1pt, color=\val@couleurBarre](0,\invboxh)--(0,0);\end{tikzpicture}%
-\else
-\psset{unit=1pt}
-\begin{pspicture}(0,0)(0,\invboxh)
-\pszigzag[coilarm=0pt,coilwidth=2\val@tailleOndu,linewidth=1pt, linearc=1pt,coilheight=1.33,linecolor=\val@couleurBarre](0,\invboxh)(0,0)
-\end{pspicture}%
-\fi
-\end{minipage}}%
-
-\newcommand{\bc@barrezigzag}{%
-\begin{minipage}{\logowidth}\centering
-\iftikz
-\begin{tikzpicture}[decoration={zigzag,segment length=2.66\val@tailleOndu, amplitude=\val@tailleOndu}]
-\draw[decorate,line width=1pt,color=\val@couleurBarre](0,\invboxh)--(0,0);\end{tikzpicture}%
-\else
-\psset{unit=1pt}
-\begin{pspicture}(0,0)(0,\invboxh)
-\pszigzag[coilarm=0pt,coilwidth=2\val@tailleOndu,linewidth=1pt,coilheight=1.33,linecolor=\val@couleurBarre](0,\invboxh)(0,0)
-\end{pspicture}%
-\fi
-\end{minipage}}%
-
-\newcommand{\bc@barreimageExt}{% l'image est deformee
-\begin{minipage}{\logowidth}\centering
-\includegraphics[width=\logowidth,height=\invboxh]{\val@imageBarre}
-\end{minipage}
-}%
-
-\newcommand{\bc@barreimageClip}{%
-\begin{minipage}{\logowidth}\centering
-\includegraphics[viewport=0 0 \logowidth~ \invboxh,%
-clip=true]{\val@imageBarre}%
-\end{minipage}
-}%
-
-
-%======================= Quelques definitions===================================
-% boite globale
-\newsavebox{\envbox}
-% boite interieure la ligne 2 du tableau barre + texte
-\newsavebox{\invbox}
-% pour la hauteur de la boite
-\newlength{\invboxh}\newlength{\invboxd}
-%%% precaution JCC
-\newcommand*\bclogotitre{}
-\newlength{\pgfframesep}
-\setlength{\pgfframesep}{\iftikz3pt\else\psframesep\fi}
-
-%======================= L'environnement =======================================
-
-\newenvironment*{bclogo}[2][]{%
- \setkeys{bclogo}{#1}%on recupere les options
- \par\noindent% attention au retrait d'alinea
- % on definit les commandes qui seront utilisees dans la seconde
- % parti de l'environnement
- % la commande pour le titre
- \renewcommand*\bclogotitre{#2}
- % La commande pour les coins arrondis
- \newcommand{\arr}{\val@arrondi}
- % deux types de titres
- \ifKV@bclogo@cadreTitre% si cadreTitre = true
- \newcommand{\structitre}{%
- \iftikz% cadreTitre tizk
- \hfil
- \begin{tikzpicture}\node[rectangle, thick, top color=red!60!green!40, bottom color=white,draw]{\large #2};
- \end{tikzpicture}%
- \hfil%
- \else% cadreTitre pstricks
- \hfil
- \psframebox[fillstyle=gradient,gradmidpoint=0.2, gradangle=0,gradbegin=red!60!green!40, gradend=white]{\large #2}%
- \hfil%
- \fi%
- }
- \else %sinon cadreTitre = false
- \newcommand{\structitre}{\large \textbf{#2}}%
- \fi%
- \begin{lrbox}{\invbox}%
-\begin{minipage}{\dimexpr\linewidth-2\pgfframesep-4pt-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt\fi\relax}%
-}%
-{%
-\end{minipage}%
-\end{lrbox}%
-
-% calcul de la hauteur totale de la boite intereure
-\settoheight{\invboxh}{\usebox{\invbox}}%
-\settodepth{\invboxd}{\usebox{\invbox}}%
-\addtolength{\invboxh}{\invboxd}%
-
- % on commence la boite interieur ou est le texte et la barre vertical
- \begin{lrbox}{\envbox}%
- \begin{tabular}{@{}c@{}p{\dimexpr\linewidth-2
-\pgfframesep-4pt-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt
-\fi}@{}}
- \begin{minipage}{\logowidth}{\refstepcounter{bclogocompteur}\bccaption{\bclogotitre}\val@logo}\end{minipage}&%
- \ifKV@bclogo@cadreTitre%
- \begin{minipage}{\dimexpr\linewidth-2
- \pgfframesep-4pt-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt
- \fi}{\structitre}\end{minipage}%
- \else\structitre\fi\\%
- \ifKV@bclogo@avecBarre% si il y a une barre verticale
- \bc@barre&\usebox{\invbox}%
- \else% sinon
- \multicolumn{2}{c}{\usebox{\invbox}}%
- \fi%
- \end{tabular}%
- \end{lrbox}%
-
-% Affiche l'ensemble dans un cadre en couleur.
- \iftikz% tikz
- \par\noindent
- \begin{tikzpicture}%
- \ifKV@bclogo@ombre%cadre ombre
- \node[fill=\val@couleur,thick, shape=rectangle, inner sep=\pgfframesep, rounded corners=\arr cm,%
- general shadow={fill=\val@couleurOmbre},shadow xshift=\val@epOmbre cm, shadow yshift=-\val@epOmbre cm, draw=\ifKV@bclogo@noborder none\else black\fi]{\usebox{\envbox}};
- \else%cadre sans ombre
- \node[fill=\val@couleur,thick, shape=rectangle, inner sep=\pgfframesep,rounded corners=\arr cm, draw=\ifKV@bclogo@noborder none\else black\fi]{\usebox{\envbox}};
- \fi
- \end{tikzpicture}
- \par%
- \else% pstricks
- \noindent
- \ifKV@bclogo@ombre%cadre ombre
- \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2,fillstyle=solid, shadow=true, shadowsize=\val@epOmbre cm,%
- shadowcolor=\val@couleurOmbre, fillcolor=\val@couleur,linestyle=\ifKV@bclogo@noborder none\else solid\fi]{\usebox{\envbox}}
- \else%cadre sans ombre
- \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2 ,fillstyle=solid, fillcolor=\val@couleur,linestyle=\ifKV@bclogo@noborder none\else solid\fi]{\usebox{\envbox}}
- \fi%
- \par\vspace*{0.2cm}
- \fi%fin
- \ifKV@bclogo@ombre\vspace*{\val@epOmbre cm}\fi
-}%
+Je présente ici une utilisation de \texttt{bclogo} \emph{couplée} avec un environnement écrit par Jean-Michel \textsc{Sarlat} utilisant \texttt{framed.sty}. Voici cet environnement :
+
+\begin{Code}
+\begin{lstlisting}
+\newenvironment{gbar}[1]{%
+ \def\FrameCommand{{\color{#1}\vrule width 3pt}\colorbox{fbase}}%
+ \MakeFramed {\advance\hsize-\width \FrameRestore}}%
+{\endMakeFramed}
+\end{lstlisting}
+\end{Code}
+
+En disposant cet environnement, on s'amuser à mélanger les deux :
+\begin{Code}
+\begin{lstlisting}
+\begin{bclogo}[logo=\bcinfo,barre = none,noborder=true]{Test avec
+ \texttt{framed.sty}}%
+\begin{gbar}{yellow}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du
+ texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple\dots Du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple\dots
+\end{gbar}
+\end{bclogo}
\end{lstlisting}
+\end{Code}
+
+Ce qui donne
+\medskip
+
+\begin{bclogo}[logo=\bcinfo,barre = none,noborder=true]{Test avec \texttt{framed.sty}}%
+\begin{gbar}{yellow}
+ Du texte qui se r\'ep\`ete encore et encore pour l'exemple, du
+ texte qui se r\'ep\`ete encore et encore pour l'exemple, du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple\dots Du texte
+ qui se r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple, du texte qui se
+ r\'ep\`ete encore et encore pour l'exemple\dots
+\end{gbar}
+\end{bclogo}
+
+\subsection{Réglage global des paramètres}
+
+On peut régler les paramètres pour toutes les boîtes \texttt{bclogo}. Pour cela on utilise la commande
+\begin{lstlisting}
+\presetkeys{bclogo}{<liste des parametres>}{}
+\end{lstlisting}
+Par exemple~:
+\begin{lstlisting}
+\presetkeys{bclogo}{ombre=true, epBord=1pt}{}
+\end{lstlisting}
+
+\section{Le code}
+
+%\begin{lstlisting}[style=numbers, breaklines=true,breakindent=30pt]
+\lstset{style=numbers, breaklines=true,breakindent=30pt}
+\lstinputlisting{../bclogo.sty}
+%\end{lstlisting}
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcneige.eps b/Master/texmf-dist/doc/latex/bclogo/bcneige.eps
new file mode 100644
index 00000000000..20864335a71
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcneige.eps
@@ -0,0 +1,182 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 21
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%Neige (Utilisateur)
+1 setlinejoin
+0.6784 0.8471 0.902 rgb
+thicklines
+8.5 10.815 m 16.9998 15.7224 l
+s
+14.1665 14.0866 m 16.9998 12.4509 l
+s
+14.1665 14.0866 m 14.1665 17.3582 l
+s
+11.3333 12.4508 m 12.7499 11.6329 l
+s
+11.3333 12.4508 m 11.3332 14.0866 l
+s
+8.5 10.815 m 8.4999 20.6297 l
+s
+8.4999 17.3581 m 11.3332 18.9939 l
+s
+8.4999 17.3581 m 5.6666 18.9939 l
+s
+8.5 14.0865 m 9.9166 14.9044 l
+s
+8.5 14.0865 m 7.0833 14.9044 l
+s
+8.5 10.815 m 0.0001 15.7222 l
+s
+2.8334 14.0865 m 2.8334 17.358 l
+s
+2.8334 14.0865 m 0.0002 12.4506 l
+s
+5.6667 12.4507 m 5.6667 14.0865 l
+s
+5.6667 12.4507 m 4.2501 11.6328 l
+s
+8.5 10.815 m 0.0002 5.9075 l
+s
+2.8335 7.5433 m 0.0002 9.1791 l
+s
+2.8335 7.5433 m 2.8335 4.2717 l
+s
+5.6668 9.1791 m 4.2501 9.997 l
+s
+5.6668 9.1791 m 5.6668 7.5433 l
+s
+8.5 10.815 m 8.5001 1.0002 l
+s
+8.5001 4.2718 m 5.6668 2.636 l
+s
+8.5001 4.2718 m 11.3334 2.636 l
+s
+8.5 7.5434 m 7.0834 6.7255 l
+s
+8.5 7.5434 m 9.9167 6.7255 l
+s
+8.5 10.815 m 16.9999 5.9077 l
+s
+14.1666 7.5434 m 14.1666 4.2719 l
+s
+14.1666 7.5434 m 16.9998 9.1793 l
+s
+11.3333 9.1792 m 11.3333 7.5434 l
+s
+11.3333 9.1792 m 12.7499 9.9971 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcneige.pdf b/Master/texmf-dist/doc/latex/bclogo/bcneige.pdf
new file mode 100644
index 00000000000..45e53f3cb39
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcneige.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcoctaedre.eps b/Master/texmf-dist/doc/latex/bclogo/bcoctaedre.eps
new file mode 100644
index 00000000000..9913f7f300c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcoctaedre.eps
@@ -0,0 +1,184 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 18
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%Octaedre (Utilisateur)
+1 setlinecap
+1 setlinejoin
+0.5176 0.0471 0.1412 rgb
+0.1 setlinewidth
+8.3148 17.6663 m 15.4086 11.4854 l 2.8147 12.0965 l closepath
+gs 0.5176 0.0471 0.1412 rgb fill gr s
+0.8431 0.0784 0.2314 rgb
+8.3148 1.0862 m 2.8147 12.0965 l 15.4086 11.4854 l closepath
+gs 0.8431 0.0784 0.2314 rgb fill gr s
+0.3451 0.0314 0.0941 rgb
+8.3148 1.0862 m 1.221 7.2671 l 2.8147 12.0965 l closepath
+gs 0.3451 0.0314 0.0941 rgb fill gr s
+0.1647 0.0157 0.0431 rgb
+8.3148 1.0862 m 15.4086 11.4854 l 13.815 6.656 l closepath
+gs 0.1647 0.0157 0.0431 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+8.3148 1.0862 m 2.8147 12.0965 l
+s
+15.4086 11.4854 m 2.8147 12.0965 l
+s
+15.4086 11.4854 m 8.3148 1.0862 l
+s
+0.5176 0.0471 0.1412 rgb
+0.1 setlinewidth
+8.3148 1.0862 m 13.815 6.656 l 1.221 7.2671 l closepath
+gs 0.5176 0.0471 0.1412 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+8.3148 1.0862 m 1.221 7.2671 l
+s
+8.3148 1.0862 m 13.815 6.656 l
+s
+0.3451 0.0314 0.0941 rgb
+0.1 setlinewidth
+8.3148 17.6663 m 13.815 6.656 l 15.4086 11.4854 l closepath
+gs 0.3451 0.0314 0.0941 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+15.4086 11.4854 m 8.3148 17.6663 l
+s
+13.815 6.656 m 15.4086 11.4854 l
+s
+0.8431 0.0784 0.2314 rgb
+0.1 setlinewidth
+8.3148 17.6663 m 1.221 7.2671 l 13.815 6.656 l closepath
+gs 0.8431 0.0784 0.2314 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+1.221 7.2671 m 13.815 6.656 l
+s
+13.815 6.656 m 8.3148 17.6663 l
+s
+0.1647 0.0157 0.0431 rgb
+0.1 setlinewidth
+8.3148 17.6663 m 2.8147 12.0965 l 1.221 7.2671 l closepath
+gs 0.1647 0.0157 0.0431 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+2.8147 12.0965 m 1.221 7.2671 l
+s
+8.3148 17.6663 m 2.8147 12.0965 l
+s
+1.221 7.2671 m 8.3148 17.6663 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcoctaedre.pdf b/Master/texmf-dist/doc/latex/bclogo/bcoctaedre.pdf
new file mode 100644
index 00000000000..c4bc1be6bbe
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcoctaedre.pdf
@@ -0,0 +1,80 @@
+%PDF-1.4
+%쏢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xMn `8ARRUɢ"/`n PEQx͛7?JH.^^(z<0DhULSΑ F!bkMh^b4?M71E06q=b]J$d0gL䖔2ӥEv:5d5fpāN6@0!V!Hvlnr{btC&uo@p4,S7}l]o6e[5綥 YmS7jKejSZGB ,SWMX/BY@esgo:a}`Nc"4yn6j}VEj;7[u؆Gly({~WB]!5[B5ROkoQ
+endstream
+endobj
+6 0 obj
+363
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 17 18]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ExtGState 8 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 9 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+8 0 obj
+<</R7
+7 0 R>>
+endobj
+9 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1274>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='940c549f-a77a-11de-0000-18154aca9a07' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='MiKTeX GPL Ghostscript 8.60'/>
+<rdf:Description rdf:about='940c549f-a77a-11de-0000-18154aca9a07' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:ModifyDate='2009-09-19T13:19:37Z' xap:CreateDate='2009-09-19T13:19:37Z'><xap:CreatorTool>TeXgraph</xap:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='940c549f-a77a-11de-0000-18154aca9a07' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='940c549f-a77a-11de-0000-18154aca9a07'/>
+<rdf:Description rdf:about='940c549f-a77a-11de-0000-18154aca9a07' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(MiKTeX GPL Ghostscript 8.60)
+/CreationDate(D:20090919131937Z)
+/ModDate(D:20090919131937Z)
+/Creator(TeXgraph)>>endobj
+xref
+0 10
+0000000000 65535 f
+0000000655 00000 n
+0000002139 00000 n
+0000000596 00000 n
+0000000467 00000 n
+0000000015 00000 n
+0000000448 00000 n
+0000000719 00000 n
+0000000760 00000 n
+0000000789 00000 n
+trailer
+<< /Size 10 /Root 1 0 R /Info 2 0 R
+/ID [<43459A2C85F6E8100F122CF7E37AF9CA><43459A2C85F6E8100F122CF7E37AF9CA>]
+>>
+startxref
+2276
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcpluie.eps b/Master/texmf-dist/doc/latex/bclogo/bcpluie.eps
new file mode 100644
index 00000000000..096e856d166
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcpluie.eps
@@ -0,0 +1,96 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 3 18 16
+%%HiResBoundingBox: 0.177344 3.370703 17.889844 15.300781
+%.............................................
+%%Creator: AFPL Ghostscript 853 (epswrite)
+%%CreationDate: 2009/09/23 11:38:33
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+% This copyright applies to everything between here and the %%EndProlog:
+% Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
+%%BeginResource: procset GS_epswrite_2_0_1001
+/GS_epswrite_2_0_1001 80 dict dup begin
+/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
+4 index eq and{ pop pop pop}{ PageSize dup 1
+5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
+{ pop/setpagedevice where
+{ pop 1 dict dup /PageSize PageSize put setpagedevice}
+{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
+setpage}if}ifelse}ifelse}ifelse} bind def
+/!{bind def}bind def/#{load def}!/N/counttomark #
+/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
+/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
+/w/setlinewidth #/J/setlinecap #
+/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
+/m/moveto #/l/lineto #/c/rcurveto #
+/p{N 2 idiv{N -2 roll rlineto}repeat}!
+/P{N 0 gt{N -2 roll moveto p}if}!
+/h{p closepath}!/H{P closepath}!
+/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
+/re{4 -2 roll m exch dup lx exch ly neg lx h}!
+/^{3 index neg 3 index neg}!
+/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
+/q/gsave #/Q/grestore #/rf{re fill}!
+/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
+/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
+/|{exch string readstring |=}!
+/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
+/@/currentfile #/${+ @ |}!
+/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
+3 1 roll}repeat pop pop true}!
+/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
+/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
+/Ic{exch Ix false 3 colorimage}!
+/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
+/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
+/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
+/@F{@ &2<<F}!/@C{@X &2 FX}!
+/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
+/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
+/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
+currentdict end image}!
+/~{@ read {pop} if}!
+end readonly def
+%%EndResource
+/pagesave null def
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+GS_epswrite_2_0_1001 begin
+/pagesave save store 197 dict begin
+0.1 0.1 scale
+%%EndPageSetup
+gsave mark
+Q q
+0 0 180 0 0 187 ^ Y
+218 G
+13.11 75.31 m
+4.38 -11.67 142.75 -8.8 151.58 0 c
+28.24 28.13 -7.95 63.3 -35.27 34.28 c
+-9.56 48.48 -66.92 52.58 -75.11 10.93 c
+-38.24 1.37 -48.2 -26.55 -41.2 -45.2 c
+f
+7.9701 w
+1 j
+185 G
+13.11 75.31 m
+4.38 -11.67 142.75 -8.8 151.58 0 c
+28.24 28.13 -7.95 63.3 -35.27 34.28 c
+-9.56 48.48 -66.92 52.58 -75.11 10.93 c
+-38.24 1.37 -48.2 -26.55 -41.2 -45.2 c
+h
+S
+183 G
+22.89 63.84 -17.75 -28 S
+49.34 63.84 -17.75 -28 S
+75.78 63.84 -17.75 -28 S
+102.23 63.84 -17.75 -28 S
+128.67 63.84 -17.75 -28 S
+155.12 63.84 -17.75 -28 S
+cleartomark end end pagesave restore
+ showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcpluie.pdf b/Master/texmf-dist/doc/latex/bclogo/bcpluie.pdf
new file mode 100644
index 00000000000..e6e5cd214d9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcpluie.pdf
@@ -0,0 +1,68 @@
+%PDF-1.4
+%
+3 0 obj
+<< /pgfprgb [/Pattern /DeviceRGB] >>
+endobj
+6 0 obj <<
+/Length 294
+/Filter /FlateDecode
+>>
+stream
+xe=N@ fk[ ǓeWFay
+uVjmಖYP~.r|$^ z/s=1H`'t4MKG2 0faڃО?vXv sp̤J0$^QkDRZF.9t#TV~`fƝPKS Oqja{:.3\֍QLr\(w2t Nى+9+2`=#}ώ7+Yܡޕ}B K?z
+endstream
+endobj
+5 0 obj <<
+/Type /Page
+/Contents 6 0 R
+/Resources 4 0 R
+/MediaBox [0 0 18.002 18.748]
+/Parent 7 0 R
+>> endobj
+4 0 obj <<
+ /ColorSpace 3 0 R /Pattern 2 0 R /ExtGState 1 0 R
+/ProcSet [ /PDF ]
+>> endobj
+1 0 obj
+<<>>
+endobj
+2 0 obj
+<<>>
+endobj
+7 0 obj <<
+/Type /Pages
+/Count 1
+/Kids [5 0 R]
+>> endobj
+8 0 obj <<
+/Type /Catalog
+/Pages 7 0 R
+>> endobj
+9 0 obj <<
+/Producer (MiKTeX pdfTeX-1.40.9)
+/Creator (TeX)
+/CreationDate (D:20090923113654+02'00')
+/ModDate (D:20090923113654+02'00')
+/Trapped /False
+/PTEX.Fullbanner (This is MiKTeX-pdfTeX 2.7.3147 (1.40.9))
+>> endobj
+xref
+0 10
+0000000000 65535 f
+0000000641 00000 n
+0000000661 00000 n
+0000000015 00000 n
+0000000550 00000 n
+0000000440 00000 n
+0000000067 00000 n
+0000000681 00000 n
+0000000738 00000 n
+0000000787 00000 n
+trailer
+<< /Size 10
+/Root 8 0 R
+/Info 9 0 R
+/ID [<0121872B17E0B69C9FF27FC27A43F374> <0121872B17E0B69C9FF27FC27A43F374>] >>
+startxref
+1006
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcpoisson.eps b/Master/texmf-dist/doc/latex/bclogo/bcpoisson.eps
new file mode 100644
index 00000000000..8b558f65ed7
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcpoisson.eps
@@ -0,0 +1,167 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 18 12
+%%HiResBoundingBox: 0.061719 0.093359 17.901563 11.668359
+%.............................................
+%%Creator: AFPL Ghostscript 853 (epswrite)
+%%CreationDate: 2009/09/15 09:37:50
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+% This copyright applies to everything between here and the %%EndProlog:
+% Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
+%%BeginResource: procset GS_epswrite_2_0_1001
+/GS_epswrite_2_0_1001 80 dict dup begin
+/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
+4 index eq and{ pop pop pop}{ PageSize dup 1
+5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
+{ pop/setpagedevice where
+{ pop 1 dict dup /PageSize PageSize put setpagedevice}
+{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
+setpage}if}ifelse}ifelse}ifelse} bind def
+/!{bind def}bind def/#{load def}!/N/counttomark #
+/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
+/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
+/w/setlinewidth #/J/setlinecap #
+/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
+/m/moveto #/l/lineto #/c/rcurveto #
+/p{N 2 idiv{N -2 roll rlineto}repeat}!
+/P{N 0 gt{N -2 roll moveto p}if}!
+/h{p closepath}!/H{P closepath}!
+/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
+/re{4 -2 roll m exch dup lx exch ly neg lx h}!
+/^{3 index neg 3 index neg}!
+/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
+/q/gsave #/Q/grestore #/rf{re fill}!
+/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
+/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
+/|{exch string readstring |=}!
+/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
+/@/currentfile #/${+ @ |}!
+/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
+3 1 roll}repeat pop pop true}!
+/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
+/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
+/Ic{exch Ix false 3 colorimage}!
+/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
+/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
+/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
+/@F{@ &2<<F}!/@C{@X &2 FX}!
+/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
+/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
+/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
+currentdict end image}!
+/~{@ read {pop} if}!
+end readonly def
+%%EndResource
+/pagesave null def
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+GS_epswrite_2_0_1001 begin
+/pagesave save store 197 dict begin
+0.1 0.1 scale
+%%EndPageSetup
+gsave mark
+Q q
+0 0 180 0 0 118 ^ Y
+192 G
+104.69 101.73 m
+1.93 6.54 -3.08 11.93 -6.54 10.77 c
+-21.93 -4.62 -26.17 -4.23 -43.48 -18.86 c
+7.31 -3.08 5.3 -4.46 3.85 -10.01 c
+f
+7.9701 w
+1 j
+128 G
+104.69 101.73 m
+1.93 6.54 -3.08 11.93 -6.54 10.77 c
+-21.93 -4.62 -26.17 -4.23 -43.48 -18.86 c
+7.31 -3.08 5.3 -4.46 3.85 -10.01 c
+S
+192 G
+5.04 89.35 0 -67.81 P
+14.72 14.72 45.73 78.86 102.51 79.91 c
+29.45 0.54 69.91 -25.23 67.29 -49.41 c
+-2.5 -23 -39.95 -38.87 -66.76 -38.37 c
+-56.77 1.05 -75.17 52.57 -103.03 75.7 c
+f
+128 G
+5.04 89.35 0 -67.81 P
+14.72 14.72 45.73 78.86 102.51 79.91 c
+29.45 0.54 69.91 -25.23 67.29 -49.41 c
+-2.5 -23 -39.95 -38.87 -66.76 -38.37 c
+-56.77 1.05 -75.17 52.57 -103.03 75.7 c
+h
+S
+255 G
+149.94 73.05 m
+0 4.86 -3.89 8.75 -8.75 8.75 c
+-4.86 0 -8.75 -3.89 -8.75 -8.75 c
+0 -4.86 3.89 -8.75 8.75 -8.75 c
+4.86 0 8.75 3.89 8.75 8.75 c
+h
+f
+0.9962 w
+K
+149.94 73.05 m
+0 4.86 -3.89 8.75 -8.75 8.75 c
+-4.86 0 -8.75 -3.89 -8.75 -8.75 c
+0 -4.86 3.89 -8.75 8.75 -8.75 c
+4.86 0 8.75 3.89 8.75 8.75 c
+h
+141.2 73.05 S
+146.3 73.58 m
+0 1.96 -1.57 3.53 -3.53 3.53 c
+-1.96 0 -3.53 -1.57 -3.53 -3.53 c
+0 -1.96 1.57 -3.53 3.53 -3.53 c
+1.96 0 3.53 1.57 3.53 3.53 c
+h
+f
+146.3 73.58 m
+0 1.96 -1.57 3.53 -3.53 3.53 c
+-1.96 0 -3.53 -1.57 -3.53 -3.53 c
+0 -1.96 1.57 -3.53 3.53 -3.53 c
+1.96 0 3.53 1.57 3.53 3.53 c
+h
+142.77 73.58 S
+255 G
+158.69 28.84 m
+-10.05 2.45 -16.31 5.52 -26.98 22.32 c
+-0.12 -14.84 3.74 -28.03 9.44 -31.27 c
+12.14 5.03 9.5 4 17.54 8.95 c
+f
+K
+158.69 28.84 m
+-10.05 2.45 -16.31 5.52 -26.98 22.32 c
+-0.12 -14.84 3.74 -28.03 9.44 -31.27 c
+12.14 5.03 9.5 4 17.54 8.95 c
+h
+S
+138.17 22.82 15 7.54 S
+135.96 26.55 12.71 6.02 S
+134.44 30.74 10.05 4.49 S
+133.3 34.77 7.99 3.58 S
+132.46 39.57 5.86 2.21 S
+131.85 44.9 3.2 1.14 S
+192 G
+82.88 35.59 m
+-11.17 -4.49 -23.6 -13.77 -16.09 -18.2 c
+16.51 -9.73 22.87 -10.62 40.64 -12.28 c
+11.81 -1.1 10.27 8.34 5.93 24.98 c
+f
+7.9701 w
+128 G
+82.88 35.59 m
+-11.17 -4.49 -23.6 -13.77 -16.09 -18.2 c
+16.51 -9.73 22.87 -10.62 40.64 -12.28 c
+11.81 -1.1 10.27 8.34 5.93 24.98 c
+S
+127.39 98.65 m
+-17.32 -18.47 -28.48 -56.95 2.31 -82.35 c
+S
+cleartomark end end pagesave restore
+ showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcpoisson.pdf b/Master/texmf-dist/doc/latex/bclogo/bcpoisson.pdf
new file mode 100644
index 00000000000..3b62d9b472d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcpoisson.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcrosevents.eps b/Master/texmf-dist/doc/latex/bclogo/bcrosevents.eps
new file mode 100644
index 00000000000..60fcf56f795
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcrosevents.eps
@@ -0,0 +1,2653 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 15:47:10 2009
+%%BoundingBox: 71 701 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcrosevents.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1547
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 150 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 150 a
+0 150 142 151 v 142 150 a
+ currentpoint grestore moveto
+ 142 150 a 71 71 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.2 SLW 0 0 0 setrgbcolor 0 360 6.82837 6.82837
+0.0 0.0 Ellipse closepath gsave 0.2 SLW 0 0 0 setrgbcolor 1. .setopacityalpha
+ 0 setlinecap stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 0.0 1.70709 5.43198
+5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 1.70709 0.0 5.43198
+5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -1.70709 0.0 -5.43198
+5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 0.0 1.70709 -5.43198
+5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 0.0 -1.70709 -5.43198
+-5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -1.70709 0.0 -5.43198
+-5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 1.70709 0.0 5.43198
+-5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 0.0 -1.70709 5.43198
+-5.43198 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin NArray
+n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt
+{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1
+x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div
+def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha
+y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11
+sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos
+mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known
+{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1.
+ 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 1.20709 1.20709
+8.53546 0.0 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 1.20709 -1.20709
+8.53546 0.0 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -1.20709 1.20709
+0.0 8.53546 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 1.20709 1.20709
+0.0 8.53546 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -1.20709 -1.20709
+-8.53546 0.0 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -1.20709 1.20709
+-8.53546 0.0 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ 1.20709 -1.20709
+0.0 -8.53546 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 0 0 0 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.1 SLW 0 0 0 setrgbcolor [ -1.20709 -1.20709
+0.0 -8.53546 0.0 0.0 /Lineto /lineto load def false 1 setlinejoin
+NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{
+n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1
+ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1
+add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5
+ 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length
+x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos
+ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha
+cos ArrowPos mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside
+known { ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos
+1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos
+ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11
+sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside
+} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11
+ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll
+2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def
+/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath
+} ifelse gsave 1 1 1 setrgbcolor 1. .setopacityalpha fill grestore
+gsave 0.1 SLW 0 0 0 setrgbcolor 1. .setopacityalpha 0 setlinecap
+stroke grestore end
+
+@endspecial
+eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcrosevents.pdf b/Master/texmf-dist/doc/latex/bclogo/bcrosevents.pdf
new file mode 100644
index 00000000000..6caa0169851
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcrosevents.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcsoleil.eps b/Master/texmf-dist/doc/latex/bclogo/bcsoleil.eps
new file mode 100644
index 00000000000..a4eaaa6809d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcsoleil.eps
@@ -0,0 +1,2542 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Creator: dvips(k) 5.96dev Copyright 2007 Radical Eye Software
+%%Title: CompileEps.dvi
+%%CreationDate: Sat Sep 19 14:18:02 2009
+%%BoundingBox: 71 701 90 721
+%%EndComments
+%DVIPSWebPage: (www.radicaleye.com)
+%DVIPSCommandLine: dvips -E -o
+%+ C:\Users\Alain_2\Documents\LaTeX\Logos\bcsoleil.eps CompileEps.dvi
+%DVIPSParameters: dpi=600
+%DVIPSSource: TeX output 2009.09.19:1418
+%%BeginProcSet: tex.pro 0 0
+%!
+/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
+N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72
+mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0
+0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{
+landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize
+mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[
+matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round
+exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{
+statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0]
+N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin
+/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array
+/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2
+array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N
+df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A
+definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get
+}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub}
+B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr
+1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S
+/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy
+setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask
+restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn
+/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put
+}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{
+bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A
+mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{
+SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{
+userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X
+1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4
+index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N
+/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{
+/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)
+(LaserWriter 16/600)]{A length product length le{A length product exch 0
+exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse
+end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask
+grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot}
+imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round
+exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto
+fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p
+delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M}
+B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{
+p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S
+rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end
+
+%%EndProcSet
+%%BeginProcSet: pstricks.pro 0 0
+% $Id: pstricks.pro 34 2008-06-25 17:20:01Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 1.05, 2008/06/25
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+%
+% Define the follwing gs-functions if not known, eg when using distiller
+%
+systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if
+systemdict /.setblendmode known not {/.setblendmode { pop } def } if
+systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if
+%
+/tx@Dict 200 dict def % the main PSTricks dictionary
+tx@Dict begin
+/ADict 25 dict def % The arrow dictionaray
+/CM { matrix currentmatrix } bind def
+/SLW /setlinewidth load def
+/CLW /currentlinewidth load def
+/CP /currentpoint load def
+/ED { exch def } bind def
+/L /lineto load def
+/T /translate load def
+/TMatrix { } def
+/RAngle { 0 } def
+/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments
+/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known
+/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter)
+/Div { dup 0 eq { pop } { div } ifelse } def % control the division
+/tan { dup cos abs 1.e-10 lt
+ { pop 1.e10 } % return 1.e10 as infinit
+ { dup sin exch cos div } ifelse % default sin/cos
+} def
+/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees
+/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root
+ pop pop 0 }{ sqrt exch atan} ifelse } def
+/NET { neg exch neg exch T } def % change coordinate system to the negative one
+/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter
+/Pyth2 { % Pythagoras, xA yA xB yB
+ 3 -1 roll % xA xB yB yA
+ sub % xA xB yB-yA
+ 3 1 roll % yB-yA xA xB
+ sub % yB-yA xA-xB
+ Pyth } def
+/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian
+/Rand { rand 4294967295 div } def % a real random number
+%----------------- hv added 20050516 ---------------
+/PiDiv2 1.57079632680 def
+/Pi 3.14159265359 def
+/TwoPi 6.28318530718 def
+/Euler 2.71828182846 def
+%/e Euler bind def
+/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees
+/DegtoRad { Pi mul 180 div } bind def % viceversa
+%----------------- hv end---------------------------
+/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def
+/PathLength {
+ flattenpath /z 0 def
+ { /y1 ED /x1 ED /y2 y1 def /x2 x1 def }
+ { /y ED /x ED PathLength@ }
+ {}
+ { /y y2 def /x x2 def PathLength@ }
+ /pathforall load stopped { pop pop pop pop } if
+ z
+} def
+%
+/STP { .996264 dup scale } def % BP/PT scaling
+/STV { SDict begin normalscale end STP } def %
+%
+%%-------------- DG begin patch 15 ---------------%%
+%/DashLine { dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def
+%PathLength } ifelse /b ED /x ED /y ED /z y x add def b a .5 sub 2 mul y
+%mul sub z Div round z mul a .5 sub 2 mul y mul add b exch Div dup y mul
+%/y ED x mul /x ED x 0 gt y 0 gt and { [ y x ] 1 a sub y mul } { [ 1 0 ]
+%0 } ifelse setdash stroke } def
+/DashLine {
+ dup 0 gt { /a .5 def PathLength exch div } { pop /a 1 def PathLength } ifelse
+ /b ED /x1 ED /y1 ED /x ED /y ED
+ /z y x add y1 add x1 add def
+ /Coef b a .5 sub 2 mul y mul sub z Div round
+ z mul a .5 sub 2 mul y mul add b exch Div def
+ /y y Coef mul def
+ /x x Coef mul def
+ /y1 y1 Coef mul def
+ /x1 x1 Coef mul def
+ x1 0 gt y1 0 gt or x 0 gt or y 0 gt and
+ { [ y x y1 x1 ] 1 a sub y mul }
+ { [ 1 0 ] 0 } ifelse
+ setdash stroke
+} def
+%%-------------- DG end patch 15 ---------------%%
+/DotLine {
+ /b PathLength def
+ /a ED /z ED /y CLW def
+ /z y z add def
+ a 0 gt {
+ /b b a div def
+ }{
+ a 0 eq {
+ /b b y sub def
+ }{ a -3 eq {
+ /b b y add def } if
+ } ifelse
+ } ifelse
+ [ 0 b b z Div round Div dup 0 le { pop 1 } if ]
+ a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse
+ setdash 1 setlinecap stroke
+} def
+%
+/LineFill { % hv ------------ patch 7 -------------
+ gsave
+ abs /hatchWidthInc ED
+ abs /hatchSepInc ED
+ abs CLW add /a ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ 2 setlinecap
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ x2 x1 sub 1 add {
+ x1 a mul y1 moveto 0 y2 rlineto stroke
+ /x1 x1 1 add
+ hatchWidthInc 0 gt { CLW add } if
+ def
+ hatchSepInc 0 gt hatchWidthInc 0 gt or {
+ /a a hatchSepInc add def
+ CLW hatchWidthInc add SLW
+ } if
+ } repeat
+ grestore
+ pop pop } def
+%
+/PenroseFill {% on stack: scaling factor
+ dup dup scale
+ 1 exch div round /penroseFactor ED
+ a 0 dtransform round exch round exch
+ 2 copy idtransform
+ exch Atan rotate
+ idtransform pop /a ED
+ .25 .25 itransform pathbbox
+ /y2 ED
+ a Div ceiling cvi /x2 ED /y1 ED
+ a Div cvi /x1 ED /y2 y2 y1 sub def
+ clip
+ newpath
+ systemdict
+ /setstrokeadjust known { true setstrokeadjust } if
+ /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul}
+ { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall
+ [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto
+ i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25
+ mul j l + S rmoveto}F i L j L stroke }F}F}F}F
+ grestore
+ pop pop
+} def
+%
+%gsave abs CLW add /a ED a 0 dtransform round exch round exch
+%2 copy idtransform exch Atan rotate idtransform pop /a ED .25 .25
+%% DG/SR modification begin - Dec. 12, 1997 - Patch 2
+%%itransform translate pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%itransform pathbbox /y2 ED a Div ceiling cvi /x2 ED /y1 ED a
+%% DG/SR modification end
+%Div cvi /x1 ED /y2 y2 y1 sub def clip newpath 2 setlinecap systemdict
+%/setstrokeadjust known { true setstrokeadjust } if x2 x1 sub 1 add { x1
+%% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+%% a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore }
+%% def
+%a mul y1 moveto 0 y2 rlineto stroke /x1 x1 1 add def } repeat grestore
+%pop pop } def
+%% DG/SR modification end
+%
+/BeginArrow {
+ ADict begin % hold it local, for end see EndArrow
+ /@mtrx CM def
+ gsave
+ 2 copy T
+ 2 index sub neg exch
+ 3 index sub exch Atan
+ rotate newpath
+} def
+%
+/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict
+%
+/Arrow {
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /a ED
+ { 0 h T 1 -1 scale } if
+ w neg h moveto
+ 0 0 L w h L w neg a neg rlineto
+ gsave fill grestore
+} def
+%
+/ArrowD { % the sides are drawn as curves (hv 20071211)
+ CLW mul add dup
+ 2 div /w ED
+ mul dup /h ED
+ mul /Inset ED
+ { 0 h T 1 -1 scale } if % changes the direction
+% we use y=w/h^2 * x^2 as equation for the control points
+% for the coordinates the arrow is seen from top to bottom
+% the bottom (tip) is (0;0)
+ w neg h moveto % lower left of >
+ w 9 div 4 mul neg h 3 div 2 mul
+ w 9 div neg h 3 div
+ 0 0 curveto % tip of >
+ w 9 div h 3 div
+ w 9 div 4 mul h 3 div 2 mul
+ w h curveto % upper left of >
+ w neg Inset neg rlineto % move to x=0 and inset
+ gsave fill grestore
+} def
+%
+/Tbar {
+ CLW mul add /z ED
+ z -2 div CLW 2 div moveto
+ z 0 rlineto stroke
+ 0 CLW moveto
+} def
+%
+/Bracket {
+ CLW mul add dup CLW sub 2 div
+ /x ED mul CLW add /y ED /z CLW 2 div def
+ x neg y moveto
+ x neg CLW 2 div L x CLW 2 div L x y L stroke
+ 0 CLW moveto
+} def
+%
+/RoundBracket {
+ CLW mul add dup 2 div
+ /x ED mul /y ED /mtrx CM def
+ 0 CLW 2 div T x y mul 0 ne { x y scale } if
+ 1 1 moveto
+ .85 .5 .35 0 0 0 curveto
+ -.35 0 -.85 .5 -1 1 curveto
+ mtrx setmatrix stroke 0 CLW moveto
+} def
+%
+/SD { 0 360 arc fill } def
+%
+/EndDot { % DS is the dot size
+ { /z DS def } { /z 0 def } ifelse
+ /b ED 0 z DS SD b { 0 z DS CLW sub SD } if
+ 0 DS z add CLW 4 div sub moveto } def
+%
+/Shadow { [ { /moveto load } { /lineto load } { /curveto load } {
+ /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto
+ load } if ] cvx newpath 3 1 roll T exec } def
+%
+%/NArray {
+% aload length 2 div dup dup cvi eq not { exch pop } if /n exch
+% cvi def
+%} def
+%
+/NArray { % holds the coordinates and on top of stack the showpoints boolean
+ /showpoints ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ showpoints { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/Line {
+ NArray n 0 eq not
+ { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def
+ n { Lineto } repeat
+ CP 4 2 roll ArrowB L pop pop
+ } if
+} def
+%
+/Arcto {
+ /a [ 6 -2 roll ] cvx def
+ a r
+ /arcto load stopped { 5 } { 4 } ifelse { pop } repeat
+ a
+} def
+%
+/CheckClosed { dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq
+ and { pop pop /n n 1 sub def } if } def
+/Polygon { NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop }
+ repeat } { n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1
+ ED /x1 ED x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div def x1 y1
+ moveto /n n 2 sub def n { Lineto } repeat x1 y1 x0 y0 6 4 roll Lineto
+ Lineto pop pop closepath } ifelse } def
+/Diamond {
+ /mtrx CM def
+ T rotate
+ /h ED
+ /w ED
+ dup 0 eq { pop } { CLW mul neg
+ /d ED
+ /a w h Atan def
+ /h d a sin Div h add def
+ /w d a cos Div w add def } ifelse
+ mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div
+ /ArrowA { moveto } def
+ /ArrowB { } def
+ false Line
+ closepath mtrx setmatrix } def
+% DG modification begin - Jan. 15, 1997
+%/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup 0 eq {
+%pop } { CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+%div dup cos exch sin Div mul sub def } ifelse mark 0 d w neg d 0 h w d 0
+%d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+%setmatrix } def
+/Triangle { /mtrx CM def translate rotate /h ED 2 div /w ED dup
+CLW mul /d ED /h h d w h Atan sin Div sub def /w w d h w Atan 2
+div dup cos exch sin Div mul sub def mark 0 d w neg d 0 h w d 0
+d /ArrowA { moveto } def /ArrowB { } def false Line closepath mtrx
+% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis)
+% setmatrix } def
+setmatrix pop } def
+% DG/SR modification end
+%
+/CCA {
+ /y ED /x ED
+ 2 copy y sub /dy1 ED
+ x sub /dx1 ED
+ /l1 dx1 dy1 Pyth def
+} def
+%
+/CC {
+ /l0 l1 def
+ /x1 x dx sub def
+ /y1 y dy sub def
+ /dx0 dx1 def
+ /dy0 dy1 def
+ CCA
+ /dx dx0 l1 c exp mul dx1 l0 c exp mul add def
+ /dy dy0 l1 c exp mul dy1 l0 c exp mul add def
+ /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def
+ /x2 x l0 dx mul m mul sub def
+ /y2 y l0 dy mul m mul sub def
+ /dx l1 dx mul m mul neg def
+ /dy l1 dy mul m mul neg def
+} def
+%
+/IC {
+ /c c 1 add def
+ c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse
+ /a a 2 mul 3 div 45 cos b exp div def
+ CCA
+ /dx 0 def
+ /dy 0 def
+} def
+%
+/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def
+/NC { CC x1 y1 x2 y2 x y curveto } def
+/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def
+/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def
+/NAC { x2 y2 x y curveto CC x1 y1 } def
+/EAC { x2 y2 x y ArrowB curveto pop pop } def
+%
+/OpenCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { BOC /n n 3 sub def n { NC } repeat EOC } ifelse
+} def
+%
+/AltCurve {
+ { false NArray n 2 mul 2 roll
+ [ n 2 mul 3 sub 1 roll ] aload
+ /Points ED
+ n 2 mul -2 roll }
+ { false NArray } ifelse
+ n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse
+} def
+%
+/ClosedCurve {
+ NArray n 3 lt
+ { n { pop pop } repeat }
+ { n 3 gt { CheckClosed } if
+ 6 copy n 2 mul 6 add 6 roll
+ IC CC x y moveto n { NC } repeat
+ closepath pop pop
+ } ifelse
+} def
+%
+/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def
+/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def
+/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore }
+def
+/FontDot { DS 2 mul dup matrix scale matrix concatmatrix exch matrix
+rotate matrix concatmatrix exch findfont exch makefont setfont } def
+/Rect { x1 y1 y2 add 2 div moveto x1 y2 lineto x2 y2 lineto x2 y1 lineto
+x1 y1 lineto closepath } def
+/OvalFrame { x1 x2 eq y1 y2 eq or { pop pop x1 y1 moveto x2 y2 L } { y1
+y2 sub abs x1 x2 sub abs 2 copy gt { exch pop } { pop } ifelse 2 div
+exch { dup 3 1 roll mul exch } if 2 copy lt { pop } { exch pop } ifelse
+/b ED x1 y1 y2 add 2 div moveto x1 y2 x2 y2 b arcto x2 y2 x2 y1 b arcto
+x2 y1 x1 y1 b arcto x1 y1 x1 y2 b arcto 16 { pop } repeat closepath }
+ifelse } def
+/Frame { CLW mul /a ED 3 -1 roll 2 copy gt { exch } if a sub /y2 ED a add
+/y1 ED 2 copy gt { exch } if a sub /x2 ED a add /x1 ED 1 index 0 eq {
+pop pop Rect } { OvalFrame } ifelse } def
+%
+/BezierNArray {
+ /f ED
+ counttomark 2 div dup cvi /n ED
+ n eq not { exch pop } if
+ n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat
+ f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse
+} def
+%
+/OpenBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { ArrowA n 4 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ 6 2 roll 4 2 roll ArrowB curveto } ifelse
+} def
+%
+/ClosedBezier {
+ BezierNArray
+ n 1 eq
+ { pop pop }
+ { moveto n 1 sub 3 idiv
+ { 6 2 roll 4 2 roll curveto } repeat
+ closepath } ifelse
+} def
+%
+/BezierShowPoints {
+ gsave
+ Points aload length 2 div cvi /n ED
+ moveto
+ n 1 sub { lineto } repeat
+ CLW 2 div SLW [ 4 4 ] 0 setdash stroke
+ grestore
+} def
+%
+/Parab {
+ /y0 ED /x0 ED /y1 ED /x1 ED
+ /dx x0 x1 sub 3 div def
+ /dy y0 y1 sub 3 div def
+ x0 dx sub y0 dy add x1 y1 ArrowA
+ x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB
+ curveto
+ /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def
+} def
+%
+/Grid {
+ newpath
+ /a 4 string def
+ /b ED /c ED /n ED
+ cvi dup 1 lt { pop 1 } if
+ /s ED
+ s div dup 0 eq { pop 1 } if
+ /dy ED s div dup 0 eq { pop 1 } if
+ /dx ED dy div round dy mul
+ /y0 ED dx div round dx mul
+ /x0 ED dy div round cvi
+ /y2 ED dx div round cvi
+ /x2 ED dy div round cvi
+ /y1 ED dx div round cvi
+ /x1 ED
+ /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def
+ /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def
+ b 0 gt {
+ /z1 b 4 div CLW 2 div add def
+% /Helvetica findfont b scalefont setfont
+ /b b .95 mul CLW 2 div add def } if
+ systemdict /setstrokeadjust known
+ { true setstrokeadjust /t { } def }
+ { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add
+ exch itransform } bind def } ifelse
+ gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse
+ /i x1 def
+ /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def
+ /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def
+ x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if
+ { i dx mul dup y0 moveto
+ b 0 gt
+ { gsave c i a cvs dup stringwidth pop
+ /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse
+ h 0 gt {b neg}{z1} ifelse
+ rmoveto show grestore } if
+ dup t f moveto
+ g t L stroke
+ /i i w add def
+ } repeat
+ grestore
+ gsave
+ n 0 gt
+ % DG/SR modification begin - Nov. 7, 1997 - Patch 1
+ %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash }
+ { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash }
+ % DG/SR modification end
+ { 2 setlinecap } ifelse
+ /i y1 def
+ /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def
+ /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def
+ y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if
+ { newpath i dy mul dup x0 exch moveto
+ b 0 gt { gsave c i a cvs dup stringwidth pop
+ /z2 ED
+ w 0 gt {z1 z2 add neg} {z1} ifelse
+ h 0 gt {z1} {b neg} ifelse
+ rmoveto show grestore } if
+ dup f exch t moveto
+ g exch t L stroke
+ /i i h add def
+ } repeat
+ grestore
+} def
+%
+/ArcArrow {
+ /d ED /b ED /a ED
+ gsave
+ newpath 0 -1000 moveto clip
+ newpath
+ 0 1 0 0 b
+ grestore
+ c mul
+ /e ED
+ pop pop pop r a e d PtoC y add exch x add
+ exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c
+ mul neg d
+} def
+%
+/Ellipse { /mtrx CM def T scale 0 0 1 5 3 roll arc mtrx setmatrix } def
+%
+/ArcAdjust { %%%% Vincent Guirardel
+% given a target length (targetLength) and an initial angle (angle0) [in the stack],
+% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0).
+% This computes an angle t such that (x0,y0) is at distance
+% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)).
+% NOTE: this an absolute angle, it does not have to be added or substracted to angle0
+% contrary to TvZ's code.
+% To achieve, this, one iterates the following process: start with some angle t,
+% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)].
+% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned.
+%
+% Another difference with TvZ's code is that we need d (=add/sub) to be defined.
+% the value of d = add/sub is used to know on which side we have to move.
+% It is only used in the initialisation of the angle before the iteration.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Input stack: 1: target length 2: initial angle
+% variables used : rx, ry, d (=add/sub)
+%
+ /targetLength ED /angle0 ED
+ /x0 rx angle0 cos mul def
+ /y0 ry angle0 sin mul def
+% we are looking for an angle t such that (x0,y0) is at distance targetLength
+% from the point M(t)=(rx*cos(t),ry*sin(t)))
+%initialisation of angle (using 1st order approx = TvZ's code)
+ targetLength 57.2958 mul
+ angle0 sin rx mul dup mul
+ angle0 cos ry mul dup mul
+ add sqrt div
+% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees
+% (if the ellipse is very curved at the point where we draw the arrow, %
+% the value can be much more than 360 degrees !)
+% this should avoid going on the wrong side (more than 180 degrees) or go near
+% a bad attractive point (at 180 degrees)
+ dup 90 ge { pop 90 } if
+ angle0 exch d % add or sub
+% maximum number of times to iterate the iterative procedure:
+% iterative procedure: takes an angle t on top of stack, computes a
+% better angle (and put it on top of stack)
+ 30 { dup
+% compute distance D between (x0,y0) and M(t)
+ dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt
+% if D almost equals targetLength, we stop
+ dup targetLength sub abs 1e-5 le { pop exit } if
+% stack now contains D t
+% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]:
+% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 )
+ exch dup cos rx mul x0 sub exch sin ry mul y0 sub
+% stack contains: y(t)-y0, x(t)-x0, d
+ 2 index Div targetLength mul y0 add ry Div exch
+ 2 index Div targetLength mul x0 add rx Div
+% stack contains x(t')/rx , y(t')/ry , d
+% now compute t', and remove D from stack
+ atan exch pop
+ } repeat
+% we don't look at what happened... in particular, if targetLength is greater
+% than the diameter of the ellipse...
+% the final angle will be around /angle0 + 180. maybe we should treat this pathological case...
+% after iteration, stack contains an angle t such that M(t) is the tail of the arrow
+% to give back the result as a an angle relative to angle0 we could add the following line:
+% angle0 sub 0 exch d
+%
+% begin bug fix 2006-01-11
+% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180
+%(we don't want to make the ellipse turn more or less than it should)...
+dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse
+% end bug fix
+} def
+%
+/EllipticArcArrow {
+ /d ED % is add or sub
+ /b ED % arrow procedure
+ /a1 ED % angle
+ gsave
+ newpath
+ 0 -1000 moveto
+ clip % Set clippath far from arrow.
+ newpath
+ 0 1 0 0 b % Draw arrow to determine length.
+ grestore
+% Length of arrow is on top of stack. Next 3 numbers are junk.
+%
+ a1 exch ArcAdjust % Angular position of base of arrow.
+ /a2 ED
+ pop pop pop
+ a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig
+ a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig
+ a1 cos rx mul xOrig add %
+ a1 sin ry mul yOrig add %
+% Now arrow tip coor and base coor are on stack.
+ b pop pop pop pop % Draw arrow, and discard coordinates.
+ a2 CLW 8 div
+% change value of d (test it by looking if `` 1 1 d '' gives 2 or not )
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse
+ ArcAdjust
+% resets original value of d
+ 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap.
+} def
+%%------------------ tvz/DG/hv (2004-05-10) end -------------------%%
+%
+/Rot { CP CP translate 3 -1 roll neg rotate NET } def
+%
+/RotBegin {
+ tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if
+ /TMatrix [ TMatrix CM ] cvx def
+ /a ED
+ a Rot /RAngle [ RAngle dup a add ] cvx def
+} def
+%
+/RotEnd { /TMatrix [ TMatrix setmatrix ] cvx def /RAngle [ RAngle pop ] cvx def } def
+%
+/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def
+/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def
+/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def
+/Uput { /a ED add 2 div /h ED 2 div /w ED /s a sin def /c a cos def /b s
+abs c abs 2 copy gt dup /q ED { pop } { exch pop } ifelse def /w1 c b
+div w mul def /h1 s b div h mul def q { w1 abs w sub dup c mul abs } {
+h1 abs h sub dup s mul abs } ifelse } def
+/UUput { /z ED abs /y ED /x ED q { x s div c mul abs y gt } { x c div s
+mul abs y gt } ifelse { x x mul y y mul sub z z mul add sqrt z add } { q
+{ x s div } { x c div } ifelse abs } ifelse a PtoC h1 add exch w1 add
+exch } def
+/BeginOL { dup (all) eq exch TheOL eq or { IfVisible not { Visible
+/IfVisible true def } if } { IfVisible { Invisible /IfVisible false def
+} if } ifelse } def
+/InitOL { /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def
+/Visible { CP OLUnit idtransform T moveto } def /Invisible { CP OLUnit
+neg exch neg exch idtransform T moveto } def /BOL { BeginOL } def
+/IfVisible true def } def
+end
+%-----------------------------------------------------------------------------%
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-algparser.pro 0 0
+% $Id: pst-algparser.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for PSTricks algorithm parser
+%% Version 0.01, 2008/01/01
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%%-----------------------------------------------------------------------------%
+%
+/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez
+%
+/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin
+%
+% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.12
+% E->T|E+T
+% T->FS|T*FS
+% FS -> F | +FS | -FS
+% F->P|F^SF
+% P->(E)|literal
+% literal->number|var|var[E]|func(params)
+% params->E|E,param
+% number->TOBEFINISHED
+%
+%% E expression, T term, SF signed factor, F factor, P power
+%
+%% parser
+%
+%% str
+%
+%% C->E<condition_operators>E
+%% STR index -> STR index+lenExpr
+/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def
+%
+%% analyze Expression List (separator , or | )
+%% STR index -> STR index+lenExpr
+%% /AnalyzeListOfE {
+%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar
+%% NextNonBlankChar dup 0 eq { pop exit } if
+%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if
+%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop
+%% AnalyzeListOfEPostHook
+%% } def
+/AnalyzeListOfE {
+ /NotFirst false def
+ { NextNonBlankChar pop AnalyzeExpr
+ NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse
+ dup Strlen eq { exit } if NextNonBlankChar
+ dup 44 ne 1 index 124 ne and
+ { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse }
+ if pop 1 add } loop
+ AnalyzeListOfEPostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% E->T|E+T
+%% STR index -> STR index+lenExpr
+/AnalyzeExpr {
+ AnalyzePreHook AnalyzeTerm IsEndingExpr
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% T->FS|T*FS
+%% STR index
+/AnalyzeTerm {
+ AnalyzePreHook AnalyzeSignedFactor IsEndingTerm
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop }
+ ifelse
+ AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% FS -> F | +FS | -FS
+%% STR index
+/AnalyzeSignedFactor {
+ AnalyzePreHook 2 copy get dup IsUnaryOp
+ { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp }
+ { pop AnalyzeFactor }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% F->P|F^P
+%% STR index
+/AnalyzeFactor {
+ AnalyzePreHook AnalyzePower IsEndingFactor
+ { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse }
+ { { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower IsEndingFactor { pop exit } if} loop }
+ ifelse AnalyzePostHook
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% P->(E)|literal
+%% STR index
+/AnalyzePower {
+ %% depending of first char either a number, or a literal
+ 2 copy get dup 40 eq%%an open par
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop }
+ { AnalyzeLiteral }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index STR[index] -> STR index
+%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def
+/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% recognize + or -
+%% chr -> T/F
+/IsUnaryOp { dup 43 eq exch 45 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadNumber {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read mantissa
+ { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop
+ dup 101 eq exch 69 eq or
+ %%% there is a "e" or "E" -> read exponant
+ { 1 add 2 copy get dup IsUnaryOp
+ { pop 1 add 2 copy get } if
+ { IsNumber not { exit } if 1 add 2 copy get } loop }
+ if
+ dup 4 1 roll
+ 3 -1 roll exch 1 index sub getinterval
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a number can contain only : 0123456789.
+%% chr -> T/F
+/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index number
+%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)?
+%% STR index -> STR index' number
+/ReadCondOp {
+ NextNonBlankChar 1 index 4 1 roll
+ { IsCondOp not { exit } if 1 add 2 copy get } loop
+ 2 copy 5 -1 roll
+ exch 1 index sub getinterval 3 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can contain only : 0123456789.
+%% chr -> T/F
+/IsLiteral {%
+ dup 48 ge exch dup 57 le 3 -1 roll and exch
+ dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch
+ dup 97 ge exch 122 le and or } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)?
+%% STR index -> literal STR index' nextchr
+/ReadLiteral {
+ exch dup 3 -1 roll dup 3 1 roll
+ %%read literal core
+ { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop
+ 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a clpar
+%% STR index -> STR index STR[index] T/F
+/IsEndingExpr {%
+ 2 copy dup Strlen eq
+ %% if end of str is reached -> end !
+ { pop pop 0 true }
+ %% ending chr -> clpar, comma, |, <, >, =, !,
+ {get dup dup 41 eq
+ exch dup 124 eq
+ exch dup 93 eq
+ exch dup 44 eq
+ exch dup 30 eq
+ exch dup 60 ge exch 62 le and or or or or or}
+ ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or a +-
+%% STR index -> STR index STR[index] T/F
+/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or */
+%% STR index -> STR index STR[index] T/F
+/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% expr is ended by end of str or ^
+%% STR index -> STR index STR[index] T/F
+/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% STR index -> STR index STR[index]
+/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def
+/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% DEBUG
+/BRK {false} def
+/BRKtrue {/BRK true def} def
+/BRKStop {BRK {BRKtoto} if } def
+/BRKEvalStop {BRK exch if } def
+/BRKBRK2true {BRK {BRK2true} if } def
+/BRK2 {false} def
+/BRK2true {/BRK2 true def} def
+/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def
+end
+%
+%-------------------------------------------------------------------------------%
+%
+/tx@AlgToPs 12 dict def tx@AlgToPs begin
+%
+%% algExpr -> PSVector
+/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def
+/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def
+/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def
+/Strlen 0 def
+/EvalListOfExpr {} def%
+/EvalNumber {%
+ ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx
+ exch 1 add array astore def NextNonBlankChar pop } def
+/EvalAddSub {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def
+} def
+/EvalMulDiv {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def
+} def
+/EvalPower {%
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll
+ pop /exp cvx exch 1 add array astore def
+} def
+/EvalLiteral {%
+ ReadLiteral
+ dup 40 eq%%% there is an open par -> function call
+ { pop 2 index
+ dup (Sum) eq { EvalSum }
+ { dup (IfTE) eq { EvalCond }
+ { dup (Derive) eq { pop EvalDerive }
+ { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc
+ /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx
+ exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse }
+ { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def
+ dup 91 eq%%% there is an open bracket -> vector element
+ { pop 1 add NextNonBlankChar pop AnalyzeExpr
+ /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add }
+ { pop NextNonBlankChar pop }
+ ifelse}
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% the derive function : Derive(n,f(x))
+%% firstparindex lastparindex ->
+/EvalDerive {
+ %% manage the function descripiton
+ 1 add ReadNumber 3 1 roll NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ 1 add NextNonBlankChar pop
+ 3 -1 roll cvi
+ dup 0 eq
+ { pop AnalyzeExpr 3 -1 roll pop 1 add }
+ { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll
+ { (x) tx@Derive begin Derive end } repeat
+ ExpressionVector exch /ExpressionVector [] def
+ AlgToPs aload length
+ /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def
+ l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add
+ 1 index length /Strlen exch def } ifelse
+} def
+/EvalSum {%
+ pop 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll
+ 5 -1 roll 4 add array astore def
+ %% keep ExpressionVector for later and create a new one for internal Sum computation
+ ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def
+ 1 add NextNonBlankChar pop AnalyzeExpr
+ %% add each term
+ /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def
+ /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add
+ array astore def 3 -1 roll pop 1 add
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+/EvalCond {%
+ pop 1 add AnalyzeCond NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ ExpressionVector 3 1 roll /ExpressionVector [] def
+ 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def
+ NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add AnalyzeExpr
+ NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if
+ ExpressionVector
+ /ExpressionVector 6 -1 roll aload length dup
+ 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def
+ 1 add 3 -1 roll pop
+} def
+%% CondOp STR index
+/EvalCondOp {%
+ 3 -1 roll
+ dup (=) eq { /eq } {%
+ dup (<) eq { /lt } {%
+ dup (>) eq { /gt } {%
+ dup (>=) eq { /ge } {%
+ dup (<=) eq { /ge } {%
+ dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator }
+ ifelse } ifelse } ifelse } ifelse } ifelse } ifelse
+ cvx exch pop
+ /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def
+/EvalUnaryOp {
+ 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook {} bind def
+/PreEvalHook {} bind def
+/AnalyzeListOfEPostHook {} bind def
+/AnalyzePostHook {} def
+/RollOp { 3 1 roll } bind def
+end %tx@CoreAnalyzerDict
+%
+%--------------------------------------------------------------------%
+%
+/tx@Derive 41 dict def tx@Derive begin
+%%increase ^^ for each function added
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable -> PSVector
+/Derive {%
+ 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end
+} def
+/Strlen 0 def
+/InitParser { dup length /Strlen exch def 0 } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% algExpr variable index -> PSVector
+/DeriveIndexed {%
+ 3 1 roll 10240 string 3 1 roll 0 3 1 roll
+ /Variable exch def
+ tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u,v)'=-(u',v')
+/EvalListOfExpr {%
+ 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe
+ 2 copy 7 -1 roll dup length 4 1 roll putinterval add
+ 6 -2 roll pop pop
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (-u)'=-(u')
+/EvalUnaryOp {
+ 4 -2 roll 4 index (0) eq
+ { (0) StrConcat 7 -1 roll pop }
+ { 7 -1 roll 45 eq
+ { AddSub AddOpPar true } { false } ifelse
+ 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (number)'=0
+/EvalNumber { ReadNumber (0) 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u+v)'=u'+v'
+/EvalAddSub {%
+ 7 index dup (0) eq
+ { pop true }%% du=0 nothing added
+ { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false }
+ ifelse
+ 5 index dup (0) eq
+ { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0
+ { exch
+ { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added
+ { 5 -2 roll 7 index 43 eq%%something yet added
+ { AddAdd false } { AddSub AddOpPar true } ifelse }
+ ifelse 11 1 roll
+ 3 -1 roll StrConcat 10 -1 roll { AddClPar } if
+ 2 copy pop 0 6 2 roll GetIntervalNewStr }
+ ifelse
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)' or (u/v)'
+/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u*v)'=u'*v+u*v'
+/EvalMul {%
+ 4 -2 roll 7 index dup (0) eq
+ { pop false }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if
+ true }%%du!=0
+ ifelse
+ 5 1 roll 5 index (0) eq
+ { 5 -1 roll not { (0) StrConcat } if }%%dv=0
+ { 5 -1 roll { AddAdd } if
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ }%%dv!=0
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u/v)'=(u'*v-u*v')/v^2
+/EvalDiv {%
+ 4 -2 roll
+ 4 index (0) eq%%dv=0 -> u'/v
+ { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse }
+ { 7 index dup (0) eq
+ { pop }%%du=0
+ { (1) eq%%du=1
+ { false }
+ { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse
+ 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0
+ ifelse
+ AddSub
+ 4 index (1) eq
+ { 8 index StrConcat }
+ { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar }
+ ifelse
+ %}%%dv!=0
+ 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar
+ AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add }
+ ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str1 index str2 -> str1 index
+/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def
+/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+/EvalPower {%
+ 4 -2 roll 7 index (0) eq
+ {%%if du=0 then (u^v)'=v'ln(u)u^v
+ 4 index (0) eq
+ { (0) StrConcat }%%if dv=0 then (u^v)'=0
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if
+ AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse
+ }
+ {%%du!=0
+ 4 index (0) eq
+ {%%if dv=0 then (u^v)'=vu'u^(v-1)
+ 5 index dup IsStrNumber
+ { dup (0) eq
+ { StrConcat }
+ { dup dup (1) eq exch (1.0) eq or
+ { StrConcat }
+ { StrConcat
+ 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1
+ { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006
+ (*\() StrConcat 8 index StrConcat (\)) StrConcat
+ 5 index dup dup (2) eq exch (2.0) eq or
+ { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse }
+ { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)) StrConcat } ifelse
+ }
+ {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u)
+ 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if
+ AddOpPar 5 index StrConcat (\)*\() StrConcat
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (-1\)+\() StrConcat
+ 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if
+ 8 index StrConcat (\)^\() StrConcat
+ 5 index StrConcat (\)*ln\() StrConcat
+ 8 index StrConcat AddClPar
+ } ifelse
+ } ifelse
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% str -> true/false
+/IsStrNumber {%
+ true exch
+ { dup 48 lt exch dup 57 gt 3 -1 roll or
+ exch dup 46 ne%%.
+ exch dup 43 ne%%+
+ exch 45 ne%%-
+ and and and { pop false } if } forall
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalLiteral {%
+ ReadLiteral dup 40 eq%%% there is an open par -> function call
+ { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec }
+ { dup 91 eq%%% there is an open bracket -> vector element
+ { ERROR_vector_not_yet_implemented }
+ { pop EvalVariable }
+ ifelse }
+ ifelse
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% first last parpos Expr[first:parpos-1] ->
+/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% (f(u))'=u'f'(u)
+/EvalFunc {
+ 4 2 roll 4 index (1) ne
+ { AddOpPar 4 index StrConcat (\)*) StrConcat } if
+ (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Func derivative -> Eval<func>
+/EvalFunc_sin {%
+ PreCommonFunc
+ { (cos\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_cos {%
+ PreCommonFunc
+ { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_tan {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_asin {%
+ PreCommonFunc
+ { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_acos {%
+ PreCommonFunc
+ { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_atg {%
+ PreCommonFunc
+ { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_ln {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_exp {%
+ PreCommonFunc
+ { (exp\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_sqrt {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Fact {%
+ PreCommonFunc { ERROR_no_variable_expression_in_Fact } if
+ PostCommonFunc } def
+/EvalFunc_sh {%
+ PreCommonFunc
+ { (ch\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_ch {%
+ PreCommonFunc
+ { (sh\() StrConcat 5 index StrConcat AddClPar } if
+ PostCommonFunc } def
+/EvalFunc_th {%
+ PreCommonFunc
+ { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argsh {%
+ PreCommonFunc
+ { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argch {%
+ PreCommonFunc
+ { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if
+ PostCommonFunc } def
+/EvalFunc_Argth {%
+ PreCommonFunc
+ { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if
+ PostCommonFunc } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/PreCommonFunc {
+ 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 2 roll 4 index (0) eq
+ { (0) StrConcat false }
+ { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse
+} def
+/PostCommonFunc {
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+/EvalFunc_Derive {%
+ 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs
+ 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add
+ 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval
+ exch 6 2 roll } def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_Sum {%
+ 1 add NextNonBlankChar pop
+ %% read the variable name
+ ReadLiteral pop 3 -1 roll pop NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if
+ %% read the initial value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if
+ %% read the increment value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if
+ %% read the limit value
+ 1 add NextNonBlankChar pop ReadNumber pop
+ 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if
+ 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat
+ 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% literal switch -> func call, vector, variables
+/EvalFunc_IfTE {%
+ 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond
+ NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop dup 5 1 roll
+ AnalyzeExpr NextNonBlankChar
+ 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if
+ 1 add NextNonBlankChar pop
+ AnalyzeExpr 1 add NextNonBlankChar pop
+ 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat
+ 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar
+ 2 copy pop 0 6 2 roll GetIntervalNewStr
+ mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% advance in str until a comma is found (no error detection!)
+%% str index -> str index'
+/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Convert to radians if trigo function call
+%% (name) ->
+/TrigoFunc {
+ dup (cos) eq 1 index (sin) eq or exch (tan) eq or
+ { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add
+ array astore def
+ } if
+} def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% No derivative for condition....
+/EvalCondOp { 3 -1 roll pop } bind def
+/PutIntervalOneAdd {putinterval 1 add} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add close parenthesis in string at the given index
+%% str index -> str index+1
+/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add 0 in string at the given index
+%% str index -> str index+1
+/AddZero {2 copy (0) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddMul {2 copy (*) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add open parenthesis in string at the given index
+%% str index -> str index+1
+/AddDiv {2 copy (/) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a plus sign in string at the given index
+%% str index -> str index+1
+/AddAdd {2 copy (+) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a minus sign in string at the given index
+%% str index -> str index+1
+/AddSub {2 copy (-) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% Add a pipe sign in string at the given index
+%% str index -> str index+1
+/AddPipe {2 copy (|) PutIntervalOneAdd} bind def
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% H O O K S
+/AnalyzePreHook { dup 5 1 roll } bind def
+/PreEvalHook {} def
+/AnalyzePostHook { 7 -1 roll pop } bind def
+/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def
+/RollOp { 5 1 roll } bind def
+end%%%tx@CoreAnalyzerDict
+/tx@AddMathFunc 12 dict def tx@AddMathFunc begin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% NEW FUNC
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2))
+%% x -> theta
+/asin {%
+ dup abs 1 gt { EQDFasinrangeerror } if
+ dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad
+} def
+%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x)
+%% x -> theta
+/acos {%
+ dup abs 1 gt { EQDFacosrangeerror } if
+ dup dup mul 1 exch sub sqrt exch atan DegtoRad
+} def
+%% function arctangent in radians
+%% x -> theta
+/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def
+%% HYPERBOLIC FUNCTIONS
+/sh { dup Ex exch neg Ex sub 2 div } def
+/ch { dup Ex exch neg Ex add 2 div } def
+/th { dup sh exch ch div } def
+/Argsh { dup dup mul 1 add sqrt add ln } def
+/Argch { dup dup mul 1 sub sqrt add ln } def
+/Argth { dup 1 add exch 1 exch sub div ln 2 div } def
+%% modified exponential funtion for 0
+%% x n -> x^n
+/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def
+%% modified exponential funtion for 0
+%% x -> e^x
+/Ex { Euler exch exp } bind def
+%%
+%% factorial function
+%% n -> n!
+/Fact { 1 exch 2 exch 1 exch { mul } for } bind def
+/fact { Fact } bind def
+end
+
+% END pstricks.pro
+
+%%EndProcSet
+%%BeginProcSet: pst-dots.pro 0 0
+% $Id: pst-dots.pro 26 2008-06-14 11:50:02Z herbert $
+%
+%% PostScript prologue for pstricks.tex.
+%% Version 2.02, 2008/04/18
+%%
+%% For distribution, see pstricks.tex.
+%%
+%% Timothy Van Zandt <tvz@Princeton.EDU>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% Modified by Etienne Riga - Dec. 16, 1999
+%% Modified by Etienne Riga - 2005/01/01 (er)
+%% to add /Diamond, /SolidDiamond and /BoldDiamond
+%% Modified by Herbert Voss (hv) - 2008/04/17
+%
+10 dict dup begin % hold local
+ /FontType 3 def
+ /FontMatrix [.001 0 0 .001 0 0] def
+ /FontBBox [-571.5 -742.5 571.5 742.5] def
+% /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef
+ Encoding % replace with given dot names
+ dup (b) 0 get /Bullet put % get the numerical position of b in ASCII
+% % and save /Bullet at this place in Encoding
+ dup (c) 0 get /Circle put
+ dup (C) 0 get /BoldCircle put % 67
+ dup (u) 0 get /SolidTriangle put
+ dup (t) 0 get /Triangle put
+ dup (T) 0 get /BoldTriangle put
+ dup (r) 0 get /SolidSquare put
+ dup (s) 0 get /Square put
+ dup (S) 0 get /BoldSquare put
+ dup (q) 0 get /SolidPentagon put
+ dup (p) 0 get /Pentagon put
+ dup (P) 0 get /BoldPentagon put
+%%%
+ dup (k) 0 get /Asterisk put
+ dup (K) 0 get /BoldAsterisk put
+ dup (J) 0 get /SolidAsterisk put
+ dup (h) 0 get /Hexagon put
+ dup (H) 0 get /BoldHexagon put
+ dup (G) 0 get /SolidHexagon put
+ dup (f) 0 get /Octogon put % 2008-04-18 hv
+ dup (F) 0 get /BoldOctogon put % 2008-04-18 hv
+ dup (g) 0 get /SolidOctogon put % 2008-04-18 hv
+ dup (a) 0 get /Add put
+ dup (A) 0 get /BoldAdd put % 65
+ dup (x) 0 get /Mul put
+ dup (X) 0 get /BoldMul put
+ dup (m) 0 get /Oplus put
+ dup (M) 0 get /BOplus put
+ dup (e) 0 get /SolidOplus put
+ dup (n) 0 get /Otimes put
+ dup (N) 0 get /BOtimes put
+ dup (E) 0 get /SolidOtimes put
+ dup (i) 0 get /Bar put
+ dup (I) 0 get /BoldBar put
+ dup (l) 0 get /SolidDiamond put
+ dup (d) 0 get /Diamond put
+ (D) 0 get /BoldDiamond put
+%%%
+/CharProcs 47 dict def
+CharProcs begin
+ /CirclePath {0 0 500 0 360 arc closepath} def
+ /Bullet {CirclePath fill} def
+ /Circle {CirclePath .9 .9 scale CirclePath eofill} def
+ /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def
+ /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def
+ /SolidTriangle {TrianglePath fill} def
+ /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def
+ /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def
+ /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def
+ /SolidSquare {SquarePath fill} def
+ /Square {SquarePath .89 .89 scale SquarePath eofill} def
+ /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def
+ /PentagonPath {
+ -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto
+ 0 574.7 lineto -546.6 177.6 lineto closepath
+ } def
+ /SolidPentagon {PentagonPath fill} def
+ /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def
+ /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def
+%-------------- hv begin 2004/07/25 from: er 2003/03/24
+ /HexagonPath {
+ 0 550 moveto -476 275 lineto -476 -275 lineto
+ 0 -550 lineto 476 -275 lineto 476 275 lineto closepath
+ } def
+ /SolidHexagon {HexagonPath fill} def
+ /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def
+ /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def
+% 2008-04-18 hv
+ /OctogonPath {
+ 550 dup 22.5 tan mul dup neg dup add /xMove exch def
+ exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def
+ /SolidOctogon { OctogonPath fill } def
+ /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def
+ /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def
+%
+ /AsteriskPath {
+ 20 0 moveto 10 250 180 500 0 500 curveto
+ -180 500 -10 250 -20 0 curveto closepath
+ } def
+ /Asterisk {
+ AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath
+ 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill
+ } def
+%
+ /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def
+ /BoldAsteriskPath {
+ 50 30 cos 100 mul moveto Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp 60 rotate Basterp
+ 60 rotate Basterp closepath
+ } def
+ /BoldAsterisk {BoldAsteriskPath fill} def
+ /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def
+ /CrossPath {
+ 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto
+ -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto
+ 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath
+ } def
+ /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto
+ -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto
+ 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath
+ } def
+ /Add {CrossPath fill} def
+ /Mul {45 rotate CrossPath fill} def
+ /BoldAdd {BoldCrossPath fill} def
+ /BoldMul {45 rotate BoldCrossPath fill} def
+ /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def
+ /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def
+ /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def
+ /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def
+ /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def
+ /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def
+ /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def
+ /Bar {BarPath fill} def
+ /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def
+ /BoldBar {BoldBarPath fill} def
+ /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def
+ /SolidDiamond {DiamondPath fill} def
+ /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def
+ /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def
+%%%
+ /.notdef { } def
+end
+%
+/BuildGlyph {
+ exch
+ begin
+% Metrics 1 index get exec 0
+ 0 0
+% BBoxes 3 index get exec
+ -1000 -1000 1000 1000
+% -571.5 -742.5 571.5 742.5
+ setcachedevice
+ CharProcs begin load exec end
+ end
+} def
+%
+/BuildChar {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+} bind def
+
+end
+/PSTricksDotFont exch definefont pop
+
+%% end
+
+%%EndProcSet
+%%BeginProcSet: pst-node.pro 0 0
+% $Id: pst-node.pro 26 2008-06-14 11:50:02Z herbert $
+%%
+%% PostScript prologue for pst-node.tex.
+%% Version 1.00, 2008/01/01.
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%
+/tx@NodeDict 400 dict def tx@NodeDict begin
+tx@Dict begin % from main pstricks dict
+ /T /translate load def
+end
+/NewNode { % on stack: { x y } boolean N@name type InitXnode
+ gsave
+ /next ED % { x y } boolean N@name type
+ dict dup % { x y } boolean N@name dict dict
+ 3 1 roll def % { x y } boolean dict N@name dict def
+ exch { dup 3 1 roll def } if % { x y } dict boolean
+ begin % { x y } dict begin
+ tx@Dict begin
+ STV CP T exec % set scaling
+ end
+ /NodeMtrx CM def % save CM
+ next % InitXNode
+ end
+ grestore
+} def
+%
+/InitPnode {
+ /Y ED /X ED
+ /NodePos { NodeSep Cos mul NodeSep Sin mul } def
+} def
+%
+/InitCnode {
+ /r ED /Y ED /X ED
+ /NodePos { NodeSep r add dup Cos mul exch Sin mul } def
+} def
+%
+/GetRnodePos {
+ Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse
+ Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse
+ dx Sin mul abs dy
+ Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse
+} def
+%
+/InitRnode {
+ /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED
+ /NodePos { GetRnodePos } def
+} def
+%
+/DiaNodePos {
+ w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup
+ Cos mul exch Sin mul
+} def
+%
+/TriNodePos { Sin s lt { d NodeSep sub dup Cos mul Sin Div exch } { w h
+mul w Sin mul h Cos abs mul add Div NodeSep add dup Cos mul exch Sin mul
+} ifelse } def
+/InitTriNode { sub 2 div exch 2 div exch 2 copy T 2 copy 4 index index /d
+ED pop pop pop pop -90 mul rotate /NodeMtrx CM def /X 0 def /Y 0 def d
+sub abs neg /d ED d add /h ED 2 div h mul h d sub Div /w ED /s d w Atan
+sin def /NodePos { TriNodePos } def } def
+/OvalNodePos { /ww w NodeSep add def /hh h NodeSep add def Sin ww mul Cos
+hh mul Atan dup cos ww mul exch sin hh mul } def
+/GetCenter { begin X Y NodeMtrx transform CM itransform end } def
+%
+/XYPos { dup sin exch cos Do /Cos ED /Sin ED /Dist ED Cos 0 gt { Dist
+ Dist Sin mul Cos div } { Cos 0 lt { Dist neg Dist Sin mul Cos div neg }
+ { 0 Dist Sin mul } ifelse } ifelse Do
+} def
+/GetEdge { dup 0 eq { pop begin 1 0 NodeMtrx dtransform CM idtransform
+ exch atan sub dup sin /Sin ED cos /Cos ED /NodeSep ED NodePos NodeMtrx
+ dtransform CM idtransform end } { 1 eq {{exch}} {{}} ifelse /Do ED pop
+ XYPos } ifelse
+} def
+/AddOffset { 1 index 0 eq { pop pop } { 2 copy 5 2 roll cos mul add 4 1
+roll sin mul sub exch } ifelse } def
+/GetEdgeA { NodeSepA AngleA NodeA NodeSepTypeA GetEdge OffsetA AngleA
+AddOffset yA add /yA1 ED xA add /xA1 ED } def
+/GetEdgeB { NodeSepB AngleB NodeB NodeSepTypeB GetEdge OffsetB AngleB
+AddOffset yB add /yB1 ED xB add /xB1 ED } def
+/GetArmA { ArmTypeA 0 eq { /xA2 ArmA AngleA cos mul xA1 add def /yA2 ArmA
+AngleA sin mul yA1 add def } { ArmTypeA 1 eq {{exch}} {{}} ifelse /Do ED
+ArmA AngleA XYPos OffsetA AngleA AddOffset yA add /yA2 ED xA add /xA2 ED
+} ifelse } def
+/GetArmB { ArmTypeB 0 eq { /xB2 ArmB AngleB cos mul xB1 add def /yB2 ArmB
+AngleB sin mul yB1 add def } { ArmTypeB 1 eq {{exch}} {{}} ifelse /Do ED
+ArmB AngleB XYPos OffsetB AngleB AddOffset yB add /yB2 ED xB add /xB2 ED
+} ifelse } def
+/InitNC {
+ /b ED /a ED % second and first node
+ /NodeSepTypeB ED /NodeSepTypeA ED
+ /NodeSepB ED /NodeSepA ED
+ /OffsetB ED /OffsetA ED
+ tx@NodeDict a known tx@NodeDict b known and dup {
+ /NodeA a load def
+ /NodeB b load def
+ NodeA GetCenter /yA ED /xA ED
+ NodeB GetCenter /yB ED /xB ED } if
+} def
+%
+/LPutLine { 4 copy 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED 1 t sub
+mul 3 1 roll 1 t sub mul 4 1 roll t mul add /Y ED t mul add /X ED } def
+/LPutLines { mark LPutVar counttomark 2 div 1 sub /n ED t floor dup n gt
+{ pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse cvi 2 mul { pop
+} repeat LPutLine cleartomark } def
+/BezierMidpoint { /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED
+/t ED /cx x1 x0 sub 3 mul def /cy y1 y0 sub 3 mul def /bx x2 x1 sub 3
+mul cx sub def /by y2 y1 sub 3 mul cy sub def /ax x3 x0 sub cx sub bx
+sub def /ay y3 y0 sub cy sub by sub def ax t 3 exp mul bx t t mul mul
+add cx t mul add x0 add ay t 3 exp mul by t t mul mul add cy t mul add
+y0 add 3 ay t t mul mul mul 2 by t mul mul add cy add 3 ax t t mul mul
+mul 2 bx t mul mul add cx add atan /NAngle ED /Y ED /X ED } def
+/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def
+} def
+/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def
+/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit
+} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd
+} def
+/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def
+} def
+/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def
+/NAngle yyB yyA sub xxB xxA sub Atan def } def
+/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def
+/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def
+} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check {
+exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark
+VPosEnd } def
+/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2
+roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx
+def grestore exec /LPutVar /SaveLPutVar load def } def
+/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def
+GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos {
+LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos {
+LPutVar VPutLine } def LPutVar } def
+/NCLine { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB lineto pop pop
+end } def
+/NCLines { false NArray n 0 eq { NCLine } { 2 copy yA sub exch xA sub
+Atan /AngleA ED n 2 mul dup index exch index yB sub exch xB sub Atan
+/AngleB ED GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1
+yA1 ] cvx def mark LPutVar tx@Dict begin false Line end /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+ifelse } def
+/NCCurve { GetEdgeA GetEdgeB xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1
+roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA
+GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict
+begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ]
+cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines
+} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def
+%
+/NCAngles {
+ GetEdgeA GetEdgeB GetArmA GetArmB
+ /mtrx AngleA matrix rotate def
+ xA2 yA2 mtrx transform pop
+ xB2 yB2 mtrx transform exch pop
+ mtrx itransform
+ /y0 ED /x0 ED
+ mark ArmB 0 ne { xB1 yB1 } if
+ xB2 yB2 x0 y0 xA2 yA2
+ ArmA 0 ne { xA1 yA1 } if
+ tx@Dict begin false Line end
+ /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def
+ /LPutPos { LPutLines } def
+ /HPutPos { HPutLines } def
+ /VPutPos { VPutLines } def } def
+%
+/NCAngle { GetEdgeA GetEdgeB GetArmB /mtrx AngleA matrix rotate def xB2
+yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform
+/y0 ED /x0 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2 x0 y0 xA1 yA1
+tx@Dict begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCBar { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate def
+xA2 yA2 mtrx itransform pop xB2 yB2 mtrx itransform pop sub dup 0 mtrx
+transform 3 -1 roll 0 gt { /yB2 exch yB2 add def /xB2 exch xB2 add def }
+{ /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse mark ArmB
+0 ne { xB1 yB1 } if xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict
+begin false Line end /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx
+def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+/NCDiag { GetEdgeA GetEdgeB GetArmA GetArmB mark ArmB 0 ne { xB1 yB1 } if
+xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false Line end
+/LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCDiagg { GetEdgeA GetArmA yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED
+GetEdgeB mark xB1 yB1 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin
+false Line end /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def /LPutPos {
+LPutLines } def /HPutPos { HPutLines } def /VPutPos { VPutLines } def }
+def
+/NCLoop { GetEdgeA GetEdgeB GetArmA GetArmB /mtrx AngleA matrix rotate
+def xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED /xB3 xB2 yB2
+mtrx transform pop def xB3 yA3 mtrx itransform /yB3 ED /xB3 ED xA3 yA3
+mtrx itransform /yA3 ED /xA3 ED mark ArmB 0 ne { xB1 yB1 } if xB2 yB2
+xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if tx@Dict begin false
+Line end /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ]
+cvx def /LPutPos { LPutLines } def /HPutPos { HPutLines } def /VPutPos {
+VPutLines } def } def
+% DG/SR modification begin - May 9, 1997 - Patch 1
+%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r
+%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+/NCCircle { NodeSepA 0 NodeA 0 GetEdge pop 2 div dup 2 exp r
+r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add
+exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360
+mul add dup 5 1 roll 90 sub PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED
+% DG/SR modification end
+} def /HPutPos { LPutPos } def /VPutPos { LPutPos } def r AngleA 90 sub a add
+AngleA 270 add a sub tx@Dict begin /angleB ED /angleA ED /r ED /c 57.2957 r
+Div def /y ED /x ED } def
+/NCBox { /d ED /h ED /AngleB yB yA sub xB xA sub Atan def /AngleA AngleB
+180 add def GetEdgeA GetEdgeB /dx d AngleB sin mul def /dy d AngleB cos
+mul neg def /hx h AngleB sin mul neg def /hy h AngleB cos mul def
+/LPutVar [ xA1 hx add yA1 hy add xB1 hx add yB1 hy add xB1 dx add yB1 dy
+add xA1 dx add yA1 dy add ] cvx def /LPutPos { LPutLines } def /HPutPos
+{ xB yB xA yA LPutLine } def /VPutPos { HPutPos } def mark LPutVar
+tx@Dict begin false Polygon end } def
+/NCArcBox { /l ED neg /d ED /h ED /a ED /AngleA yB yA sub xB xA sub Atan
+def /AngleB AngleA 180 add def /tA AngleA a sub 90 add def /tB tA a 2
+mul add def /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def
+/x0 xA r tA cos mul add def /y0 yA r tA sin mul add def /c 57.2958 r div
+def /AngleA AngleA a sub 180 add def /AngleB AngleB a add 180 add def
+GetEdgeA GetEdgeB /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul
+sub def /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def l 0
+eq { x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn }
+{ x0 y0 translate /tA AngleA l c mul add def /tB AngleB l c mul sub def
+0 0 r h add tA tB arc r h add AngleB PtoC r d add AngleB PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r d add tB PtoC l arcto 4 { pop } repeat 0
+0 r d add tB tA arcn r d add AngleA PtoC r h add AngleA PtoC 2 copy 6 2
+roll l arcto 4 { pop } repeat r h add tA PtoC l arcto 4 { pop } repeat }
+ifelse closepath /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def /LPutPos
+{ LPutVar /d ED /h ED /AngleB ED /AngleA ED /r ED /y0 ED /x0 ED t 1 le {
+r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC }
+{ t 2 lt { /NAngle AngleB 180 add def r 2 t sub h mul t 1 sub d mul add
+add AngleB PtoC } { t 3 lt { r d add AngleB 3 t sub mul AngleA 2 t sub
+mul add dup 90 sub /NAngle ED PtoC } { /NAngle AngleA 180 add def r 4 t
+sub d mul t 3 sub h mul add add AngleA PtoC } ifelse } ifelse } ifelse
+y0 add /Y ED x0 add /X ED } def /HPutPos { LPutPos } def /VPutPos {
+LPutPos } def } def
+/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB
+sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1
+ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB
+w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos
+{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop }
+{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine }
+def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin
+/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def
+
+/LPutCoor { NAngle tx@Dict begin /NAngle ED end gsave CM STV CP Y sub neg
+exch X sub neg exch moveto setmatrix CP grestore } def
+
+/LPut { tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
+def } ifelse LPutCoor } def
+/HPutAdjust { Sin Cos mul 0 eq { 0 } { d Cos mul Sin div flag not { neg }
+if h Cos mul Sin div flag { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { r add neg } { l add } ifelse X add /X ED }
+def
+/VPutAdjust { Sin Cos mul 0 eq { 0 } { l Sin mul Cos div flag { neg } if
+r Sin mul Cos div flag not { neg } if 2 copy gt { pop } { exch pop }
+ifelse } ifelse s add flag { d add } { h add neg } ifelse Y add /Y ED }
+def
+end
+% END pst-node.pro
+
+%%EndProcSet
+%%BeginProcSet: pstricks-add.pro 0 0
+%% $Id: pstricks-add.pro 49 2008-10-13 10:59:27Z herbert $
+% PostScript prologue for pstricks-add.tex.
+% Version 0.21, 2008/10/15
+% For distribution, see pstricks.tex.
+%
+% HISTORY -> see file Changes
+%
+/tx@addDict 410 dict def tx@addDict begin
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+/GTriangle {
+ gsave
+ /mtrx CM def
+ /colorA ED /colorB ED /colorC ED % save the colors
+ /yA ED /xA ED % save the origin
+ xA yA translate
+ rotate % \psk@gangle
+ /yB ED /xB ED /yC ED /xC ED % save other coordinates
+ /ds [ % save data in a array
+ 0 0 0 colorA aload pop % fd x y xr xg xb
+ 0 xB xA sub yB yA sub colorB aload pop
+ 0 xC xA sub yC yA sub colorC aload pop
+% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD
+ ] def
+ newpath
+ <<
+ /ShadingType 4 % single Gouraud
+ /ColorSpace [ /DeviceRGB ]
+ /DataSource ds
+ >>
+ shfill
+ closepath
+ mtrx
+ setmatrix grestore} def
+%
+/RGBtoCMYK { % on stack r g b -> C M Y K
+ 3 dict begin
+ /Blue ED /Green ED /Red ED
+ 1 Red sub % Cyan
+ 1 Green sub % Magenta
+ 1 Blue sub % Yellow
+ 0 % Black
+ end
+} def
+%
+/CMYKtoGRAY { % on stack c m y k -> gray
+ exch 0.11 mul add
+ exch 0.59 mul add
+ exch 0.3 mul add
+ dup 1 gt { pop 1 } if
+ neg 1 add
+} def
+%
+/RGBtoGRAY { % on stack r g b -> gray
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+} def
+%
+/HSBtoGRAY {
+ 6 dict begin
+ /b exch def
+ /s exch def 6 mul dup cvi dup
+ /i exch def sub
+ /f exch def
+ /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def
+ F i get { s mul neg 1 add b mul} forall
+ 0.11 mul
+ exch 0.59 mul add
+ exch 0.3 mul add
+ end
+} def
+%
+%% convertisseur longueur d'onde ->R,G,B Manuel Luque
+%% lambda max=780 nanometres
+%% lambda min=380 nanometres
+%% adaptation de :
+%% http://www.physics.sfasu.edu/astro/color.html
+%% www.efg2.com/lab
+%
+/Gamma 0.8 def
+/calculateRGB {
+ lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if
+ lambda 380 ge {lambda 439 le {
+ /R {lambda 440 sub neg 440 380 sub div} def
+ /Red R factor mul Gamma exp def
+ /G 0 def
+ /Green G factor mul Gamma exp def
+ /B 1 def
+ /Blue B factor mul Gamma exp def} if
+ } if
+ lambda 440 ge { lambda 489 le {
+ /G {lambda 440 sub 490 440 sub div} def
+ /Green G factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /B 1 def
+ /Blue B factor mul Gamma exp def } if
+ } if
+ lambda 490 ge {lambda 509 le {
+ /B {lambda 510 sub neg 510 490 sub div} def
+ /Blue B factor mul Gamma exp def
+ /R 0 def /Red 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 510 ge {lambda 579 le {
+ /R {lambda 510 sub 580 510 sub div } def
+ /Red R factor mul Gamma exp def
+ /Blue 0 def
+ /G 1 def
+ /Green G factor mul Gamma exp def } if
+ } if
+ lambda 580 ge {lambda 644 le {
+ /G {lambda 645 sub neg 645 580 sub div } def
+ /Green G factor mul Gamma exp def
+ /Blue 0 def
+ /R 1 def
+ /Red R factor mul Gamma exp def } if
+ } if
+ lambda 645 ge { lambda 780 le {
+ /Red 1 factor mul Gamma exp def
+ /Blue 0 def
+ /Green 0 def } if
+ } if
+} def
+%
+/factor {
+ lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if
+ lambda 420 ge {lambda 700 le { 1 } if } if
+ lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if
+} def
+%
+/wavelengthToRGB { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ calculateRGB
+} def % now the colors are saved in Red Green Blue
+%
+/wavelengthToCMYK { % the wavelength in nm must be on top of the stack
+ cvi /lambda exch def % no floating point here
+ gsave
+ calculateRGB Red Green Blue RGBtoCMYK
+ /Black ED /Yellow ED /Magenta ED /Cyan ED
+ grestore
+} def % now the colors are saved in Cyan Magenta Yellow Black
+%
+/axfill {
+ 8 dict begin
+ /xw exch def /nl exch def
+ /C1 exch def /y1 exch def/x1 exch def
+ /C0 exch def /y0 exch def/x0 exch def
+ << /ShadingType 2
+ /ColorSpace /DeviceRGB
+ /Coords [ x0 y0 x1 y1 ]
+ /EmulatorHints [ xw 2 div dup ]
+ /Function <<
+ /FunctionType 2
+ /Domain [0 1]
+ /C0 C0
+ /C1 C1
+ /N 1
+ >>
+ >> shfill
+ end
+} bind def
+%
+%%%%% ### bubblesort ###
+%% syntax : array bubblesort --> array2 trie par ordre croissant
+%% code de Bill Casselman
+%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/
+/bubblesort {
+4 dict begin
+ /a exch def
+ /n a length 1 sub def
+ n 0 gt {
+ % at this point only the n+1 items in the bottom of a remain to
+ % the sorted largest item in that blocks is to be moved up into
+ % position n
+ n {
+ 0 1 n 1 sub {
+ /i exch def
+ a i get a i 1 add get gt {
+ % if a[i] > a[i+1] swap a[i] and a[i+1]
+ a i 1 add
+ a i get
+ a i a i 1 add get
+ % set new a[i] = old a[i+1]
+ put
+ % set new a[i+1] = old a[i]
+ put
+ } if
+ } for
+ /n n 1 sub def
+ } repeat
+ } if
+ a
+end
+} def
+%
+end
+%
+% END pstricks-add.pro
+
+
+%%EndProcSet
+%%BeginProcSet: special.pro 0 0
+%!
+TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N
+/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N
+/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N
+/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{
+/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho
+X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B
+/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{
+/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known
+{userdict/md get type/dicttype eq{userdict begin md length 10 add md
+maxlength ge{/md md dup length 20 add dict copy def}if end md begin
+/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S
+atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{
+itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll
+transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll
+curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf
+pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}
+if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1
+-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3
+get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip
+yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub
+neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{
+noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop
+90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get
+neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr
+1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr
+2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4
+-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S
+TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{
+Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale
+}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState
+save N userdict maxlength dict begin/magscale true def normalscale
+currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts
+/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x
+psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx
+psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub
+TR/showpage{}N/erasepage{}N/copypage{}N/p 3 def @MacSetUp}N/doclip{
+psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2
+roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath
+moveto}N/endTexFig{end psf$SavedState restore}N/@beginspecial{SDict
+begin/SpecialSave save N gsave normalscale currentpoint TR
+@SpecialDefaults count/ocount X/dcount countdictstack N}N/@setspecial{
+CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto
+closepath clip}if ho vo TR hsc vsc scale ang rotate rwiSeen{rwi urx llx
+sub div rhiSeen{rhi ury lly sub div}{dup}ifelse scale llx neg lly neg TR
+}{rhiSeen{rhi ury lly sub div dup scale llx neg lly neg TR}if}ifelse
+CLIP 2 eq{newpath llx lly moveto urx lly lineto urx ury lineto llx ury
+lineto closepath clip}if/showpage{}N/erasepage{}N/copypage{}N newpath}N
+/@endspecial{count ocount sub{pop}repeat countdictstack dcount sub{end}
+repeat grestore SpecialSave restore end}N/@defspecial{SDict begin}N
+/@fedspecial{end}B/li{lineto}B/rl{rlineto}B/rc{rcurveto}B/np{/SaveX
+currentpoint/SaveY X N 1 setlinecap newpath}N/st{stroke SaveX SaveY
+moveto}N/fil{fill SaveX SaveY moveto}N/ellipse{/endangle X/startangle X
+/yrad X/xrad X/savematrix matrix currentmatrix N TR xrad yrad scale 0 0
+1 startangle endangle arc savematrix setmatrix}N end
+
+%%EndProcSet
+%%BeginProcSet: color.pro 0 0
+%!
+TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop
+setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll
+}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def
+/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{
+setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{
+/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch
+known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC
+/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC
+/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0
+setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0
+setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61
+0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC
+/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0
+setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87
+0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{
+0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{
+0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC
+/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0
+setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0
+setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90
+0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC
+/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0
+setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0
+0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{
+0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{
+0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC
+/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0
+setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC
+/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0
+0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1
+0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11
+0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0
+setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0
+0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC
+/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0
+setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0
+0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0
+1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC
+/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0
+setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{
+0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor}
+DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70
+setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0
+setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1
+setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end
+
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 600 600 (CompileEps.dvi)
+@start end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 600dpi
+TeXDict begin
+ end
+%%EndSetup
+TeXDict begin 1 0 bop 0 TeXcolorgray 0 150 a
+ tx@Dict begin gsave CM STV CP newpath moveto 3.0 neg 0 rmoveto clip
+setmatrix end
+ 0 150 a
+0 150 142 150 v 142 150 a
+ currentpoint grestore moveto
+ 142 150 a 71 71 a @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.4 SLW 0 0 0 setrgbcolor 0 360 3.87808 3.87808
+0.0 0.0 Ellipse closepath gsave 1 0.8431 0 setrgbcolor 1. .setopacityalpha
+ fill grestore end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 8.53181 0.0 5.42929 0.0
+ /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq not
+{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup
+1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha
+cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub
+def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha
+y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2
+y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos
+add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add
+y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 7.38857 4.2659 4.70178
+2.71469 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 4.2659 7.38857 2.71469
+4.70178 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 0.0 8.53181 0.0 5.42929
+ /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq not
+{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup
+1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha
+cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub
+def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha
+y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2
+y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos
+add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add
+y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -4.2659 7.38857 -2.71469
+4.70178 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -7.38857 4.2659 -4.70178
+2.71469 /Lineto /lineto load def false 1 setlinejoin NArray n 0
+eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul
+add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -8.53181 0.0 -5.42929
+0.0 /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq
+not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add
+dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1
+ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -7.38857 -4.2659 -4.70178
+-2.71469 /Lineto /lineto load def false 1 setlinejoin NArray n
+0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW
+mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ -4.2659 -7.38857 -2.71469
+-4.70178 /Lineto /lineto load def false 1 setlinejoin NArray n
+0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW
+mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 0.0 -8.53181 0.0 -5.42929
+ /Lineto /lineto load def false 1 setlinejoin NArray n 0 eq not
+{ n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW mul add dup
+1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy /y1 ED /x1
+ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha
+cos arrowlength mul add y1 Alpha sin arrowlength mul add /n n 1 sub
+def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha
+y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2 x1 sub y2
+y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos dArrowPos
+add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos mul add
+y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{ /ArrowPos
+0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1.
+ cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul
+x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat }
+ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial
+@beginspecial @setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 4.2659 -7.38857 2.71469
+-4.70178 /Lineto /lineto load def false 1 setlinejoin NArray n
+0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW
+mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial @beginspecial
+@setspecial
+ tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def
+/ArrowInside { } def 0.8 SLW 1 0.8431 0 setrgbcolor /ArrowA { moveto
+} def /ArrowB { } def /ArrowInside { } def [ 7.38857 -4.2659 4.70178
+-2.71469 /Lineto /lineto load def false 1 setlinejoin NArray n
+0 eq not { n 1 eq { 0 0 /n 2 def } if () length 0 gt { 1.5 2. CLW
+mul add dup 1.4 mul exch 0.4 mul neg add /arrowlength exch def 4 copy
+/y1 ED /x1 ED /y2 ED /x2 ED /Alpha y2 y1 sub x2 x1 sub Atan def ArrowA
+x1 Alpha cos arrowlength mul add y1 Alpha sin arrowlength mul add /n
+n 1 sub def n { 4 copy /y1 ED /x1 ED /y2 ED /x2 ED x1 y1 0.5 1 gt
+{ /Alpha y2 y1 sub x2 x1 sub Atan def /ArrowPos 0. def /Length x2
+x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos
+dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos
+mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{
+/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse
+def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos
+mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat
+} ifelse pop pop Lineto } repeat }{ ArrowA /n n 2 sub def n { Lineto
+} repeat } ifelse CP 4 2 roll ArrowB L pop pop } if gsave 1 0.8431
+0 setrgbcolor 1. .setopacityalpha fill grestore gsave 0.8 SLW 1
+0.8431 0 setrgbcolor 1. .setopacityalpha 0 setlinecap stroke grestore
+end
+
+@endspecial eop end
+%%Trailer
+
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcsoleil.pdf b/Master/texmf-dist/doc/latex/bclogo/bcsoleil.pdf
new file mode 100644
index 00000000000..edddd0a56df
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcsoleil.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcstop.eps b/Master/texmf-dist/doc/latex/bclogo/bcstop.eps
new file mode 100644
index 00000000000..0765f0b2128
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcstop.eps
@@ -0,0 +1,117 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 1 18 19
+%%HiResBoundingBox: 0.295312 1.250781 17.749219 18.704687
+%.............................................
+%%Creator: AFPL Ghostscript 853 (epswrite)
+%%CreationDate: 2009/09/23 17:29:41
+%%DocumentData: Clean7Bit
+%%LanguageLevel: 2
+%%EndComments
+%%BeginProlog
+% This copyright applies to everything between here and the %%EndProlog:
+% Copyright (C) 2005 artofcode LLC, Benicia, CA. All rights reserved.
+%%BeginResource: procset GS_epswrite_2_0_1001
+/GS_epswrite_2_0_1001 80 dict dup begin
+/PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch
+4 index eq and{ pop pop pop}{ PageSize dup 1
+5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec}
+{ pop/setpagedevice where
+{ pop 1 dict dup /PageSize PageSize put setpagedevice}
+{ /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat
+setpage}if}ifelse}ifelse}ifelse} bind def
+/!{bind def}bind def/#{load def}!/N/counttomark #
+/rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}!
+/r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}!
+/w/setlinewidth #/J/setlinecap #
+/j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat #
+/m/moveto #/l/lineto #/c/rcurveto #
+/p{N 2 idiv{N -2 roll rlineto}repeat}!
+/P{N 0 gt{N -2 roll moveto p}if}!
+/h{p closepath}!/H{P closepath}!
+/lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}!
+/re{4 -2 roll m exch dup lx exch ly neg lx h}!
+/^{3 index neg 3 index neg}!
+/f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}!
+/q/gsave #/Q/grestore #/rf{re fill}!
+/Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}!
+/|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}!
+/|{exch string readstring |=}!
+/+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}!
+/@/currentfile #/${+ @ |}!
+/B{{2 copy string{readstring pop}aload pop 4 array astore cvx
+3 1 roll}repeat pop pop true}!
+/Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}!
+/,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}!
+/Ic{exch Ix false 3 colorimage}!
+/F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>>
+/CCITTFaxDecode filter}!/FX{<</EndOfBlock false F}!
+/X{/ASCII85Decode filter}!/@X{@ X}!/&2{2 index 2 index}!
+/@F{@ &2<<F}!/@C{@X &2 FX}!
+/$X{+ @X |}!/&4{4 index 4 index}!/$F{+ @ &4<<F |}!/$C{+ @X &4 FX |}!
+/IC{3 1 roll 10 dict begin 1{/ImageType/Interpolate/Decode/DataSource
+/ImageMatrix/BitsPerComponent/Height/Width}{exch def}forall
+currentdict end image}!
+/~{@ read {pop} if}!
+end readonly def
+%%EndResource
+/pagesave null def
+%%EndProlog
+%%Page: 1 1
+%%BeginPageSetup
+GS_epswrite_2_0_1001 begin
+/pagesave save store 197 dict begin
+0.1 0.1 scale
+%%EndPageSetup
+gsave mark
+Q q
+0 0 180 0 0 190 ^ Y
+255 G
+60.67 184.99 -1.84 -0.12 -1.82 -0.36 -1.76 -0.61 -1.66 -0.82 -1.54 -1.03 -1.4 -1.22 -41.49 -41.49
+-1.22 -1.4 -1.03 -1.54 -0.82 -1.66 -0.61 -1.76 -0.36 -1.82 -0.12 -1.84 0 -58.68 0.13 -1.84
+0.36 -1.82 0.61 -1.76 0.82 -1.66 1.03 -1.54 1.22 -1.4 41.49 -41.49 1.4 -1.22 1.54 -1.03
+1.66 -0.82 1.76 -0.6 1.82 -0.36 1.84 -0.12 58.68 0 1.84 0.13 1.82 0.36 1.76 0.6
+1.66 0.82 1.54 1.03 1.4 1.22 41.49 41.49 1.22 1.4 1.03 1.54 0.82 1.66 0.6 1.76
+0.36 1.82 0.13 1.84 0 58.68 -0.12 1.84 -0.36 1.82 -0.6 1.76 -0.82 1.66 -1.03 1.54
+-1.22 1.4 -41.49 41.49 -1.4 1.22 -1.54 1.03 -1.66 0.82 -1.76 0.61 -1.82 0.36 -1.84 0.13 f
+3.985 w
+1 j
+K
+60.67 184.99 -1.84 -0.12 -1.82 -0.36 -1.76 -0.61 -1.66 -0.82 -1.54 -1.03 -1.4 -1.22 -41.49 -41.49
+-1.22 -1.4 -1.03 -1.54 -0.82 -1.66 -0.61 -1.76 -0.36 -1.82 -0.12 -1.84 0 -58.68 0.13 -1.84
+0.36 -1.82 0.61 -1.76 0.82 -1.66 1.03 -1.54 1.22 -1.4 41.49 -41.49 1.4 -1.22 1.54 -1.03
+1.66 -0.82 1.76 -0.6 1.82 -0.36 1.84 -0.12 58.68 0 1.84 0.13 1.82 0.36 1.76 0.6
+1.66 0.82 1.54 1.03 1.4 1.22 41.49 41.49 1.22 1.4 1.03 1.54 0.82 1.66 0.6 1.76
+0.36 1.82 0.13 1.84 0 29.34 0 29.34 -0.12 1.84 -0.36 1.82 -0.6 1.76 -0.82 1.66
+-1.03 1.54 -1.22 1.4 -41.49 41.49 -1.4 1.22 -1.54 1.03 -1.66 0.82 -1.76 0.61 -1.82 0.36
+-1.84 0.13 H
+S
+255 0 r3
+63.88 177.26 -1.85 -0.12 -1.82 -0.36 -1.75 -0.61 -1.66 -0.82 -1.54 -1.03 -1.39 -1.22 -36.97 -36.97
+-1.22 -1.39 -1.03 -1.54 -0.82 -1.66 -0.61 -1.75 -0.36 -1.82 -0.12 -1.85 0 -52.27 0.12 -1.85
+0.36 -1.82 0.61 -1.75 0.82 -1.66 1.03 -1.54 1.22 -1.39 36.97 -36.97 1.39 -1.22 1.54 -1.03
+1.66 -0.82 1.75 -0.61 1.82 -0.36 1.85 -0.12 52.27 0 1.85 0.12 1.82 0.36 1.75 0.61
+1.66 0.82 1.54 1.03 1.39 1.22 36.97 36.97 1.22 1.39 1.03 1.54 0.82 1.66 0.61 1.75
+0.36 1.82 0.12 1.85 0 52.27 -0.12 1.85 -0.36 1.82 -0.61 1.75 -0.82 1.66 -1.03 1.54
+-1.22 1.39 -36.97 36.97 -1.39 1.22 -1.54 1.03 -1.66 0.82 -1.75 0.61 -1.82 0.36 -1.85 0.12 f
+255 G
+26 78 23 44 /1J
+$C
+1E6sFS07$Rg`YF+hOe%Ws'8O(&q[tsPq!.KLnV\^YHRou#VE0dfI`#h$n,MV~>
+,
+54 79 31 41 /4J
+$C
++eSf7s8W-!s8W-!s8W,@W&4J~>
+,
+88 78 33 44 /1N
+$C
+3YW,dE.alKFIU,X8\3cM\#90Os8(P9s8W-!]kr8rf%9WDrNr]'[BRMK.Mu3Z_*@~>
+,
+126 79 27 41 /4N
+$C
+0Rs-&s8W,p"m6C,H"c^)Dnl1!s8T9.H<_*'X=Pb~>
+,
+cleartomark end end pagesave restore
+ showpage
+%%PageTrailer
+%%Trailer
+%%Pages: 1
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcstop.pdf b/Master/texmf-dist/doc/latex/bclogo/bcstop.pdf
new file mode 100644
index 00000000000..ca998b2d6d5
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcstop.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bctetraedre.eps b/Master/texmf-dist/doc/latex/bclogo/bctetraedre.eps
new file mode 100644
index 00000000000..95628f422a8
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bctetraedre.eps
@@ -0,0 +1,154 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 18
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%Tetraedre (Utilisateur)
+1 setlinecap
+1 setlinejoin
+0.3882 0.0353 0.1059 rgb
+0.1 setlinewidth
+17 4.8762 m 4.1776 0.6216 l 0.4901 6.8997 l 17 4.9508 l closepath
+gs 0.3882 0.0353 0.1059 rgb fill gr s
+0.6588 0.0588 0.1804 rgb
+17 4.9508 m 0.4901 6.8997 l 7.2779 17.4595 l 17 5.1416 l closepath
+gs 0.6588 0.0588 0.1804 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.4901 6.8997 m 17 4.9508 l
+s
+0.3333 0.0314 0.0902 rgb
+0.1 setlinewidth
+4.1776 0.6216 m 7.2779 17.4595 l 0.4901 6.8997 l closepath
+gs 0.3333 0.0314 0.0902 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+0.4901 6.8997 m 7.2779 17.4595 l
+s
+4.1776 0.6216 m 0.4901 6.8997 l
+s
+0.702 0.0627 0.1922 rgb
+0.1 setlinewidth
+17 5.1416 m 7.2779 17.4595 l 4.1776 0.6216 l 17 4.8762 l closepath
+gs 0.702 0.0627 0.1922 rgb fill gr s
+1 0.7137 0.7569 rgb
+thicklines
+17 4.8762 m 4.1776 0.6216 l
+s
+7.2779 17.4595 m 17 5.1416 l
+s
+7.2779 17.4595 m 4.1776 0.6216 l
+s
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bctetraedre.pdf b/Master/texmf-dist/doc/latex/bclogo/bctetraedre.pdf
new file mode 100644
index 00000000000..88056453d4b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bctetraedre.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcying.eps b/Master/texmf-dist/doc/latex/bclogo/bcying.eps
new file mode 100644
index 00000000000..e39b7e44d02
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcying.eps
@@ -0,0 +1,133 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 18
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%YingYang (Utilisateur)
+1 setlinejoin
+0 0 0 rgb
+0.4 setlinewidth
+0 360 8.2524 8.2524 8.5 9.2524
+ /mtrx CM def translate scale 0 0 1 5 3 roll arc mtrx setmatrix closepath gs 1 1 1 rgb fill gr s
+0 180 8.2524 8.2524 8.5 9.2524
+ /mtrx CM def translate scale 0 0 1 5 3 roll arc mtrx setmatrix 180 0 4.1262 4.1262 4.3738 9.2524
+ /mtrx CM def translate scale 0 0 1 5 3 roll arc mtrx setmatrix 180 0 4.1262 4.1262 12.6262 9.2524
+ /mtrx CM def translate scale 0 0 1 5 3 roll arcn mtrx setmatrix 13.4515 9.2524 m
+0 360 0.8252 0.8252 12.6262 9.2524
+ /mtrx CM def translate scale 0 0 1 5 3 roll arc mtrx setmatrix closepath
+0 0 0 rgb fill s 0 0 0 rgb
+0 360 0.8252 0.8252 4.3738 9.2524
+ /mtrx CM def translate scale 0 0 1 5 3 roll arc mtrx setmatrix closepath 1 1 1 rgb fill s 0 0 0 rgb
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/doc/latex/bclogo/bcying.pdf b/Master/texmf-dist/doc/latex/bclogo/bcying.pdf
new file mode 100644
index 00000000000..c3f759b954b
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/bclogo/bcying.pdf
@@ -0,0 +1,84 @@
+%PDF-1.4
+%쏢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xSAn!
+^b0ؼOXl=3214ntx
+y j.P9E u5Aeq[((Wq&q76-C :]!j2x͌Un5P<aO?[xi򄌹::ps^ Ɗrr o^cԒm\@PR1R
+e:P{¯b!y`aH,VcJÏXU3'^sż /DOf*Afg9ƫGE3" ^<ʨw)
+$D.cMXq0<1ňx
+?vdendstream
+endobj
+6 0 obj
+345
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 17 18]
+/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ExtGState 8 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+/Metadata 9 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+8 0 obj
+<</R7
+7 0 R>>
+endobj
+9 0 obj
+<</Type/Metadata
+/Subtype/XML/Length 1274>>stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?>
+<?adobe-xap-filters esc="CRLF"?>
+<x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 2.9.1-13, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+<rdf:Description rdf:about='d84d242d-a77d-11de-0000-a626024088b1' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:Producer='MiKTeX GPL Ghostscript 8.60'/>
+<rdf:Description rdf:about='d84d242d-a77d-11de-0000-a626024088b1' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:ModifyDate='2009-09-19T13:43:00Z' xap:CreateDate='2009-09-19T13:43:00Z'><xap:CreatorTool>TeXgraph</xap:CreatorTool></rdf:Description>
+<rdf:Description rdf:about='d84d242d-a77d-11de-0000-a626024088b1' xmlns:xapMM='http://ns.adobe.com/xap/1.0/mm/' xapMM:DocumentID='d84d242d-a77d-11de-0000-a626024088b1'/>
+<rdf:Description rdf:about='d84d242d-a77d-11de-0000-a626024088b1' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:format='application/pdf'><dc:title><rdf:Alt><rdf:li xml:lang='x-default'>Untitled</rdf:li></rdf:Alt></dc:title></rdf:Description>
+</rdf:RDF>
+</x:xmpmeta>
+
+
+<?xpacket end='w'?>
+endstream
+endobj
+2 0 obj
+<</Producer(MiKTeX GPL Ghostscript 8.60)
+/CreationDate(D:20090919134300Z)
+/ModDate(D:20090919134300Z)
+/Creator(TeXgraph)>>endobj
+xref
+0 10
+0000000000 65535 f
+0000000637 00000 n
+0000002121 00000 n
+0000000578 00000 n
+0000000449 00000 n
+0000000015 00000 n
+0000000430 00000 n
+0000000701 00000 n
+0000000742 00000 n
+0000000771 00000 n
+trailer
+<< /Size 10 /Root 1 0 R /Info 2 0 R
+/ID [<AF31364AADF8C5A42ABA19B9F1DB6AA3><AF31364AADF8C5A42ABA19B9F1DB6AA3>]
+>>
+startxref
+2258
+%%EOF
diff --git a/Master/texmf-dist/doc/latex/bclogo/latex/readme b/Master/texmf-dist/doc/latex/bclogo/latex/readme
deleted file mode 100644
index 90dad68e606..00000000000
--- a/Master/texmf-dist/doc/latex/bclogo/latex/readme
+++ /dev/null
@@ -1,73 +0,0 @@
-Bclogo package by Maxime Chupin
-Version 2.2 dated 15/01/2009
-
-This package facilitates the creation of colorful boxes with a title and logo. It relies mainly on PSTricks and/or Tikz.
-
-The documentation pdf (in french) presents the syntax and parameters
-
-FICHIERS :
-===== documentation =====
-
-LISEZ-MOI
-README
-bclogo-doc.pdf
-bclogo-doc.tex
-brace.eps
-brace.pdf
-losanges.eps
-losanges.pdf
-spir.eps
-spir.pdf
-
-===== Fichiers pour LaTeX =====
-bc-attention.eps
-bc-attention.pdf
-bc-attention.tex
-bc-aux-301.eps
-bc-aux-301.pdf
-bc-book.pgf
-bc-book.pst
-bc-coeur.eps
-bc-coeur.pdf
-bc-coeur.tex
-bc-crayon.eps
-bc-crayon.pdf
-bc-crayon.tex
-bc-danger.eps
-bcdanger.pdf
-bc-danger.tex
-bc-etoile.eps
-bc-etoile.pdf
-bc-etoile.tex
-bc-fleur.eps
-bc-fleur.pdf
-bc-fleur.tex
-bc-inter.eps
-bc-inter.pdf
-bc-inter.tex
-bc-lampe.pgf
-bc-lampe.pst
-bclogo.sty
-bc-note.eps
-bc-note.pdf
-bc-note.tex
-bc-orne.eps
-bc-orne.pdf
-bc-orne.tex
-bc-ours.eps
-bc-ours.pdf
-bc-ours.tex
-bc-smiley_bonnehumeur.eps
-bc-smiley_bonnehumeur.pdf
-bc-smiley_bonnehumeur.tex
-bc-smiley_mauvaisehumeur.eps
-bc-smiley_mauvaisehumeur.pdf
-bc-smiley_mauvaisehumeur.tex
-bc-takecare.pgf
-bc-takecare.pst
-bc-trefle.eps
-bc-trefle.pdf
-bc-trefle.tex
-==================
-
-The archive bclogo-v2-22.zip contains all the files to insert into a tree LaTeX.
diff --git a/Master/texmf-dist/doc/latex/bclogo/readme b/Master/texmf-dist/doc/latex/bclogo/readme
deleted file mode 100644
index 90dad68e606..00000000000
--- a/Master/texmf-dist/doc/latex/bclogo/readme
+++ /dev/null
@@ -1,73 +0,0 @@
-Bclogo package by Maxime Chupin
-Version 2.2 dated 15/01/2009
-
-This package facilitates the creation of colorful boxes with a title and logo. It relies mainly on PSTricks and/or Tikz.
-
-The documentation pdf (in french) presents the syntax and parameters
-
-FICHIERS :
-===== documentation =====
-
-LISEZ-MOI
-README
-bclogo-doc.pdf
-bclogo-doc.tex
-brace.eps
-brace.pdf
-losanges.eps
-losanges.pdf
-spir.eps
-spir.pdf
-
-===== Fichiers pour LaTeX =====
-bc-attention.eps
-bc-attention.pdf
-bc-attention.tex
-bc-aux-301.eps
-bc-aux-301.pdf
-bc-book.pgf
-bc-book.pst
-bc-coeur.eps
-bc-coeur.pdf
-bc-coeur.tex
-bc-crayon.eps
-bc-crayon.pdf
-bc-crayon.tex
-bc-danger.eps
-bcdanger.pdf
-bc-danger.tex
-bc-etoile.eps
-bc-etoile.pdf
-bc-etoile.tex
-bc-fleur.eps
-bc-fleur.pdf
-bc-fleur.tex
-bc-inter.eps
-bc-inter.pdf
-bc-inter.tex
-bc-lampe.pgf
-bc-lampe.pst
-bclogo.sty
-bc-note.eps
-bc-note.pdf
-bc-note.tex
-bc-orne.eps
-bc-orne.pdf
-bc-orne.tex
-bc-ours.eps
-bc-ours.pdf
-bc-ours.tex
-bc-smiley_bonnehumeur.eps
-bc-smiley_bonnehumeur.pdf
-bc-smiley_bonnehumeur.tex
-bc-smiley_mauvaisehumeur.eps
-bc-smiley_mauvaisehumeur.pdf
-bc-smiley_mauvaisehumeur.tex
-bc-takecare.pgf
-bc-takecare.pst
-bc-trefle.eps
-bc-trefle.pdf
-bc-trefle.tex
-==================
-
-The archive bclogo-v2-22.zip contains all the files to insert into a tree LaTeX.
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-attention.tex b/Master/texmf-dist/tex/latex/bclogo/bc-attention.tex
deleted file mode 100644
index d6979686774..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-attention.tex
+++ /dev/null
@@ -1,118 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.45.1
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{1 0.21568628 0}
-\pscustom[fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(16.345058,6.170049)
-\lineto(6.3593534,17.6068272)
-\curveto(6.3593534,17.6068272)(5.0864557,19.28726175)(4.5460761,17.2144869)
-\curveto(4.0056966,15.1417121)(1.14834,2.977031)(1.14834,2.977031)
-\curveto(1.14834,2.977031)(0.77593772,1.239731)(2.6228105,1.699166)
-\curveto(4.4696834,2.158602)(15.584513,4.982311)(15.584513,4.982311)
-\curveto(15.584513,4.982311)(16.795929,5.16619)(16.345058,6.170049)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.10000001,linecolor=curcolor]
-{
-\newpath
-\moveto(16.345058,6.170049)
-\lineto(6.3593534,17.6068272)
-\curveto(6.3593534,17.6068272)(5.0864557,19.28726175)(4.5460761,17.2144869)
-\curveto(4.0056966,15.1417121)(1.14834,2.977031)(1.14834,2.977031)
-\curveto(1.14834,2.977031)(0.77593772,1.239731)(2.6228105,1.699166)
-\curveto(4.4696834,2.158602)(15.584513,4.982311)(15.584513,4.982311)
-\curveto(15.584513,4.982311)(16.795929,5.16619)(16.345058,6.170049)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(13.848306,6.891641)
-\lineto(6.7564312,14.8447793)
-\curveto(6.7564312,14.8447793)(5.8533574,16.0141759)(5.4581908,14.5628251)
-\curveto(5.0630244,13.1114744)(2.968413,4.595131)(2.968413,4.595131)
-\curveto(2.968413,4.595131)(2.694777,3.379019)(4.017324,3.70802)
-\curveto(5.3398703,4.037023)(13.299455,6.058083)(13.299455,6.058083)
-\curveto(13.299455,6.058083)(14.166452,6.191758)(13.848306,6.891641)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.09999999,linecolor=curcolor]
-{
-\newpath
-\moveto(13.848306,6.891641)
-\lineto(6.7564312,14.8447793)
-\curveto(6.7564312,14.8447793)(5.8533574,16.0141759)(5.4581908,14.5628251)
-\curveto(5.0630244,13.1114744)(2.968413,4.595131)(2.968413,4.595131)
-\curveto(2.968413,4.595131)(2.694777,3.379019)(4.017324,3.70802)
-\curveto(5.3398703,4.037023)(13.299455,6.058083)(13.299455,6.058083)
-\curveto(13.299455,6.058083)(14.166452,6.191758)(13.848306,6.891641)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.68020769,11.05050706)
-\curveto(8.07851339,9.44936867)(8.08206955,8.07036256)(7.68814555,7.97236843)
-\curveto(7.29422155,7.87437429)(6.65125252,9.09431746)(6.25294682,10.69545585)
-\curveto(5.85464112,12.29659424)(5.85108496,13.67560035)(6.24500896,13.77359448)
-\curveto(6.63893295,13.87158862)(7.28190199,12.65164545)(7.68020769,11.05050706)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.08843242,linecolor=curcolor]
-{
-\newpath
-\moveto(7.68020769,11.05050706)
-\curveto(8.07851339,9.44936867)(8.08206955,8.07036256)(7.68814555,7.97236843)
-\curveto(7.29422155,7.87437429)(6.65125252,9.09431746)(6.25294682,10.69545585)
-\curveto(5.85464112,12.29659424)(5.85108496,13.67560035)(6.24500896,13.77359448)
-\curveto(6.63893295,13.87158862)(7.28190199,12.65164545)(7.68020769,11.05050706)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(9.11625147,6.57737825)
-\curveto(9.22928149,6.12301183)(8.91343787,5.65285991)(8.4112434,5.52793199)
-\curveto(7.90904893,5.40300408)(7.4097363,5.67037446)(7.29670629,6.12474087)
-\curveto(7.18367627,6.57910729)(7.49951989,7.04925921)(8.00171436,7.17418713)
-\curveto(8.50390883,7.29911505)(9.00322146,7.03174467)(9.11625147,6.57737825)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.1,linecolor=curcolor]
-{
-\newpath
-\moveto(9.11625147,6.57737825)
-\curveto(9.22928149,6.12301183)(8.91343787,5.65285991)(8.4112434,5.52793199)
-\curveto(7.90904893,5.40300408)(7.4097363,5.67037446)(7.29670629,6.12474087)
-\curveto(7.18367627,6.57910729)(7.49951989,7.04925921)(8.00171436,7.17418713)
-\curveto(8.50390883,7.29911505)(9.00322146,7.03174467)(9.11625147,6.57737825)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-book.eps b/Master/texmf-dist/tex/latex/bclogo/bc-book.eps
new file mode 100644
index 00000000000..cab029b5ca9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-book.eps
@@ -0,0 +1,209 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 21
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%etat (Utilisateur)
+1 setlinejoin
+%Mbezier3 (Utilisateur)
+0 0 0 rgb
+0.6 setlinewidth
+0.7258 17.0268 m
+2.6822 19.0802 7.9535 21.1273 9.2142 21.0387 curveto
+9.2142 19.1433 11.6755 17.9429 13.7898 17.9745 curveto
+9.1826 13.8679 4.7964 13.5836 0.852 15.6053 curveto
+gs 1 0.7529 0.7961 rgb fill gr s
+%Mbezier1 (Utilisateur)
+0.7258 17.0268 m
+1.2938 16.2371 2.7138 15.6053 4.1653 15.7001 curveto
+5.9324 16.3634 11.1391 17.9429 13.7898 17.9745 curveto
+13.4111 14.3733 14.2946 7.9922 15.62 5.7493 curveto
+14.2946 4.5173 7.1315 1.927 5.7115 2.0849 curveto
+4.4178 1.9586 2.6507 2.6219 2.1142 3.6328 curveto
+0.9467 7.7395 0.1262 14.626 0.7258 17.0268 curveto
+closepath
+gs 1 1 0 rgb fill gr s
+%Mbezier2 (Utilisateur)
+4.1653 15.7001 m
+3.9129 11.6566 4.7333 5.7493 5.7115 2.0849 curveto
+s
+%Mbezier7 (Utilisateur)
+0.4 setlinewidth
+13.1793 8.2331 m
+13.7205 6.2561 10.0401 4.8207 8.7681 6.8248 curveto
+s
+%Mbezier8 (Utilisateur)
+9.6341 11.3205 m
+13.1711 11.9794 13.9291 9.6119 10.2652 8.7302 curveto
+gs 1 1 0 rgb fill gr s
+%Mcourbe1 (Utilisateur)
+11.4231 15.7001 m
+11.6739 15.2581 11.6751 14.5674 11.5809 14.1838 curveto
+11.4867 13.8001 11.2971 13.7234 11.1075 14.0574 curveto
+10.918 14.3914 10.7284 15.1361 10.792 15.5737 curveto
+10.8556 16.0114 11.1723 16.142 11.4231 15.7001 curveto
+gs 0 0 0 rgb fill gr s
+%Mcourbe3 (Utilisateur)
+7.388 14.6788 m
+7.9653 14.7376 8.018 13.5923 7.848 12.9997 curveto
+7.678 12.407 7.2853 12.3669 7.0684 12.9202 curveto
+6.8516 13.4734 6.8106 14.6199 7.388 14.6788 curveto
+gs 0 0 0 rgb fill gr s
+%Mbezier11 (Utilisateur)
+thinlines
+11.8262 16.3579 m
+11.4744 17.1433 10.2566 16.6558 10.1212 15.7621 curveto
+s
+%Mbezier12 (Utilisateur)
+7.848 15.0579 m
+7.4962 15.8433 6.2784 15.3558 6.1431 14.4621 curveto
+s
+%Mligne5 (Utilisateur)
+2.3815 7.4748 m
+3.7075 7.6644 l
+
+s
+%Mligne6 (Utilisateur)
+2.2191 8.0165 m
+2.4356 6.879 l
+
+s
+%Mligne7 (Utilisateur)
+2.0297 9.5331 m
+2.192 8.6664 l
+3.3557 8.8289 l
+3.3828 9.5872 l
+
+s
+%Mligne8 (Utilisateur)
+2.7603 8.7748 m
+2.7603 9.2081 l
+
+s
+%Mcourbe11 (Utilisateur)
+1.732 11.4018 m
+1.8661 11.1352 2.0002 10.8686 2.2462 10.806 curveto
+2.4921 10.7434 2.8499 10.8848 3.058 10.8601 curveto
+3.2661 10.8354 3.3244 10.6447 3.3828 10.4539 curveto
+s
+%Mcourbe12 (Utilisateur)
+2.0838 10.1289 m
+2.1295 10.357 2.1752 10.5851 2.3273 10.6976 curveto
+2.4795 10.8102 2.7381 10.8072 2.8957 10.9143 curveto
+3.0532 11.0214 3.1097 11.2387 3.1663 11.4559 curveto
+s
+%Controles (Utilisateur)
+%Selection (Utilisateur)
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-book.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-book.pdf
new file mode 100644
index 00000000000..d66fca34b34
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-book.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-book.pgf b/Master/texmf-dist/tex/latex/bclogo/bc-book.pgf
deleted file mode 100644
index e75361f8ee3..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-book.pgf
+++ /dev/null
@@ -1,84 +0,0 @@
-% TeXgraph version 1.94 beta-7.3
-\begin{pgfpicture}{0cm}{0cm}{0.59cm}{0.75cm}%
-\pgfsetxvec{\pgfxy(0.1,0)}
-\pgfsetyvec{\pgfxy(0,0.1)}
-\pgfsetroundjoin%
-%Mbezier3 (Utilisateur)
-\pgfsetstrokecolor{black}
-\pgfsetlinewidth{0.6pt}
-\pgfmoveto{\pgfxy(0.256,6.0067)}
-\pgfcurveto{\pgfxy(0.9462,6.7311)}{\pgfxy(2.8058,7.4532)}{\pgfxy(3.2506,7.422)}
-\pgfcurveto{\pgfxy(3.2506,6.7533)}{\pgfxy(4.1189,6.3299)}{\pgfxy(4.8647,6.341)}
-\pgfcurveto{\pgfxy(3.2394,4.8923)}{\pgfxy(1.6921,4.792)}{\pgfxy(0.3006,5.5052)}
-\pgfsetfillcolor{rgb,1:red,1;green,0.7529;blue,0.7961}\pgffillstroke
-%Mbezier1 (Utilisateur)
-\pgfmoveto{\pgfxy(0.256,6.0067)}
-\pgfcurveto{\pgfxy(0.4564,5.7281)}{\pgfxy(0.9574,5.5052)}{\pgfxy(1.4694,5.5386)}
-\pgfcurveto{\pgfxy(2.0928,5.7727)}{\pgfxy(3.9296,6.3299)}{\pgfxy(4.8647,6.341)}
-\pgfcurveto{\pgfxy(4.7311,5.0706)}{\pgfxy(5.0428,2.8195)}{\pgfxy(5.5104,2.0282)}
-\pgfcurveto{\pgfxy(5.0428,1.5936)}{\pgfxy(2.5158,0.6798)}{\pgfxy(2.0149,0.7355)}
-\pgfcurveto{\pgfxy(1.5585,0.6909)}{\pgfxy(0.9351,0.925)}{\pgfxy(0.7458,1.2816)}
-\pgfcurveto{\pgfxy(0.334,2.7303)}{\pgfxy(0.0445,5.1597)}{\pgfxy(0.256,6.0067)}
-\pgfclosepath
-\pgfsetfillcolor{rgb,1:red,1;green,1;blue,0}
-\pgffillstroke
-%Mbezier2 (Utilisateur)
-\pgfmoveto{\pgfxy(1.4694,5.5386)}
-\pgfcurveto{\pgfxy(1.3804,4.1122)}{\pgfxy(1.6698,2.0282)}{\pgfxy(2.0149,0.7355)}
-\pgfstroke
-%Mbezier7 (Utilisateur)
-\pgfsetlinewidth{0.4pt}
-\pgfmoveto{\pgfxy(4.6494,2.9045)}
-\pgfcurveto{\pgfxy(4.8403,2.207)}{\pgfxy(3.5419,1.7006)}{\pgfxy(3.0932,2.4076)}
-\pgfstroke
-%Mbezier8 (Utilisateur)
-\pgfmoveto{\pgfxy(3.3987,3.9936)}
-\pgfcurveto{\pgfxy(4.6465,4.2261)}{\pgfxy(4.9139,3.3909)}{\pgfxy(3.6213,3.0798)}
-\pgffillstroke
-%Mcourbe1 (Utilisateur)
-\pgfmoveto{\pgfxy(4.0298,5.5386)}
-\pgfcurveto{\pgfxy(4.1183,5.3827)}{\pgfxy(4.1187,5.1391)}{\pgfxy(4.0855,5.0037)}
-\pgfcurveto{\pgfxy(4.0522,4.8684)}{\pgfxy(3.9854,4.8413)}{\pgfxy(3.9185,4.9591)}
-\pgfcurveto{\pgfxy(3.8516,5.077)}{\pgfxy(3.7847,5.3397)}{\pgfxy(3.8072,5.4941)}
-\pgfcurveto{\pgfxy(3.8296,5.6485)}{\pgfxy(3.9413,5.6945)}{\pgfxy(4.0298,5.5386)}
-\pgfsetfillcolor{black}\pgffillstroke
-%Mcourbe3 (Utilisateur)
-\pgfmoveto{\pgfxy(2.6063,5.1783)}
-\pgfcurveto{\pgfxy(2.81,5.1991)}{\pgfxy(2.8286,4.7951)}{\pgfxy(2.7686,4.586)}
-\pgfcurveto{\pgfxy(2.7086,4.3769)}{\pgfxy(2.5701,4.3628)}{\pgfxy(2.4936,4.5579)}
-\pgfcurveto{\pgfxy(2.4171,4.7531)}{\pgfxy(2.4026,5.1576)}{\pgfxy(2.6063,5.1783)}
-\pgffillstroke
-%Mbezier11 (Utilisateur)
-\pgfsetlinewidth{0.2pt}
-\pgfmoveto{\pgfxy(4.172,5.7707)}
-\pgfcurveto{\pgfxy(4.0479,6.0478)}{\pgfxy(3.6183,5.8758)}{\pgfxy(3.5706,5.5605)}
-\pgfstroke
-%Mbezier12 (Utilisateur)
-\pgfmoveto{\pgfxy(2.7686,5.3121)}
-\pgfcurveto{\pgfxy(2.6445,5.5892)}{\pgfxy(2.2149,5.4172)}{\pgfxy(2.1672,5.1019)}
-\pgfstroke
-%Mligne5 (Utilisateur)
-\pgfxyline(0.8401,2.6369)(1.3079,2.7038)
-%Mligne6 (Utilisateur)
-\pgfxyline(0.7828,2.828)(0.8592,2.4268)
-%Mligne7 (Utilisateur)
-\pgfmoveto{\pgfxy(0.716,3.3631)}\pgflineto{\pgfxy(0.7733,3.0573)}\pgflineto{\pgfxy(1.1838,3.1146)}
-\pgflineto{\pgfxy(1.1934,3.3822)}
-\pgfstroke
-%Mligne8 (Utilisateur)
-\pgfxyline(0.9738,3.0955)(0.9738,3.2484)
-%Mcourbe11 (Utilisateur)
-\pgfmoveto{\pgfxy(0.611,4.0223)}
-\pgfcurveto{\pgfxy(0.6583,3.9282)}{\pgfxy(0.7056,3.8342)}{\pgfxy(0.7924,3.8121)}
-\pgfcurveto{\pgfxy(0.8792,3.79)}{\pgfxy(1.0054,3.8399)}{\pgfxy(1.0788,3.8312)}
-\pgfcurveto{\pgfxy(1.1522,3.8225)}{\pgfxy(1.1728,3.7552)}{\pgfxy(1.1934,3.6879)}
-\pgfstroke
-%Mcourbe12 (Utilisateur)
-\pgfmoveto{\pgfxy(0.7351,3.5732)}
-\pgfcurveto{\pgfxy(0.7512,3.6537)}{\pgfxy(0.7674,3.7342)}{\pgfxy(0.821,3.7739)}
-\pgfcurveto{\pgfxy(0.8747,3.8136)}{\pgfxy(0.9659,3.8125)}{\pgfxy(1.0215,3.8503)}
-\pgfcurveto{\pgfxy(1.0771,3.8881)}{\pgfxy(1.097,3.9648)}{\pgfxy(1.117,4.0414)}
-\pgfstroke
-%Controles (Utilisateur)
-%Selection (Utilisateur)
-\end{pgfpicture}%
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-book.pst b/Master/texmf-dist/tex/latex/bclogo/bc-book.pst
deleted file mode 100644
index 80a5f6122df..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-book.pst
+++ /dev/null
@@ -1,72 +0,0 @@
-% TeXgraph version 1.94 beta-7.3
-\psset{xunit=0.1cm, yunit=0.1cm}
-\begin{pspicture}(0,0)(5.9,7.5)%
-\pstVerb{1 setlinejoin}%
-%Mbezier3 (Utilisateur)
-\psset{linecolor={black},linewidth=0.6pt,fillstyle=solid,fillcolor=[rgb]{1,0.7529,0.7961}}
-\pscustom{%
-\psbezier(0.256,6.0067)(0.9462,6.7311)(2.8058,7.4532)(3.2506,7.422)
-\psbezier(3.2506,6.7533)(4.1189,6.3299)(4.8647,6.341)
-\psbezier(3.2394,4.8923)(1.6921,4.792)(0.3006,5.5052)
-}
-%Mbezier1 (Utilisateur)
-\psset{fillcolor=[rgb]{1,1,0}}
-\pscustom{
-\psbezier(0.256,6.0067)(0.4564,5.7281)(0.9574,5.5052)(1.4694,5.5386)
-\psbezier(2.0928,5.7727)(3.9296,6.3299)(4.8647,6.341)
-\psbezier(4.7311,5.0706)(5.0428,2.8195)(5.5104,2.0282)
-\psbezier(5.0428,1.5936)(2.5158,0.6798)(2.0149,0.7355)
-\psbezier(1.5585,0.6909)(0.9351,0.925)(0.7458,1.2816)
-\psbezier(0.334,2.7303)(0.0445,5.1597)(0.256,6.0067)
-\closepath}
-%Mbezier2 (Utilisateur)
-\psset{fillstyle=none}
-\psbezier(1.4694,5.5386)(1.3804,4.1122)(1.6698,2.0282)(2.0149,0.7355)
-%Mbezier7 (Utilisateur)
-\psset{linewidth=0.4pt}
-\psbezier(4.6494,2.9045)(4.8403,2.207)(3.5419,1.7006)(3.0932,2.4076)
-%Mbezier8 (Utilisateur)
-\psset{fillstyle=solid}
-\psbezier(3.3987,3.9936)(4.6465,4.2261)(4.9139,3.3909)(3.6213,3.0798)
-%Mcourbe1 (Utilisateur)
-\psset{fillcolor={black}}
-\pscustom{%
-\psbezier(4.0298,5.5386)(4.1183,5.3827)(4.1187,5.1391)(4.0855,5.0037)
-\psbezier(4.0522,4.8684)(3.9854,4.8413)(3.9185,4.9591)
-\psbezier(3.8516,5.077)(3.7847,5.3397)(3.8072,5.4941)
-\psbezier(3.8296,5.6485)(3.9413,5.6945)(4.0298,5.5386)
-}
-%Mcourbe3 (Utilisateur)
-\pscustom{%
-\psbezier(2.6063,5.1783)(2.81,5.1991)(2.8286,4.7951)(2.7686,4.586)
-\psbezier(2.7086,4.3769)(2.5701,4.3628)(2.4936,4.5579)
-\psbezier(2.4171,4.7531)(2.4026,5.1576)(2.6063,5.1783)
-}
-%Mbezier11 (Utilisateur)
-\psset{linewidth=0.2pt,fillstyle=none}
-\psbezier(4.172,5.7707)(4.0479,6.0478)(3.6183,5.8758)(3.5706,5.5605)
-%Mbezier12 (Utilisateur)
-\psbezier(2.7686,5.3121)(2.6445,5.5892)(2.2149,5.4172)(2.1672,5.1019)
-%Mligne5 (Utilisateur)
-\psline(0.8401,2.6369)(1.3079,2.7038)
-%Mligne6 (Utilisateur)
-\psline(0.7828,2.828)(0.8592,2.4268)
-%Mligne7 (Utilisateur)
-\psline(0.716,3.3631)(0.7733,3.0573)(1.1838,3.1146)(1.1934,3.3822)
-%Mligne8 (Utilisateur)
-\psline(0.9738,3.0955)(0.9738,3.2484)
-%Mcourbe11 (Utilisateur)
-\pscustom{%
-\psbezier(0.611,4.0223)(0.6583,3.9282)(0.7056,3.8342)(0.7924,3.8121)
-\psbezier(0.8792,3.79)(1.0054,3.8399)(1.0788,3.8312)
-\psbezier(1.1522,3.8225)(1.1728,3.7552)(1.1934,3.6879)
-}
-%Mcourbe12 (Utilisateur)
-\pscustom{%
-\psbezier(0.7351,3.5732)(0.7512,3.6537)(0.7674,3.7342)(0.821,3.7739)
-\psbezier(0.8747,3.8136)(0.9659,3.8125)(1.0215,3.8503)
-\psbezier(1.0771,3.8881)(1.097,3.9648)(1.117,4.0414)
-}
-%Controles (Utilisateur)
-%Selection (Utilisateur)
-\end{pspicture}%
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-coeur.tex b/Master/texmf-dist/tex/latex/bclogo/bc-coeur.tex
deleted file mode 100644
index 73d2ca3ebd4..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-coeur.tex
+++ /dev/null
@@ -1,32 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{0.92941177 0.1254902 0.02745098}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(2.440842,12.2913573)
-\curveto(-0.72890001,16.5181847)(7.0374953,21.3496822)(8.4921679,14.0090322)
-\curveto(10.174423,21.3685175)(17.849145,16.8480351)(14.2965,12.1397979)
-\lineto(8.4304198,4.107143)
-\lineto(2.440842,12.2913573)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.2,linecolor=curcolor]
-{
-\newpath
-\moveto(2.440842,12.2913573)
-\curveto(-0.72890001,16.5181847)(7.0374953,21.3496822)(8.4921679,14.0090322)
-\curveto(10.174423,21.3685175)(17.849145,16.8480351)(14.2965,12.1397979)
-\lineto(8.4304198,4.107143)
-\lineto(2.440842,12.2913573)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-crayon.tex b/Master/texmf-dist/tex/latex/bclogo/bc-crayon.tex
deleted file mode 100644
index 09e13be760a..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-crayon.tex
+++ /dev/null
@@ -1,426 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,17)
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(2.274126,3.106328)
-\curveto(2.2969013,3.11072)(3.0852515,3.586891)(2.9338689,3.765172)
-\curveto(2.8771003,3.832026)(2.7537628,3.821212)(2.6171114,3.794864)
-\curveto(1.7516524,3.627996)(-0.02232145,2.689485)(0.88597529,1.619804)
-\curveto(1.5861206,0.795259)(4.2582558,0.363895)(7.0368343,0.899632)
-\curveto(10.885849,1.641759)(14.147861,3.761885)(12.870569,5.266123)
-\curveto(12.000118,6.291234)(9.3556896,6.377837)(7.2025197,6.416522)
-\curveto(6.0851156,6.421511)(3.6985817,6.454104)(2.9605905,7.3232203)
-\curveto(2.6483635,7.6909215)(2.7043929,8.155562)(3.0256809,8.4638782)
-\curveto(3.5578941,8.9295628)(5.0382862,9.214997)(5.1521624,9.236953)
-\curveto(5.4937909,9.3028221)(6.4237255,9.4561885)(7.5278162,9.4356655)
-\curveto(8.1462606,9.4252404)(8.842494,9.4168454)(9.2587962,8.9265757)
-\curveto(9.362872,8.8040085)(9.427007,8.6348384)(9.451539,8.5747344)
-\curveto(9.447686,8.5480586)(9.462756,8.499097)(9.491142,8.4656699)
-\curveto(9.538448,8.4099569)(9.694022,8.4140192)(9.785124,8.431585)
-\curveto(10.035652,8.4798882)(10.533195,8.7054869)(10.837316,8.9715929)
-\curveto(10.989377,9.104645)(11.240244,9.3086175)(10.833403,9.787745)
-\curveto(10.360331,10.3448703)(9.580701,10.3890525)(8.7288955,10.3933841)
-\curveto(7.5014671,10.4030932)(6.5354432,10.2298018)(6.1482643,10.1551499)
-\curveto(3.096383,9.5667186)(0.29792096,7.7434372)(1.3954463,6.450906)
-\curveto(2.2091288,5.49265)(4.6962257,5.466481)(6.1437012,5.447332)
-\curveto(8.1773848,5.42451)(10.539048,5.296354)(11.305424,4.393811)
-\curveto(11.589267,4.059537)(11.752946,3.429789)(11.066915,2.895546)
-\curveto(10.420826,2.407904)(8.9439463,1.99348)(8.0329361,1.81783)
-\curveto(5.6870872,1.365527)(3.0944964,1.734426)(2.4605808,2.480974)
-\curveto(2.4321965,2.514401)(2.1956608,2.792964)(2.274126,3.106328)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.01347924,linecolor=curcolor]
-{
-\newpath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(4.9833956,1.835704)
-\lineto(4.882175,1.943447)
-\lineto(5.0199968,4.341012)
-\curveto(5.1897512,7.2940883)(5.1900032,7.2968353)(5.3093899,7.4927184)
-\curveto(5.3620577,7.5791332)(6.1333513,8.6680431)(7.0233769,9.9125201)
-\curveto(7.913403,11.1569976)(9.3066318,13.1103284)(10.11944,14.2532559)
-\curveto(10.932249,15.3961836)(11.625058,16.33130614)(11.659011,16.33130614)
-\curveto(11.840527,16.33130614)(11.718383,16.11994754)(10.691885,14.6577887)
-\curveto(10.097628,13.8113197)(8.752258,11.8958767)(7.702172,10.4012505)
-\curveto(6.6520861,8.9066248)(5.8016181,7.6750567)(5.8122429,7.6644308)
-\curveto(5.8228682,7.6538056)(6.0692293,7.6180965)(6.3597132,7.585074)
-\curveto(7.3939829,7.4675007)(8.0744447,7.2848533)(8.7300296,6.948846)
-\curveto(9.0449412,6.787444)(9.2201888,6.656762)(9.522133,6.358172)
-\curveto(9.932823,5.952048)(10.127117,5.637447)(10.237597,5.199698)
-\curveto(10.270339,5.06996)(10.31289,4.96381)(10.332151,4.96381)
-\curveto(10.393666,4.96381)(10.683946,5.386079)(13.072809,8.9506447)
-\curveto(14.360727,10.8724251)(15.451942,12.4844421)(15.49773,12.5329049)
-\curveto(15.612731,12.6546248)(15.705228,12.5686645)(15.623525,12.416)
-\curveto(15.592371,12.357791)(14.815379,11.1677621)(13.896875,9.7714908)
-\curveto(12.978368,8.3752205)(11.927651,6.777892)(11.561947,6.221873)
-\curveto(10.735404,4.965195)(10.435587,4.482752)(10.323015,4.228264)
-\curveto(10.244059,4.049769)(10.197668,4.011406)(9.864512,3.849105)
-\curveto(9.448292,3.646339)(5.3029921,1.797267)(5.1700554,1.755074)
-\curveto(5.1133764,1.737086)(5.050543,1.764227)(4.9833951,1.835702)
-\lineto(4.9833956,1.835704)
-\closepath
-\moveto(6.9367592,2.869503)
-\curveto(8.098385,3.376981)(9.0125442,3.789909)(9.3470098,3.958222)
-\curveto(9.701452,4.136587)(9.719691,4.177073)(9.683498,4.705145)
-\curveto(9.622428,5.59611)(8.9687019,6.287931)(7.8314127,6.665154)
-\curveto(7.1978243,6.875306)(5.5701781,7.1073213)(5.5021116,6.997186)
-\curveto(5.4874511,6.973466)(5.4349665,6.228244)(5.3854793,5.341135)
-\curveto(5.3359915,4.454026)(5.2844645,3.60417)(5.2709745,3.452563)
-\curveto(5.2244429,2.851011)(5.3151137,2.699245)(5.2029629,2.113126)
-\curveto(5.2374549,2.048677)(6.1302919,2.537547)(6.1468297,2.537547)
-\curveto(6.1633678,2.537547)(6.5188357,2.686928)(6.9367592,2.869504)
-\lineto(6.9367592,2.869503)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.24205552,linecolor=curcolor]
-{
-\newpath
-\moveto(4.9833956,1.835704)
-\lineto(4.882175,1.943447)
-\lineto(5.0199968,4.341012)
-\curveto(5.1897512,7.2940883)(5.1900032,7.2968353)(5.3093899,7.4927184)
-\curveto(5.3620577,7.5791332)(6.1333513,8.6680431)(7.0233769,9.9125201)
-\curveto(7.913403,11.1569976)(9.3066318,13.1103284)(10.11944,14.2532559)
-\curveto(10.932249,15.3961836)(11.625058,16.33130614)(11.659011,16.33130614)
-\curveto(11.840527,16.33130614)(11.718383,16.11994754)(10.691885,14.6577887)
-\curveto(10.097628,13.8113197)(8.752258,11.8958767)(7.702172,10.4012505)
-\curveto(6.6520861,8.9066248)(5.8016181,7.6750567)(5.8122429,7.6644308)
-\curveto(5.8228682,7.6538056)(6.0692293,7.6180965)(6.3597132,7.585074)
-\curveto(7.3939829,7.4675007)(8.0744447,7.2848533)(8.7300296,6.948846)
-\curveto(9.0449412,6.787444)(9.2201888,6.656762)(9.522133,6.358172)
-\curveto(9.932823,5.952048)(10.127117,5.637447)(10.237597,5.199698)
-\curveto(10.270339,5.06996)(10.31289,4.96381)(10.332151,4.96381)
-\curveto(10.393666,4.96381)(10.683946,5.386079)(13.072809,8.9506447)
-\curveto(14.360727,10.8724251)(15.451942,12.4844421)(15.49773,12.5329049)
-\curveto(15.612731,12.6546248)(15.705228,12.5686645)(15.623525,12.416)
-\curveto(15.592371,12.357791)(14.815379,11.1677621)(13.896875,9.7714908)
-\curveto(12.978368,8.3752205)(11.927651,6.777892)(11.561947,6.221873)
-\curveto(10.735404,4.965195)(10.435587,4.482752)(10.323015,4.228264)
-\curveto(10.244059,4.049769)(10.197668,4.011406)(9.864512,3.849105)
-\curveto(9.448292,3.646339)(5.3029921,1.797267)(5.1700554,1.755074)
-\curveto(5.1133764,1.737086)(5.050543,1.764227)(4.9833951,1.835702)
-\lineto(4.9833956,1.835704)
-\closepath
-\moveto(6.9367592,2.869503)
-\curveto(8.098385,3.376981)(9.0125442,3.789909)(9.3470098,3.958222)
-\curveto(9.701452,4.136587)(9.719691,4.177073)(9.683498,4.705145)
-\curveto(9.622428,5.59611)(8.9687019,6.287931)(7.8314127,6.665154)
-\curveto(7.1978243,6.875306)(5.5701781,7.1073213)(5.5021116,6.997186)
-\curveto(5.4874511,6.973466)(5.4349665,6.228244)(5.3854793,5.341135)
-\curveto(5.3359915,4.454026)(5.2844645,3.60417)(5.2709745,3.452563)
-\curveto(5.2244429,2.851011)(5.3151137,2.699245)(5.2029629,2.113126)
-\curveto(5.2374549,2.048677)(6.1302919,2.537547)(6.1468297,2.537547)
-\curveto(6.1633678,2.537547)(6.5188357,2.686928)(6.9367592,2.869504)
-\lineto(6.9367592,2.869503)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.38059041,linecolor=curcolor]
-{
-\newpath
-\moveto(6.956153,7.3946923)
-\lineto(12.84209,15.8416848)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.38059041,linecolor=curcolor]
-{
-\newpath
-\moveto(8.5736631,6.810591)
-\lineto(14.190015,15.0778609)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.38059041,linecolor=curcolor]
-{
-\newpath
-\moveto(9.652002,5.911974)
-\lineto(14.908907,13.5052824)
-\lineto(14.99877,13.6850057)
-}
-}
-{
-\newrgbcolor{curcolor}{0.83137256 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(6.3486957,7.6027555)
-\curveto(6.1015763,7.6396577)(5.8921255,7.6765038)(5.8832498,7.6846367)
-\curveto(5.8614071,7.7046509)(7.1848932,9.6207456)(9.3729101,12.7368409)
-\curveto(10.370643,14.1577779)(11.281162,15.4666283)(11.396286,15.6453968)
-\curveto(11.51141,15.8241658)(11.621199,15.9707525)(11.640263,15.9711453)
-\curveto(11.723509,15.9728607)(12.044044,15.7203094)(12.102781,15.6067283)
-\curveto(12.19034,15.4374067)(12.182189,15.3166384)(12.064762,15.0434591)
-\curveto(11.949037,14.7742396)(6.910096,7.5254337)(6.8429347,7.5315621)
-\curveto(6.8182227,7.5338179)(6.5958151,7.5658544)(6.3486957,7.6027555)
-\lineto(6.3486957,7.6027555)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.41176471 0.3137255 0}
-\pscustom[linewidth=0.00449308,linecolor=curcolor]
-{
-\newpath
-\moveto(6.3486957,7.6027555)
-\curveto(6.1015763,7.6396577)(5.8921255,7.6765038)(5.8832498,7.6846367)
-\curveto(5.8614071,7.7046509)(7.1848932,9.6207456)(9.3729101,12.7368409)
-\curveto(10.370643,14.1577779)(11.281162,15.4666283)(11.396286,15.6453968)
-\curveto(11.51141,15.8241658)(11.621199,15.9707525)(11.640263,15.9711453)
-\curveto(11.723509,15.9728607)(12.044044,15.7203094)(12.102781,15.6067283)
-\curveto(12.19034,15.4374067)(12.182189,15.3166384)(12.064762,15.0434591)
-\curveto(11.949037,14.7742396)(6.910096,7.5254337)(6.8429347,7.5315621)
-\curveto(6.8182227,7.5338179)(6.5958151,7.5658544)(6.3486957,7.6027555)
-\lineto(6.3486957,7.6027555)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.83137256 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(8.1961196,7.1965163)
-\curveto(8.0507427,7.2574423)(7.7630789,7.3485193)(7.5568683,7.3989112)
-\lineto(7.1819409,7.4905307)
-\lineto(7.3150358,7.6761892)
-\curveto(7.3882375,7.7783015)(8.5464144,9.4389194)(9.888761,11.3664511)
-\lineto(12.329392,14.8710546)
-\lineto(12.596528,15.0152066)
-\curveto(13.070395,15.270915)(13.452822,15.2673794)(13.715338,15.0048636)
-\lineto(13.869259,14.8509422)
-\lineto(11.232248,10.964513)
-\curveto(9.628881,8.6014684)(8.5688196,7.0795843)(8.5278407,7.0819123)
-\curveto(8.4907729,7.0840193)(8.3414998,7.1355913)(8.1961204,7.1965163)
-\lineto(8.1961196,7.1965163)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.41176471 0.3137255 0}
-\pscustom[linewidth=0.00456708,linecolor=curcolor]
-{
-\newpath
-\moveto(8.1961196,7.1965163)
-\curveto(8.0507427,7.2574423)(7.7630789,7.3485193)(7.5568683,7.3989112)
-\lineto(7.1819409,7.4905307)
-\lineto(7.3150358,7.6761892)
-\curveto(7.3882375,7.7783015)(8.5464144,9.4389194)(9.888761,11.3664511)
-\lineto(12.329392,14.8710546)
-\lineto(12.596528,15.0152066)
-\curveto(13.070395,15.270915)(13.452822,15.2673794)(13.715338,15.0048636)
-\lineto(13.869259,14.8509422)
-\lineto(11.232248,10.964513)
-\curveto(9.628881,8.6014684)(8.5688196,7.0795843)(8.5278407,7.0819123)
-\curveto(8.4907729,7.0840193)(8.3414998,7.1355913)(8.1961204,7.1965163)
-\lineto(8.1961196,7.1965163)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.83137256 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(9.447453,6.449809)
-\curveto(9.3247011,6.575419)(9.1371747,6.729764)(9.0307261,6.792799)
-\curveto(8.9219695,6.857199)(8.8465995,6.931947)(8.85868,6.963427)
-\curveto(8.8733375,7.0016223)(13.814201,14.305005)(14.035974,14.6162924)
-\curveto(14.068469,14.6619022)(14.294936,14.4500947)(14.442027,14.2365238)
-\curveto(14.585045,14.0288697)(14.614906,13.9446818)(14.630081,13.7063383)
-\curveto(14.641278,13.5305105)(14.62655,13.3823314)(14.591267,13.3158096)
-\curveto(14.51228,13.1668908)(9.835557,6.397504)(9.744492,6.30028)
-\curveto(9.674683,6.225748)(9.658411,6.233938)(9.447452,6.449809)
-\lineto(9.447453,6.449809)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.41176471 0.3137255 0}
-\pscustom[linewidth=0.00449308,linecolor=curcolor]
-{
-\newpath
-\moveto(9.447453,6.449809)
-\curveto(9.3247011,6.575419)(9.1371747,6.729764)(9.0307261,6.792799)
-\curveto(8.9219695,6.857199)(8.8465995,6.931947)(8.85868,6.963427)
-\curveto(8.8733375,7.0016223)(13.814201,14.305005)(14.035974,14.6162924)
-\curveto(14.068469,14.6619022)(14.294936,14.4500947)(14.442027,14.2365238)
-\curveto(14.585045,14.0288697)(14.614906,13.9446818)(14.630081,13.7063383)
-\curveto(14.641278,13.5305105)(14.62655,13.3823314)(14.591267,13.3158096)
-\curveto(14.51228,13.1668908)(9.835557,6.397504)(9.744492,6.30028)
-\curveto(9.674683,6.225748)(9.658411,6.233938)(9.447452,6.449809)
-\lineto(9.447453,6.449809)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.83137256 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(10.309554,5.053673)
-\curveto(10.297213,5.090739)(10.254568,5.224284)(10.214786,5.350439)
-\curveto(10.175004,5.476595)(10.082823,5.673844)(10.009938,5.78877)
-\lineto(9.877422,5.997729)
-\lineto(12.350517,9.5694738)
-\curveto(13.710719,11.533933)(14.847658,13.1411429)(14.877048,13.1410503)
-\curveto(15.077672,13.1404203)(15.401764,12.777564)(15.402087,12.5532086)
-\curveto(15.402199,12.4757102)(15.063741,11.9366501)(14.386506,10.9356994)
-\curveto(13.827845,10.1099996)(12.736286,8.4942494)(11.960821,7.3451433)
-\curveto(10.402667,5.036227)(10.342952,4.95336)(10.309554,5.053673)
-\lineto(10.309554,5.053673)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.41176471 0.3137255 0}
-\pscustom[linewidth=0.00449308,linecolor=curcolor]
-{
-\newpath
-\moveto(10.309554,5.053673)
-\curveto(10.297213,5.090739)(10.254568,5.224284)(10.214786,5.350439)
-\curveto(10.175004,5.476595)(10.082823,5.673844)(10.009938,5.78877)
-\lineto(9.877422,5.997729)
-\lineto(12.350517,9.5694738)
-\curveto(13.710719,11.533933)(14.847658,13.1411429)(14.877048,13.1410503)
-\curveto(15.077672,13.1404203)(15.401764,12.777564)(15.402087,12.5532086)
-\curveto(15.402199,12.4757102)(15.063741,11.9366501)(14.386506,10.9356994)
-\curveto(13.827845,10.1099996)(12.736286,8.4942494)(11.960821,7.3451433)
-\curveto(10.402667,5.036227)(10.342952,4.95336)(10.309554,5.053673)
-\lineto(10.309554,5.053673)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.30447233,linecolor=curcolor]
-{
-\newpath
-\moveto(5.1945148,4.268067)
-\curveto(6.3698651,4.322092)(7.0690913,3.899993)(7.3474594,3.057035)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(5.2264607,2.203274)
-\curveto(5.2607509,2.404355)(5.2623899,2.432862)(5.26734,2.914234)
-\curveto(5.2713909,3.308164)(5.2743132,3.401902)(5.2892505,3.617026)
-\curveto(5.2987302,3.753553)(5.3100233,3.920385)(5.314346,3.987763)
-\lineto(5.3222057,4.110269)
-\lineto(5.3544439,4.114326)
-\curveto(5.3932591,4.119211)(5.6307114,4.110482)(5.725182,4.100698)
-\curveto(5.9209287,4.080423)(6.1387778,4.032499)(6.2855967,3.977414)
-\curveto(6.3824104,3.941089)(6.522894,3.870566)(6.6020583,3.818548)
-\curveto(6.6954729,3.757167)(6.7543906,3.70818)(6.8377849,3.622549)
-\curveto(6.9541066,3.503108)(7.0319085,3.391012)(7.1078828,3.233391)
-\curveto(7.146883,3.15248)(7.2064504,3.000442)(7.201082,2.995514)
-\curveto(7.1915588,2.98677)(6.3732166,2.635355)(6.2474393,2.585997)
-\curveto(6.1924732,2.564428)(6.1242897,2.53502)(6.0959202,2.520646)
-\curveto(5.4903684,2.213838)(5.3195895,2.134153)(5.2345266,2.11872)
-\lineto(5.2113237,2.114512)
-\lineto(5.2264607,2.203274)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.41176471 0.3137255 0}
-\pscustom[linewidth=0.00257906,linecolor=curcolor]
-{
-\newpath
-\moveto(5.2264607,2.203274)
-\curveto(5.2607509,2.404355)(5.2623899,2.432862)(5.26734,2.914234)
-\curveto(5.2713909,3.308164)(5.2743132,3.401902)(5.2892505,3.617026)
-\curveto(5.2987302,3.753553)(5.3100233,3.920385)(5.314346,3.987763)
-\lineto(5.3222057,4.110269)
-\lineto(5.3544439,4.114326)
-\curveto(5.3932591,4.119211)(5.6307114,4.110482)(5.725182,4.100698)
-\curveto(5.9209287,4.080423)(6.1387778,4.032499)(6.2855967,3.977414)
-\curveto(6.3824104,3.941089)(6.522894,3.870566)(6.6020583,3.818548)
-\curveto(6.6954729,3.757167)(6.7543906,3.70818)(6.8377849,3.622549)
-\curveto(6.9541066,3.503108)(7.0319085,3.391012)(7.1078828,3.233391)
-\curveto(7.146883,3.15248)(7.2064504,3.000442)(7.201082,2.995514)
-\curveto(7.1915588,2.98677)(6.3732166,2.635355)(6.2474393,2.585997)
-\curveto(6.1924732,2.564428)(6.1242897,2.53502)(6.0959202,2.520646)
-\curveto(5.4903684,2.213838)(5.3195895,2.134153)(5.2345266,2.11872)
-\lineto(5.2113237,2.114512)
-\lineto(5.2264607,2.203274)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.9137255 0.7764706 0.68627453}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.4233181,3.316866)
-\curveto(7.1356879,3.967102)(6.5162671,4.358319)(5.6736507,4.421928)
-\lineto(5.3398106,4.447129)
-\lineto(5.3613865,4.706131)
-\curveto(5.3732527,4.848583)(5.4071747,5.367251)(5.4367683,5.858727)
-\curveto(5.4663619,6.350204)(5.50006,6.808109)(5.5116523,6.876296)
-\lineto(5.532729,7.0002723)
-\lineto(5.9403792,6.977689)
-\curveto(6.3485451,6.95508)(7.1318979,6.829651)(7.5615934,6.718104)
-\curveto(8.4398778,6.490107)(9.1668327,5.990326)(9.459737,5.413133)
-\curveto(9.670777,4.997264)(9.744467,4.310582)(9.595699,4.146195)
-\curveto(9.524907,4.06797)(9.1684318,3.88999)(8.2715054,3.485056)
-\curveto(7.4360593,3.107875)(7.5093379,3.122406)(7.4233181,3.316866)
-\lineto(7.4233181,3.316866)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.41176471 0.3137255 0}
-\pscustom[linewidth=0.0145893,linecolor=curcolor]
-{
-\newpath
-\moveto(7.4233181,3.316866)
-\curveto(7.1356879,3.967102)(6.5162671,4.358319)(5.6736507,4.421928)
-\lineto(5.3398106,4.447129)
-\lineto(5.3613865,4.706131)
-\curveto(5.3732527,4.848583)(5.4071747,5.367251)(5.4367683,5.858727)
-\curveto(5.4663619,6.350204)(5.50006,6.808109)(5.5116523,6.876296)
-\lineto(5.532729,7.0002723)
-\lineto(5.9403792,6.977689)
-\curveto(6.3485451,6.95508)(7.1318979,6.829651)(7.5615934,6.718104)
-\curveto(8.4398778,6.490107)(9.1668327,5.990326)(9.459737,5.413133)
-\curveto(9.670777,4.997264)(9.744467,4.310582)(9.595699,4.146195)
-\curveto(9.524907,4.06797)(9.1684318,3.88999)(8.2715054,3.485056)
-\curveto(7.4360593,3.107875)(7.5093379,3.122406)(7.4233181,3.316866)
-\lineto(7.4233181,3.316866)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-danger.eps b/Master/texmf-dist/tex/latex/bclogo/bc-danger.eps
index f68b7aa4d75..a358274cea6 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-danger.eps
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-danger.eps
@@ -2,8 +2,8 @@
%%Creator: inkscape 0.46
%%Pages: 1
%%Orientation: Portrait
-%%BoundingBox: 0 1 14 13
-%%HiResBoundingBox: 0.51301584 1.6571435 13.200001 12.742857
+%%BoundingBox: 0 0 14 14
+%%HiResBoundingBox: 0 0 14 14
%%EndComments
%%Page: 1 1
0 14 translate
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-danger.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-danger.pdf
index b36f62a17fe..497b284556d 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-danger.pdf
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-danger.pdf
@@ -3,23 +3,13 @@
3 0 obj
<< /Length 4 0 R
/Filter /FlateDecode
- /Type /XObject
- /Subtype /Form
- /BBox [ 0 0 13.6 13.6 ]
- /Group <<
- /Type /Group
- /S /Transparency
- /CS /DeviceRGB
- >>
- /Resources 2 0 R
>>
stream
-xO
-1S lȣ Q8ݍ"j-!,LÃq80cۮޘBw/n"610"`mp./jp9C0QB5$TbDX-a*8R^'%=uSIutfߎYMd
+xm; 1M6ي(Y}w)G>fcubOǰ߀)D\V:e\\c2VPpGT \?z}li6=QB5$5TbDXFD5kjdڄ &h*ɢ6ia&6νC
endstream
endobj
4 0 obj
- 184
+ 187
endobj
2 0 obj
<<
@@ -48,8 +38,8 @@ endobj
>>
endobj
6 0 obj
-<< /Creator (cairo 1.6.0 (http://cairographics.org))
- /Producer (cairo 1.6.0 (http://cairographics.org))
+<< /Creator (cairo 1.8.6 (http://cairographics.org))
+ /Producer (cairo 1.8.6 (http://cairographics.org))
>>
endobj
7 0 obj
@@ -60,18 +50,18 @@ endobj
xref
0 8
0000000000 65535 f
-0000000736 00000 n
-0000000462 00000 n
+0000000574 00000 n
+0000000300 00000 n
0000000015 00000 n
-0000000440 00000 n
-0000000534 00000 n
-0000000801 00000 n
-0000000926 00000 n
+0000000278 00000 n
+0000000372 00000 n
+0000000639 00000 n
+0000000764 00000 n
trailer
<< /Size 8
/Root 7 0 R
/Info 6 0 R
>>
startxref
-978
+816
%%EOF
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-danger.tex b/Master/texmf-dist/tex/latex/bclogo/bc-danger.tex
deleted file mode 100644
index a13d56208ad..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-danger.tex
+++ /dev/null
@@ -1,62 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,17)
-{
-\newrgbcolor{curcolor}{1 1 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(0.79319443,2.223354)
-\lineto(8.5240635,15.7766465)
-\lineto(16.348076,2.223354)
-\lineto(0.79319443,2.223354)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.30384925,linecolor=curcolor]
-{
-\newpath
-\moveto(0.79319443,2.223354)
-\lineto(8.5240635,15.7766465)
-\lineto(16.348076,2.223354)
-\lineto(0.79319443,2.223354)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(8.3377775,12.0950055)
-\lineto(6.0557745,7.6446709)
-\lineto(8.8500645,7.0782649)
-\lineto(6.2420605,3.639369)
-\lineto(11.271783,7.4019249)
-\lineto(7.7789195,8.1301615)
-\lineto(9.9677809,11.9736325)
-\lineto(8.3377775,12.0950055)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.30384925,linecolor=curcolor]
-{
-\newpath
-\moveto(8.3377775,12.0950055)
-\lineto(6.0557745,7.6446709)
-\lineto(8.8500645,7.0782649)
-\lineto(6.2420605,3.639369)
-\lineto(11.271783,7.4019249)
-\lineto(7.7789195,8.1301615)
-\lineto(9.9677809,11.9736325)
-\lineto(8.3377775,12.0950055)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-dz.eps b/Master/texmf-dist/tex/latex/bclogo/bc-dz.eps
new file mode 100644
index 00000000000..b600bccd957
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-dz.eps
@@ -0,0 +1,108 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: inkscape 0.46
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 0 0 17 17
+%%HiResBoundingBox: 0 0 17 17
+%%EndComments
+%%Page: 1 1
+0 17 translate
+0.8 -0.8 scale
+0 0 0 setrgbcolor
+[] 0 setdash
+1 setlinewidth
+0 setlinejoin
+0 setlinecap
+gsave [1 0 0 1 0 0] concat
+gsave [0.9669195 0 0 0.9760622 0.2505259 0.8433986] concat
+gsave
+1 0 0 setrgbcolor
+newpath
+0.44018835 17.849248 moveto
+-0.17853067 16.99456 0.27899988 16.19412 4.6917498 8.6543442 curveto
+9.0904336 1.1386024 9.6515762 -0.007539934 10.632236 -0.007539934 curveto
+11.635944 -0.007539934 12.084733 0.87385312 16.428019 8.3067665 curveto
+20.74324 15.691651 21.447478 16.578726 20.819994 17.642659 curveto
+20.202536 18.689589 19.007819 18.439232 10.562072 18.465009 curveto
+2.1489565 18.490686 1.0538698 18.696976 0.44018835 17.849248 curveto
+closepath
+eofill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+0.44018835 17.849248 moveto
+-0.17853067 16.99456 0.27899988 16.19412 4.6917498 8.6543442 curveto
+9.0904336 1.1386024 9.6515762 -0.007539934 10.632236 -0.007539934 curveto
+11.635944 -0.007539934 12.084733 0.87385312 16.428019 8.3067665 curveto
+20.74324 15.691651 21.447478 16.578726 20.819994 17.642659 curveto
+20.202536 18.689589 19.007819 18.439232 10.562072 18.465009 curveto
+2.1489565 18.490686 1.0538698 18.696976 0.44018835 17.849248 curveto
+closepath
+stroke
+gsave [0.07011522 0 0 0.06863762 4.654973 4.907322] concat
+gsave
+0.97647059 0.97647059 0.97647059 setrgbcolor
+newpath
+203.87947 171.29917 moveto
+-32.4509 171.29917 lineto
+85.714287 -33.368935 lineto
+203.87947 171.29917 lineto
+closepath
+eofill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0 setlinewidth
+1 setlinejoin
+1 setlinecap
+newpath
+203.87947 171.29917 moveto
+-32.4509 171.29917 lineto
+85.714287 -33.368935 lineto
+203.87947 171.29917 lineto
+closepath
+stroke
+grestore
+gsave [1 0 0 1 0.178571 -0.178571] concat
+0 0 0 setrgbcolor
+[] 0 setdash
+1.4447058 setlinewidth
+0 setlinejoin
+1 setlinecap
+newpath
+8.8212936 9.0354588 moveto
+11.874974 8.7229588 12.297514 9.06189 12.551712 9.5281029 curveto
+13.310215 10.919238 7.5704763 12.413769 7.8468606 13.771983 curveto
+8.1216083 15.122154 10.577781 14.634273 13.662545 14.544987 curveto
+stroke
+gsave
+0 0 0 setrgbcolor
+newpath
+8.9041411 8.5363145 moveto
+8.6419205 8.4222278 7.9151186 8.9926608 7.9102626 9.0687183 curveto
+7.9102626 9.1590369 8.6419205 9.658166 8.9041411 9.5250646 curveto
+9.1663616 9.3919641 9.1663616 8.6504013 8.9041411 8.5363145 curveto
+closepath
+eofill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.28894129 setlinewidth
+0 setlinejoin
+1 setlinecap
+newpath
+8.9041411 8.5363145 moveto
+8.6419205 8.4222278 7.9151186 8.9926608 7.9102626 9.0687183 curveto
+7.9102626 9.1590369 8.6419205 9.658166 8.9041411 9.5250646 curveto
+9.1663616 9.3919641 9.1663616 8.6504013 8.9041411 8.5363145 curveto
+closepath
+stroke
+grestore
+grestore
+grestore
+showpage
+%%EOF
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-dz.pdf
index d3f59b8a0ac..e006a41da83 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.pdf
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-dz.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-etoile.tex b/Master/texmf-dist/tex/latex/bclogo/bc-etoile.tex
deleted file mode 100644
index dda94b68b4f..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-etoile.tex
+++ /dev/null
@@ -1,44 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.45.1
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{1 0.83137256 0}
-\pscustom[fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(12.45535717,4.77678597)
-\lineto(8.46243628,6.90555842)
-\lineto(4.4451564,4.82311912)
-\lineto(5.2358589,9.27843942)
-\lineto(2.01393368,12.45559049)
-\lineto(6.49553559,13.08035741)
-\lineto(8.52155617,17.12638406)
-\lineto(10.50063597,13.05719095)
-\lineto(14.97471078,12.38062187)
-\lineto(11.71624745,9.24095531)
-\lineto(12.45535717,4.77678597)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.5,linecolor=curcolor]
-{
-\newpath
-\moveto(12.45535717,4.77678597)
-\lineto(8.46243628,6.90555842)
-\lineto(4.4451564,4.82311912)
-\lineto(5.2358589,9.27843942)
-\lineto(2.01393368,12.45559049)
-\lineto(6.49553559,13.08035741)
-\lineto(8.52155617,17.12638406)
-\lineto(10.50063597,13.05719095)
-\lineto(14.97471078,12.38062187)
-\lineto(11.71624745,9.24095531)
-\lineto(12.45535717,4.77678597)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-fleur.tex b/Master/texmf-dist/tex/latex/bclogo/bc-fleur.tex
deleted file mode 100644
index 8662663d6da..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-fleur.tex
+++ /dev/null
@@ -1,184 +0,0 @@
-\psset{xunit=.5pt,yunit=.5pt,runit=.5pt}
-\begin{pspicture}(34,48)
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.99999994,linecolor=curcolor]
- {%
- \newpath
- \moveto(13.086997,32.715)
- \curveto(13.086997,32.715)(20.151267,17.843922)(15.12065,7.572144)
- }
- }
- {%
- \newrgbcolor{curcolor}{1 0.76078433 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(13.142856,37.793226)
- \curveto(13.142856,37.793226)(15.01946,40.8174678)(18.303085,42.0545745)
- \curveto(21.938701,43.4242937)(23.951458,39.5989572)(18.889475,36.575698)
- \curveto(16.594614,35.205096)(14.432913,35.35817)(14.432913,35.35817)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(13.142856,37.793226)
- \curveto(13.142856,37.793226)(15.01946,40.8174678)(18.303085,42.0545745)
- \curveto(21.938701,43.4242937)(23.951458,39.5989572)(18.889475,36.575698)
- \curveto(16.594614,35.205096)(14.432913,35.35817)(14.432913,35.35817)
- }
- }
- {%
- \newrgbcolor{curcolor}{1 0.76078433 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(13.571428,32.552146)
- \curveto(13.571428,32.552146)(15.356491,29.517482)(18.479939,28.276114)
- \curveto(21.938208,26.901675)(23.852782,30.740193)(19.037724,33.773869)
- \curveto(16.854808,35.149194)(14.798555,34.995593)(14.798555,34.995593)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(13.571428,32.552146)
- \curveto(13.571428,32.552146)(15.356491,29.517482)(18.479939,28.276114)
- \curveto(21.938208,26.901675)(23.852782,30.740193)(19.037724,33.773869)
- \curveto(16.854808,35.149194)(14.798555,34.995593)(14.798555,34.995593)
- }
- }
- {%
- \newrgbcolor{curcolor}{1 0.76078433 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(12.642859,37.991827)
- \curveto(12.642859,37.991827)(11.94037,43.6329486)(8.0353193,44.6755487)
- \curveto(5.549462,45.3392415)(5.151303,41.4221548)(7.4104473,38.6309927)
- \curveto(8.6399763,37.111916)(9.1857033,36.292375)(9.1857033,36.292375)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(12.642859,37.991827)
- \curveto(12.642859,37.991827)(11.94037,43.6329486)(8.0353193,44.6755487)
- \curveto(5.549462,45.3392415)(5.151303,41.4221548)(7.4104473,38.6309927)
- \curveto(8.6399763,37.111916)(9.1857033,36.292375)(9.1857033,36.292375)
- }
- }
- {%
- \newrgbcolor{curcolor}{1 0.76078433 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(10.535714,32.701024)
- \curveto(9.7444813,30.541396)(9.1733293,28.214949)(10.217462,26.139278)
- \curveto(11.865121,22.863831)(15.641319,23.4605)(14.194284,28.494176)
- \curveto(13.490166,30.943531)(13.027579,32.144471)(13.027579,32.144471)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(10.535714,32.701024)
- \curveto(9.7444813,30.541396)(9.1733293,28.214949)(10.217462,26.139278)
- \curveto(11.865121,22.863831)(15.641319,23.4605)(14.194284,28.494176)
- \curveto(13.490166,30.943531)(13.027579,32.144471)(13.027579,32.144471)
- }
- }
- {%
- \newrgbcolor{curcolor}{1 0.76078433 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(9.7499973,33.236161)
- \curveto(9.7499973,33.236161)(8.5266513,30.796341)(5.136241,29.681423)
- \curveto(1.3823934,28.446992)(-0.69581861,31.894497)(4.530781,34.619147)
- \curveto(6.900273,35.854373)(9.1322733,35.716418)(9.1322733,35.716418)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(9.7499973,33.236161)
- \curveto(9.7499973,33.236161)(8.5266513,30.796341)(5.136241,29.681423)
- \curveto(1.3823934,28.446992)(-0.69581861,31.894497)(4.530781,34.619147)
- \curveto(6.900273,35.854373)(9.1322733,35.716418)(9.1322733,35.716418)
- }
- }
- {%
- \newrgbcolor{curcolor}{1 1 1}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(14.85714206,35.07214225)
- \curveto(14.85714206,33.49499935)(13.54514204,32.21499932)(11.9285706,32.21499932)
- \curveto(10.31199915,32.21499932)(8.99999913,33.49499935)(8.99999913,35.07214225)
- \curveto(8.99999913,36.64928514)(10.31199915,37.92928517)(11.9285706,37.92928517)
- \curveto(13.54514204,37.92928517)(14.85714206,36.64928514)(14.85714206,35.07214225)
- \closepath
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.60000002,linecolor=curcolor]
- {%
- \newpath
- \moveto(14.85714206,35.07214225)
- \curveto(14.85714206,33.49499935)(13.54514204,32.21499932)(11.9285706,32.21499932)
- \curveto(10.31199915,32.21499932)(8.99999913,33.49499935)(8.99999913,35.07214225)
- \curveto(8.99999913,36.64928514)(10.31199915,37.92928517)(11.9285706,37.92928517)
- \curveto(13.54514204,37.92928517)(14.85714206,36.64928514)(14.85714206,35.07214225)
- \closepath
- }
- }
- {%
- \newrgbcolor{curcolor}{0.17647059 0.60392159 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(17,16.215)
- \curveto(26.285713,28.643571)(31.285714,26.929285)(32.428571,27.215)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(17,16.215)
- \curveto(26.285713,28.643571)(31.285714,26.929285)(32.428571,27.215)
- }
- }
- {%
- \newrgbcolor{curcolor}{0.17647059 0.60392159 0}
- \pscustom[fillstyle=solid,fillcolor=curcolor]
- {%
- \newpath
- \moveto(17.500001,16.572143)
- \curveto(28.457673,17.857858)(31.489419,27.2586)(32.642858,27.429286)
- }
- }
- {%
- \newrgbcolor{curcolor}{0 0 0}
- \pscustom[linewidth=0.5,linecolor=curcolor]
- {%
- \newpath
- \moveto(17.500001,16.572143)
- \curveto(28.457673,17.857858)(31.489419,27.2586)(32.642858,27.429286)
- }
- }
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-info.eps b/Master/texmf-dist/tex/latex/bclogo/bc-info.eps
new file mode 100644
index 00000000000..4aac9b47cc2
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-info.eps
@@ -0,0 +1,129 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: inkscape 0.46
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 0 0 14 14
+%%HiResBoundingBox: 0 0 14 14
+%%EndComments
+%%Page: 1 1
+0 14 translate
+0.8 -0.8 scale
+0 0 0 setrgbcolor
+[] 0 setdash
+1 setlinewidth
+0 setlinejoin
+0 setlinecap
+gsave [1 0 0 1 0 0] concat
+gsave [1 0 0 1 -373.0665 -595.91654] concat
+gsave [0.1532499 0 0 0.1532499 365.39836 587.50327] concat
+gsave
+1 0.30980393 0.38039216 setrgbcolor
+newpath
+153.5 110.86218 moveto
+153.5 137.08218 132.22 158.36218 106 158.36218 curveto
+79.78 158.36218 58.5 137.08218 58.5 110.86218 curveto
+58.5 84.642183 79.78 63.362183 106 63.362183 curveto
+132.22 63.362183 153.5 84.642183 153.5 110.86218 curveto
+closepath
+fill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+3.2 setlinewidth
+1 setlinejoin
+1 setlinecap
+newpath
+153.5 110.86218 moveto
+153.5 137.08218 132.22 158.36218 106 158.36218 curveto
+79.78 158.36218 58.5 137.08218 58.5 110.86218 curveto
+58.5 84.642183 79.78 63.362183 106 63.362183 curveto
+132.22 63.362183 153.5 84.642183 153.5 110.86218 curveto
+closepath
+stroke
+grestore
+gsave [0.1432621 0 0 0.1432621 366.45706 588.61053] concat
+gsave
+0.96862745 0.72549021 0 setrgbcolor
+newpath
+153.5 110.86218 moveto
+153.5 137.08218 132.22 158.36218 106 158.36218 curveto
+79.78 158.36218 58.5 137.08218 58.5 110.86218 curveto
+58.5 84.642183 79.78 63.362183 106 63.362183 curveto
+132.22 63.362183 153.5 84.642183 153.5 110.86218 curveto
+closepath
+fill
+grestore
+1 1 1 setrgbcolor
+[] 0 setdash
+3.2 setlinewidth
+1 setlinejoin
+1 setlinecap
+newpath
+153.5 110.86218 moveto
+153.5 137.08218 132.22 158.36218 106 158.36218 curveto
+79.78 158.36218 58.5 137.08218 58.5 110.86218 curveto
+58.5 84.642183 79.78 63.362183 106 63.362183 curveto
+132.22 63.362183 153.5 84.642183 153.5 110.86218 curveto
+closepath
+stroke
+grestore
+gsave
+1 0.80392158 0.0039215689 setrgbcolor
+newpath
+381.62244 597.9418 moveto
+378.27999 597.9418 375.5191 600.49084 375.07423 603.80361 curveto
+376.68165 605.65275 379.004 606.83395 381.59404 606.87516 curveto
+381.64066 606.8759 381.68738 606.87627 381.73418 606.87627 curveto
+384.27894 606.87627 386.57276 605.7762 388.20044 604.01816 curveto
+387.84797 600.60254 385.03614 597.9418 381.62244 597.9418 curveto
+closepath
+fill
+grestore
+gsave
+1 1 1 setrgbcolor
+newpath
+381.64027 599.09696 moveto
+380.7179 599.09696 379.97174 599.86523 379.97174 600.81493 curveto
+379.97174 601.76464 380.71789 602.53822 381.64027 602.53822 curveto
+382.56264 602.53822 383.31396 601.76464 383.31396 600.81493 curveto
+383.31396 599.86522 382.56264 599.09696 381.64027 599.09696 curveto
+closepath
+380.82925 603.42115 moveto
+380.35236 603.42115 379.97174 603.81837 379.97174 604.30939 curveto
+379.97174 609.00058 lineto
+379.97174 609.4916 380.35236 609.88881 380.82925 609.88881 curveto
+382.45129 609.88881 lineto
+382.92817 609.88881 383.31396 609.4916 383.31396 609.00058 curveto
+383.31396 604.30939 lineto
+383.31396 603.81837 382.92817 603.42115 382.45129 603.42115 curveto
+380.82925 603.42115 lineto
+closepath
+eofill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.47543553 setlinewidth
+1 setlinejoin
+1 setlinecap
+newpath
+381.64027 599.09696 moveto
+380.7179 599.09696 379.97174 599.86523 379.97174 600.81493 curveto
+379.97174 601.76464 380.71789 602.53822 381.64027 602.53822 curveto
+382.56264 602.53822 383.31396 601.76464 383.31396 600.81493 curveto
+383.31396 599.86522 382.56264 599.09696 381.64027 599.09696 curveto
+closepath
+380.82925 603.42115 moveto
+380.35236 603.42115 379.97174 603.81837 379.97174 604.30939 curveto
+379.97174 609.00058 lineto
+379.97174 609.4916 380.35236 609.88881 380.82925 609.88881 curveto
+382.45129 609.88881 lineto
+382.92817 609.88881 383.31396 609.4916 383.31396 609.00058 curveto
+383.31396 604.30939 lineto
+383.31396 603.81837 382.92817 603.42115 382.45129 603.42115 curveto
+380.82925 603.42115 lineto
+closepath
+stroke
+grestore
+grestore
+showpage
+%%EOF
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-info.pdf
index b5dc79587ac..3f99662f124 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.pdf
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-info.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-inter.eps b/Master/texmf-dist/tex/latex/bclogo/bc-inter.eps
index 86ad669330a..547e93bf8d9 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-inter.eps
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-inter.eps
@@ -2,8 +2,8 @@
%%Creator: inkscape 0.46
%%Pages: 1
%%Orientation: Portrait
-%%BoundingBox: 3 1 12 15
-%%HiResBoundingBox: 3.2311134 1.7243579 11.174055 14.848938
+%%BoundingBox: 0 0 14 16
+%%HiResBoundingBox: 0 0 14 16
%%EndComments
%%Page: 1 1
0 16 translate
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-inter.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-inter.pdf
index 0c3d6676f2a..185553ffd99 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-inter.pdf
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-inter.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-inter.tex b/Master/texmf-dist/tex/latex/bclogo/bc-inter.tex
deleted file mode 100644
index 1e68142e302..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-inter.tex
+++ /dev/null
@@ -1,86 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{0.62352943 0.00784314 0.00784314}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(6.5507882,6.17318)
-\lineto(6.0257107,6.323427)
-\curveto(6.3552204,7.249043)(6.7102085,7.989293)(7.0906763,8.54418)
-\curveto(7.4818079,9.104097)(8.1634385,9.83992)(9.1355711,10.7516523)
-\curveto(9.8897514,11.4505184)(10.407913,12.0024242)(10.690058,12.4073716)
-\curveto(10.974322,12.8197847)(11.182827,13.257934)(11.315573,13.7218209)
-\curveto(11.587453,14.6720124)(11.513396,15.5107471)(11.0934,16.2380275)
-\curveto(10.681921,16.9628405)(10.057832,17.4449617)(9.2211339,17.6843921)
-\curveto(8.4783326,17.8969223)(7.8496028,17.910891)(7.3349424,17.7262982)
-\curveto(6.8202668,17.5416785)(6.5115517,17.2698099)(6.4087961,16.9106915)
-\curveto(6.3295767,16.6338487)(6.3602341,16.2567769)(6.5007684,15.7794752)
-\curveto(6.6412892,15.3021503)(6.6815806,14.958747)(6.6216427,14.7492644)
-\curveto(6.5445641,14.4799056)(6.3810821,14.2798026)(6.1311962,14.1489548)
-\curveto(5.8834384,14.0255691)(5.6186884,14.0041911)(5.3369454,14.084821)
-\curveto(4.9783507,14.1874184)(4.6935321,14.434854)(4.4824887,14.8271284)
-\curveto(4.2821145,15.2244205)(4.2611424,15.6999021)(4.4195724,16.2535744)
-\curveto(4.6614873,17.0990167)(5.2896606,17.7287194)(6.304094,18.1426844)
-\curveto(7.3185142,18.5566216)(8.5343681,18.5608256)(9.9516594,18.1552965)
-\curveto(11.710442,17.6520184)(12.875472,16.8329856)(13.446751,15.6981952)
-\curveto(13.873063,14.8638787)(13.97169,14.0464447)(13.742629,13.2458907)
-\curveto(13.586331,12.6997033)(13.28489,12.1788712)(12.838306,11.6833927)
-\curveto(12.400235,11.1854558)(11.681408,10.6585908)(10.681825,10.102795)
-\curveto(9.092723,9.229998)(8.0834428,8.575787)(7.6539816,8.14016)
-\curveto(7.2351822,7.709564)(6.8674521,7.053905)(6.5507882,6.17318)
-\moveto(5.973289,4.832849)
-\curveto(6.3745611,4.718027)(6.6764806,4.498075)(6.8790499,4.172996)
-\curveto(7.0922833,3.852956)(7.148593,3.51711)(7.0479783,3.16546)
-\curveto(6.9494912,2.821294)(6.7240514,2.566069)(6.3716603,2.399784)
-\curveto(6.0213973,2.240986)(5.649898,2.217776)(5.2571633,2.330152)
-\curveto(4.8644175,2.442534)(4.561427,2.658744)(4.348191,2.978783)
-\curveto(4.1456248,3.303864)(4.0935844,3.638488)(4.1920693,3.982654)
-\curveto(4.2926862,4.334304)(4.5138567,4.590751)(4.8555806,4.751995)
-\curveto(5.2079731,4.918277)(5.5805424,4.945229)(5.973289,4.832849)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.20970075,linecolor=curcolor]
-{
-\newpath
-\moveto(6.5507882,6.17318)
-\lineto(6.0257107,6.323427)
-\curveto(6.3552204,7.249043)(6.7102085,7.989293)(7.0906763,8.54418)
-\curveto(7.4818079,9.104097)(8.1634385,9.83992)(9.1355711,10.7516523)
-\curveto(9.8897514,11.4505184)(10.407913,12.0024242)(10.690058,12.4073716)
-\curveto(10.974322,12.8197847)(11.182827,13.257934)(11.315573,13.7218209)
-\curveto(11.587453,14.6720124)(11.513396,15.5107471)(11.0934,16.2380275)
-\curveto(10.681921,16.9628405)(10.057832,17.4449617)(9.2211339,17.6843921)
-\curveto(8.4783326,17.8969223)(7.8496028,17.910891)(7.3349424,17.7262982)
-\curveto(6.8202668,17.5416785)(6.5115517,17.2698099)(6.4087961,16.9106915)
-\curveto(6.3295767,16.6338487)(6.3602341,16.2567769)(6.5007684,15.7794752)
-\curveto(6.6412892,15.3021503)(6.6815806,14.958747)(6.6216427,14.7492644)
-\curveto(6.5445641,14.4799056)(6.3810821,14.2798026)(6.1311962,14.1489548)
-\curveto(5.8834384,14.0255691)(5.6186884,14.0041911)(5.3369454,14.084821)
-\curveto(4.9783507,14.1874184)(4.6935321,14.434854)(4.4824887,14.8271284)
-\curveto(4.2821145,15.2244205)(4.2611424,15.6999021)(4.4195724,16.2535744)
-\curveto(4.6614873,17.0990167)(5.2896606,17.7287194)(6.304094,18.1426844)
-\curveto(7.3185142,18.5566216)(8.5343681,18.5608256)(9.9516594,18.1552965)
-\curveto(11.710442,17.6520184)(12.875472,16.8329856)(13.446751,15.6981952)
-\curveto(13.873063,14.8638787)(13.97169,14.0464447)(13.742629,13.2458907)
-\curveto(13.586331,12.6997033)(13.28489,12.1788712)(12.838306,11.6833927)
-\curveto(12.400235,11.1854558)(11.681408,10.6585908)(10.681825,10.102795)
-\curveto(9.092723,9.229998)(8.0834428,8.575787)(7.6539816,8.14016)
-\curveto(7.2351822,7.709564)(6.8674521,7.053905)(6.5507882,6.17318)
-\moveto(5.973289,4.832849)
-\curveto(6.3745611,4.718027)(6.6764806,4.498075)(6.8790499,4.172996)
-\curveto(7.0922833,3.852956)(7.148593,3.51711)(7.0479783,3.16546)
-\curveto(6.9494912,2.821294)(6.7240514,2.566069)(6.3716603,2.399784)
-\curveto(6.0213973,2.240986)(5.649898,2.217776)(5.2571633,2.330152)
-\curveto(4.8644175,2.442534)(4.561427,2.658744)(4.348191,2.978783)
-\curveto(4.1456248,3.303864)(4.0935844,3.638488)(4.1920693,3.982654)
-\curveto(4.2926862,4.334304)(4.5138567,4.590751)(4.8555806,4.751995)
-\curveto(5.2079731,4.918277)(5.5805424,4.945229)(5.973289,4.832849)
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-lampe.eps b/Master/texmf-dist/tex/latex/bclogo/bc-lampe.eps
new file mode 100644
index 00000000000..75625dd9ec6
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-lampe.eps
@@ -0,0 +1,179 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 21
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%etat (Utilisateur)
+1 setlinejoin
+%Mligne1 (Utilisateur)
+0 0 0 rgb
+0.6 setlinewidth
+7.3876 3.1446 m
+9.7267 3.1446 l
+9.7267 5.4837 l
+7.3876 5.4837 l
+closepath
+
+gs 0 0 0 rgb fill gr s
+%Mbezier3 (Utilisateur)
+9.7267 5.4837 m
+9.7267 6.2634 lineto
+9.7267 8.6025 10.8962 8.9923 11.6759 10.1618 curveto
+12.8454 12.1111 12.0657 15.6197 8.5571 15.6197 curveto
+5.0485 15.6197 4.2688 12.1111 5.4384 10.1618 curveto
+6.2181 8.9923 7.3876 8.6025 7.3876 6.2634 curveto
+7.3876 5.4837 lineto
+gs 1 1 0 rgb fill gr s
+%Mligne2 (Utilisateur)
+6.6079 4.3141 m
+10.5064 4.3141 l
+
+s
+%Mbezier4 (Utilisateur)
+thinlines
+8.5571 3.5345 m
+8.947 7.0431 8.1673 10.1618 10.1165 11.7212 curveto
+9.3368 12.8908 7.3876 12.5009 6.9977 11.7212 curveto
+8.947 10.1618 8.1673 7.0431 8.5571 3.5345 curveto
+s
+%Mligne4 (Utilisateur)
+0.6 setlinewidth
+4.6587 16.0095 m
+2.3196 18.3486 l
+
+s
+%Mligne5 (Utilisateur)
+8.5571 17.5689 m
+8.5571 20.2979 l
+
+s
+%Mligne6 (Utilisateur)
+12.4556 15.6197 m
+14.8822 17.6618 l
+
+s
+%Mligne8 (Utilisateur)
+13.6251 12.8908 m
+15.9642 12.8908 l
+
+s
+%Mligne9 (Utilisateur)
+3.4891 12.8908 m
+0.7602 12.8908 l
+
+s
+%Controles (Utilisateur)
+%Selection (Utilisateur)
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pdf
new file mode 100644
index 00000000000..ac678291958
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pgf b/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pgf
deleted file mode 100644
index b7f3fd56fbe..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pgf
+++ /dev/null
@@ -1,33 +0,0 @@
-% TeXgraph version 1.94 beta-7.3
-\begin{pgfpicture}{-0.3019cm}{-0.3447cm}{0.2881cm}{0.4053cm}%
-\pgfsetxvec{\pgfxy(0.055,0)}
-\pgfsetyvec{\pgfxy(0,0.055)}
-\pgfsetroundjoin%
-\pgfsetstrokecolor{black}
-\pgfsetlinewidth{0.6pt}
-\pgfmoveto{\pgfxy(-0.75,-4.25)}\pgflineto{\pgfxy(0.75,-4.25)}\pgflineto{\pgfxy(0.75,-2.75)}
-\pgflineto{\pgfxy(-0.75,-2.75)}\pgfclosepath
-\pgfsetfillcolor{black}
-\pgffillstroke
-\pgfmoveto{\pgfxy(0.75,-2.75)}
-\pgflineto{\pgfxy(0.75,-2.25)}
-\pgfcurveto{\pgfxy(0.75,-0.75)}{\pgfxy(1.5,-0.5)}{\pgfxy(2,0.25)}
-\pgfcurveto{\pgfxy(2.75,1.5)}{\pgfxy(2.25,3.75)}{\pgfxy(0,3.75)}
-\pgfcurveto{\pgfxy(-2.25,3.75)}{\pgfxy(-2.75,1.5)}{\pgfxy(-2,0.25)}
-\pgfcurveto{\pgfxy(-1.5,-0.5)}{\pgfxy(-0.75,-0.75)}{\pgfxy(-0.75,-2.25)}
-\pgflineto{\pgfxy(-0.75,-2.75)}
-\pgfsetfillcolor{rgb,1:red,1;green,1;blue,0}\pgffillstroke
-\pgfxyline(-1.25,-3.5)(1.25,-3.5)
-\pgfsetlinewidth{0.2pt}
-\pgfmoveto{\pgfxy(-0,-4)}
-\pgfcurveto{\pgfxy(0.25,-1.75)}{\pgfxy(-0.25,0.25)}{\pgfxy(1,1.25)}
-\pgfcurveto{\pgfxy(0.5,2)}{\pgfxy(-0.75,1.75)}{\pgfxy(-1,1.25)}
-\pgfcurveto{\pgfxy(0.25,0.25)}{\pgfxy(-0.25,-1.75)}{\pgfxy(-0,-4)}
-\pgfstroke
-\pgfsetlinewidth{0.6pt}
-\pgfxyline(-2.5,4)(-4,5.5)
-\pgfxyline(0,5)(0,6.75)
-\pgfxyline(2.5,3.75)(4.0562,5.0595)
-\pgfxyline(3.25,2)(4.75,2)
-\pgfxyline(-3.25,2)(-5,2)
-\end{pgfpicture}%
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pst b/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pst
deleted file mode 100644
index 644c55fe8e6..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-lampe.pst
+++ /dev/null
@@ -1,30 +0,0 @@
-% TeXgraph version 1.94 beta-7.3
-\psset{xunit=0.055cm, yunit=0.055cm}
-\begin{pspicture}(-5.4875,-6.2666)(5.2375,7.3669)%
-\pstVerb{1 setlinejoin}%
-\psset{linecolor={black},linewidth=0.6pt,fillstyle=solid,fillcolor={black}}
-\pspolygon(-0.75,-4.25)(0.75,-4.25)(0.75,-2.75)(-0.75,-2.75)
-\psset{fillcolor=[rgb]{1,1,0}}
-\pscustom{%
-\psline(0.75,-2.75)(0.75,-2.25)
-\psbezier(0.75,-0.75)(1.5,-0.5)(2,0.25)
-\psbezier(2.75,1.5)(2.25,3.75)(0,3.75)
-\psbezier(-2.25,3.75)(-2.75,1.5)(-2,0.25)
-\psbezier(-1.5,-0.5)(-0.75,-0.75)(-0.75,-2.25)
-\psline(-0.75,-2.75)
-}
-\psset{fillstyle=none}
-\psline(-1.25,-3.5)(1.25,-3.5)
-\psset{linewidth=0.2pt}
-\pscustom{%
-\psbezier(-0,-4)(0.25,-1.75)(-0.25,0.25)(1,1.25)
-\psbezier(0.5,2)(-0.75,1.75)(-1,1.25)
-\psbezier(0.25,0.25)(-0.25,-1.75)(-0,-4)
-}
-\psset{linewidth=0.6pt}
-\psline(-2.5,4)(-4,5.5)
-\psline(0,5)(0,6.75)
-\psline(2.5,3.75)(4.0562,5.0595)
-\psline(3.25,2)(4.75,2)
-\psline(-3.25,2)(-5,2)
-\end{pspicture}%
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-note.tex b/Master/texmf-dist/tex/latex/bclogo/bc-note.tex
deleted file mode 100644
index 16a8585d8e7..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-note.tex
+++ /dev/null
@@ -1,28 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.45.1
-%%Please note this file requires PSTricks extensions
-\psset{xunit=.5pt,yunit=.5pt,runit=.5pt}
-\begin{pspicture}(34,47)
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(17.453785,39.4681256)
-\curveto(17.210827,39.4661856)(17.018301,39.2876315)(17.022142,39.0677827)
-\lineto(17.440203,15.109074)
-\curveto(15.94236,16.003076)(13.337054,16.135874)(10.665265,15.303127)
-\curveto(7.0374444,14.172402)(4.6979208,11.702343)(5.4431303,9.77953)
-\curveto(6.1883322,7.856686)(9.7361558,7.198807)(13.364,8.329494)
-\curveto(16.916224,9.436665)(19.219867,11.849487)(18.615263,13.754129)
-\lineto(18.316202,30.892299)
-\curveto(21.899216,30.732626)(29.935479,30.160933)(25.930239,19.790706)
-\curveto(28.091196,22.698767)(29.79154,26.089365)(26.644551,30.173417)
-\curveto(24.85159,32.500282)(19.310296,33.624539)(18.196765,37.737661)
-\lineto(18.173404,39.0769696)
-\curveto(18.169556,39.2968184)(17.970852,39.4722464)(17.727894,39.4702941)
-\lineto(17.453785,39.4681256)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-orne.tex b/Master/texmf-dist/tex/latex/bclogo/bc-orne.tex
deleted file mode 100644
index 905757c9347..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-orne.tex
+++ /dev/null
@@ -1,139 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(15.757301,10.1730689)
-\curveto(15.757301,14.5792167)(12.55568,18.1511053)(8.6062811,18.1511053)
-\curveto(4.6568816,18.1511053)(1.4552607,14.5792167)(1.4552607,10.1730689)
-\curveto(1.4552607,5.766921)(4.6568816,2.195033)(8.6062811,2.195033)
-\curveto(12.55568,2.195033)(15.757301,5.766921)(15.757301,10.1730689)
-\lineto(15.757301,10.1730689)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=1.12622058,linecolor=curcolor]
-{
-\newpath
-\moveto(15.757301,10.1730689)
-\curveto(15.757301,14.5792167)(12.55568,18.1511053)(8.6062811,18.1511053)
-\curveto(4.6568816,18.1511053)(1.4552607,14.5792167)(1.4552607,10.1730689)
-\curveto(1.4552607,5.766921)(4.6568816,2.195033)(8.6062811,2.195033)
-\curveto(12.55568,2.195033)(15.757301,5.766921)(15.757301,10.1730689)
-\lineto(15.757301,10.1730689)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(8.7224265,14.7423102)
-\curveto(7.588097,15.0938132)(7.3791072,16.5970661)(8.5907791,17.0923735)
-\curveto(10.325193,17.8013644)(11.12384,15.1017338)(10.015905,13.9223267)
-\curveto(8.7244086,12.547513)(6.3369232,13.1591652)(5.9309984,15.1760664)
-\curveto(5.7461948,16.0942567)(6.29821,17.3032802)(6.9364408,17.8248851)
-\curveto(2.8647377,16.6120902)(1.3328361,12.6056434)(1.6361808,9.392678)
-\curveto(2.1666189,10.2501491)(2.5253027,11.0561896)(3.4359057,11.5104765)
-\curveto(5.6569588,12.6185022)(7.876318,10.6780097)(10.04395,12.376633)
-\curveto(12.088249,13.9786215)(11.534446,17.7026552)(8.7224265,17.6716042)
-\curveto(6.8100675,17.6504842)(5.7680002,14.2794253)(7.929963,13.9057076)
-\curveto(8.6902309,13.7742876)(9.6055527,14.0584855)(9.930146,14.8999522)
-\curveto(10.21949,15.6500142)(9.6383553,16.6491)(8.8571401,16.5486293)
-\curveto(7.838996,16.4176756)(8.3800317,15.2566736)(8.7224265,14.7423102)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(11.062344,17.5210383)
-\curveto(11.731896,16.9818797)(12.126591,16.0171427)(12.134492,15.2112571)
-\curveto(12.163543,12.2520576)(9.2579133,10.727628)(9.6873376,7.54827)
-\curveto(10.042883,4.915883)(13.264822,3.991468)(14.463861,6.538303)
-\curveto(15.436305,8.603782)(12.890985,11.0251413)(11.631244,8.843285)
-\curveto(11.252571,8.187449)(11.244059,7.131418)(11.792364,6.58214)
-\curveto(12.295243,6.078359)(13.290416,6.216544)(13.526899,6.983434)
-\curveto(13.857165,8.054403)(12.74193,8.064233)(12.158668,7.837439)
-\curveto(12.769168,8.679341)(14.074884,8.562459)(14.127145,7.2591)
-\curveto(14.223544,4.854764)(10.93029,5.379265)(10.73128,7.54827)
-\curveto(10.482108,10.7370547)(14.616647,11.6003637)(15.153636,7.746076)
-\curveto(16.316451,11.5251629)(14.741739,15.8906791)(11.062344,17.5210383)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(4.6493674,8.313917)
-\curveto(5.3118613,7.593007)(4.6170139,6.496672)(3.7247426,6.627085)
-\curveto(1.5665667,6.942561)(2.804544,10.6511699)(4.9136934,9.955114)
-\curveto(6.685366,9.370426)(7.4069577,7.023117)(5.7727441,5.558884)
-\curveto(4.8900388,4.879686)(3.8710648,4.760713)(3.112513,5.418779)
-\curveto(5.4004769,2.068531)(10.266063,1.335882)(13.31335,4.586502)
-\curveto(12.404073,4.281247)(10.709122,4.219926)(9.6854249,5.424448)
-\curveto(8.1757283,7.200823)(8.2850136,9.716903)(5.9709981,10.7784293)
-\curveto(3.5203387,11.9026473)(0.89707851,8.89951)(2.7620661,6.461536)
-\curveto(4.0615457,4.762812)(7.0120847,6.361343)(5.7426724,8.456273)
-\curveto(5.3373811,9.125125)(4.4747532,9.578079)(3.7492049,9.23877)
-\curveto(3.1940277,8.979123)(2.9850393,7.886218)(3.4258419,7.409267)
-\curveto(4.0733345,6.708648)(4.6064272,7.6929)(4.6493674,8.313917)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(1.6258482,9.872053)
-\curveto(1.5521282,11.0787141)(1.8471731,12.5839726)(2.3921652,13.781643)
-\curveto(3.0494219,15.2260263)(4.0061981,16.3128718)(5.2976766,17.0821466)
-\curveto(5.6468189,17.2901149)(6.3368981,17.6151993)(6.5917372,17.6917562)
-\curveto(6.6704678,17.7154084)(6.7597679,17.7454129)(6.7901803,17.7584326)
-\curveto(6.820593,17.7714523)(6.7684764,17.6940324)(6.6743655,17.586387)
-\curveto(6.198552,17.0421457)(5.8977204,16.263971)(5.8958095,15.5724642)
-\curveto(5.8930314,14.5674406)(6.5329256,13.6635768)(7.5004954,13.3058093)
-\curveto(7.7536142,13.212216)(7.8455377,13.1995624)(8.2884956,13.1973345)
-\curveto(8.7495144,13.1950161)(8.8157447,13.2042433)(9.1098307,13.3117714)
-\curveto(10.014578,13.642578)(10.527132,14.373017)(10.527132,15.3315581)
-\curveto(10.527132,16.1201177)(10.191964,16.8197864)(9.6854051,17.0886816)
-\curveto(9.4192082,17.2299857)(9.0004179,17.2482408)(8.6772304,17.132628)
-\curveto(8.077573,16.9181141)(7.7691318,16.5181783)(7.7691318,15.9551591)
-\curveto(7.7691318,15.4887037)(8.0435532,15.0505883)(8.4769948,14.8250534)
-\curveto(8.5806685,14.7711071)(8.6798304,14.7328886)(8.697352,14.7401219)
-\curveto(8.7148732,14.7473546)(8.6664853,14.8686077)(8.5898218,15.0095725)
-\curveto(8.3054092,15.5325349)(8.2178754,16.0203223)(8.3680922,16.2451731)
-\curveto(8.4981741,16.4398852)(8.6550124,16.5115369)(8.951132,16.5115369)
-\curveto(9.2681815,16.5115369)(9.4315222,16.4365901)(9.6445671,16.1933639)
-\curveto(9.9737509,15.8175445)(10.07061,15.2480138)(9.8758896,14.8331944)
-\curveto(9.5420208,14.1219481)(8.6819974,13.7516742)(7.831104,13.9528348)
-\curveto(7.0584945,14.1354888)(6.6634561,14.7499509)(6.7698714,15.6035324)
-\curveto(6.8664084,16.3778749)(7.3099289,17.0734875)(7.9210152,17.4089734)
-\curveto(8.2864774,17.6096122)(8.5499829,17.6667324)(8.9690412,17.6361555)
-\curveto(9.6510569,17.5863918)(10.107157,17.3666784)(10.549272,16.874921)
-\curveto(10.857569,16.5320082)(11.028373,16.2168431)(11.15768,15.7522865)
-\curveto(11.257835,15.3924632)(11.251693,14.4916067)(11.146645,14.1338849)
-\curveto(10.86459,13.1733903)(10.355464,12.5273598)(9.517686,12.0669017)
-\curveto(8.7304028,11.6341975)(8.0174452,11.5764622)(6.2826768,11.8049312)
-\curveto(5.5836937,11.8969874)(4.616279,11.8963009)(4.2276875,11.8034727)
-\curveto(3.4124572,11.6087269)(2.8293925,11.2265783)(2.3527805,10.5746335)
-\curveto(2.2795388,10.474447)(2.0917588,10.1813801)(1.9354925,9.923374)
-\lineto(1.6513719,9.454273)
-\lineto(1.6258482,9.872053)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-ours.tex b/Master/texmf-dist/tex/latex/bclogo/bc-ours.tex
deleted file mode 100644
index db6d9211624..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-ours.tex
+++ /dev/null
@@ -1,302 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{0.61176473 0.30980393 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.63392869,14.48660738)
-\curveto(7.63392869,13.21750027)(6.54392873,12.1875003)(5.20089308,12.1875003)
-\curveto(3.85785742,12.1875003)(2.76785746,13.21750027)(2.76785746,14.48660738)
-\curveto(2.76785746,15.75571448)(3.85785742,16.78571445)(5.20089308,16.78571445)
-\curveto(6.54392873,16.78571445)(7.63392869,15.75571448)(7.63392869,14.48660738)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000001,linecolor=curcolor]
-{
-\newpath
-\moveto(7.63392869,14.48660738)
-\curveto(7.63392869,13.21750027)(6.54392873,12.1875003)(5.20089308,12.1875003)
-\curveto(3.85785742,12.1875003)(2.76785746,13.21750027)(2.76785746,14.48660738)
-\curveto(2.76785746,15.75571448)(3.85785742,16.78571445)(5.20089308,16.78571445)
-\curveto(6.54392873,16.78571445)(7.63392869,15.75571448)(7.63392869,14.48660738)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.61176473 0.30588236 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(14.53124989,14.59821438)
-\curveto(14.53124989,13.32910727)(13.44124993,12.2991073)(12.09821428,12.2991073)
-\curveto(10.75517862,12.2991073)(9.66517866,13.32910727)(9.66517866,14.59821438)
-\curveto(9.66517866,15.86732148)(10.75517862,16.89732145)(12.09821428,16.89732145)
-\curveto(13.44124993,16.89732145)(14.53124989,15.86732148)(14.53124989,14.59821438)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000001,linecolor=curcolor]
-{
-\newpath
-\moveto(14.53124989,14.59821438)
-\curveto(14.53124989,13.32910727)(13.44124993,12.2991073)(12.09821428,12.2991073)
-\curveto(10.75517862,12.2991073)(9.66517866,13.32910727)(9.66517866,14.59821438)
-\curveto(9.66517866,15.86732148)(10.75517862,16.89732145)(12.09821428,16.89732145)
-\curveto(13.44124993,16.89732145)(14.53124989,15.86732148)(14.53124989,14.59821438)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.87843138 0.47843137 0.18431373}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(6.62946409,14.17410723)
-\curveto(6.62946409,13.55803581)(6.09946414,13.05803582)(5.4464285,13.05803582)
-\curveto(4.79339286,13.05803582)(4.26339291,13.55803581)(4.26339291,14.17410723)
-\curveto(4.26339291,14.79017865)(4.79339286,15.29017864)(5.4464285,15.29017864)
-\curveto(6.09946414,15.29017864)(6.62946409,14.79017865)(6.62946409,14.17410723)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000001,linecolor=curcolor]
-{
-\newpath
-\moveto(6.62946409,14.17410723)
-\curveto(6.62946409,13.55803581)(6.09946414,13.05803582)(5.4464285,13.05803582)
-\curveto(4.79339286,13.05803582)(4.26339291,13.55803581)(4.26339291,14.17410723)
-\curveto(4.26339291,14.79017865)(4.79339286,15.29017864)(5.4464285,15.29017864)
-\curveto(6.09946414,15.29017864)(6.62946409,14.79017865)(6.62946409,14.17410723)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.87843138 0.47843137 0.18431373}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(13.14732129,14.10714293)
-\curveto(13.14732129,13.49107151)(12.61732134,12.99107152)(11.9642857,12.99107152)
-\curveto(11.31125006,12.99107152)(10.78125011,13.49107151)(10.78125011,14.10714293)
-\curveto(10.78125011,14.72321435)(11.31125006,15.22321434)(11.9642857,15.22321434)
-\curveto(12.61732134,15.22321434)(13.14732129,14.72321435)(13.14732129,14.10714293)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000001,linecolor=curcolor]
-{
-\newpath
-\moveto(13.14732129,14.10714293)
-\curveto(13.14732129,13.49107151)(12.61732134,12.99107152)(11.9642857,12.99107152)
-\curveto(11.31125006,12.99107152)(10.78125011,13.49107151)(10.78125011,14.10714293)
-\curveto(10.78125011,14.72321435)(11.31125006,15.22321434)(11.9642857,15.22321434)
-\curveto(12.61732134,15.22321434)(13.14732129,14.72321435)(13.14732129,14.10714293)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.61176473 0.33333334 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(14.82142832,9.3080361)
-\curveto(14.82142832,6.06750031)(12.08142842,3.43750025)(8.7053571,3.43750025)
-\curveto(5.32928578,3.43750025)(2.58928588,6.06750031)(2.58928588,9.3080361)
-\curveto(2.58928588,12.54857189)(5.32928578,15.17857195)(8.7053571,15.17857195)
-\curveto(12.08142842,15.17857195)(14.82142832,12.54857189)(14.82142832,9.3080361)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000001,linecolor=curcolor]
-{
-\newpath
-\moveto(14.82142832,9.3080361)
-\curveto(14.82142832,6.06750031)(12.08142842,3.43750025)(8.7053571,3.43750025)
-\curveto(5.32928578,3.43750025)(2.58928588,6.06750031)(2.58928588,9.3080361)
-\curveto(2.58928588,12.54857189)(5.32928578,15.17857195)(8.7053571,15.17857195)
-\curveto(12.08142842,15.17857195)(14.82142832,12.54857189)(14.82142832,9.3080361)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(10.22321468,8.52678562)
-\curveto(10.22321468,7.95999991)(9.55321464,7.49999991)(8.72767888,7.49999991)
-\curveto(7.90214312,7.49999991)(7.23214308,7.95999991)(7.23214308,8.52678562)
-\curveto(7.23214308,9.09357134)(7.90214312,9.55357133)(8.72767888,9.55357133)
-\curveto(9.55321464,9.55357133)(10.22321468,9.09357134)(10.22321468,8.52678562)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.4,linecolor=curcolor]
-{
-\newpath
-\moveto(10.22321468,8.52678562)
-\curveto(10.22321468,7.95999991)(9.55321464,7.49999991)(8.72767888,7.49999991)
-\curveto(7.90214312,7.49999991)(7.23214308,7.95999991)(7.23214308,8.52678562)
-\curveto(7.23214308,9.09357134)(7.90214312,9.55357133)(8.72767888,9.55357133)
-\curveto(9.55321464,9.55357133)(10.22321468,9.09357134)(10.22321468,8.52678562)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.67857158,11.71875027)
-\curveto(7.67857158,10.99178597)(7.08857158,10.40178596)(6.3616073,10.40178596)
-\curveto(5.63464301,10.40178596)(5.04464302,10.99178597)(5.04464302,11.71875027)
-\curveto(5.04464302,12.44571456)(5.63464301,13.03571457)(6.3616073,13.03571457)
-\curveto(7.08857158,13.03571457)(7.67857158,12.44571456)(7.67857158,11.71875027)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000005,linecolor=curcolor]
-{
-\newpath
-\moveto(7.67857158,11.71875027)
-\curveto(7.67857158,10.99178597)(7.08857158,10.40178596)(6.3616073,10.40178596)
-\curveto(5.63464301,10.40178596)(5.04464302,10.99178597)(5.04464302,11.71875027)
-\curveto(5.04464302,12.44571456)(5.63464301,13.03571457)(6.3616073,13.03571457)
-\curveto(7.08857158,13.03571457)(7.67857158,12.44571456)(7.67857158,11.71875027)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{1 1 1}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(12.07589288,11.74107157)
-\curveto(12.07589288,11.01410727)(11.48589288,10.42410726)(10.7589286,10.42410726)
-\curveto(10.03196431,10.42410726)(9.44196432,11.01410727)(9.44196432,11.74107157)
-\curveto(9.44196432,12.46803586)(10.03196431,13.05803587)(10.7589286,13.05803587)
-\curveto(11.48589288,13.05803587)(12.07589288,12.46803586)(12.07589288,11.74107157)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.40000005,linecolor=curcolor]
-{
-\newpath
-\moveto(12.07589288,11.74107157)
-\curveto(12.07589288,11.01410727)(11.48589288,10.42410726)(10.7589286,10.42410726)
-\curveto(10.03196431,10.42410726)(9.44196432,11.01410727)(9.44196432,11.74107157)
-\curveto(9.44196432,12.46803586)(10.03196431,13.05803587)(10.7589286,13.05803587)
-\curveto(11.48589288,13.05803587)(12.07589288,12.46803586)(12.07589288,11.74107157)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(11.22767879,11.25000081)
-\curveto(11.22767879,10.99125081)(11.01767879,10.78125081)(10.75892879,10.78125081)
-\curveto(10.50017879,10.78125081)(10.29017879,10.99125081)(10.29017879,11.25000081)
-\curveto(10.29017879,11.50875081)(10.50017879,11.71875081)(10.75892879,11.71875081)
-\curveto(11.01767879,11.71875081)(11.22767879,11.50875081)(11.22767879,11.25000081)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.39999999,linecolor=curcolor]
-{
-\newpath
-\moveto(11.22767879,11.25000081)
-\curveto(11.22767879,10.99125081)(11.01767879,10.78125081)(10.75892879,10.78125081)
-\curveto(10.50017879,10.78125081)(10.29017879,10.99125081)(10.29017879,11.25000081)
-\curveto(10.29017879,11.50875081)(10.50017879,11.71875081)(10.75892879,11.71875081)
-\curveto(11.01767879,11.71875081)(11.22767879,11.50875081)(11.22767879,11.25000081)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(6.89732139,11.16071481)
-\curveto(6.89732139,10.90196481)(6.68732139,10.69196481)(6.42857139,10.69196481)
-\curveto(6.16982139,10.69196481)(5.95982139,10.90196481)(5.95982139,11.16071481)
-\curveto(5.95982139,11.41946481)(6.16982139,11.62946481)(6.42857139,11.62946481)
-\curveto(6.68732139,11.62946481)(6.89732139,11.41946481)(6.89732139,11.16071481)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.39999999,linecolor=curcolor]
-{
-\newpath
-\moveto(6.89732139,11.16071481)
-\curveto(6.89732139,10.90196481)(6.68732139,10.69196481)(6.42857139,10.69196481)
-\curveto(6.16982139,10.69196481)(5.95982139,10.90196481)(5.95982139,11.16071481)
-\curveto(5.95982139,11.41946481)(6.16982139,11.62946481)(6.42857139,11.62946481)
-\curveto(6.68732139,11.62946481)(6.89732139,11.41946481)(6.89732139,11.16071481)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.5,linecolor=curcolor]
-{
-\newpath
-\moveto(6.1160715,6.116072)
-\curveto(6.1160715,6.116072)(8.9285715,3.526786)(11.473215,6.830358)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.2,linecolor=curcolor]
-{
-\newpath
-\moveto(8.3301312,15.1339287)
-\curveto(8.5673117,15.9853317)(8.211541,16.7192998)(7.4999992,16.8367348)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.2,linecolor=curcolor]
-{
-\newpath
-\moveto(8.5148301,15.2086132)
-\curveto(8.3534686,16.1645744)(8.5955111,16.988679)(9.0795961,17.1205357)
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.19999997,linecolor=curcolor]
-{
-\newpath
-\moveto(8.7452771,15.1787393)
-\curveto(8.5604718,15.8658365)(8.8376797,16.4581616)(9.3920958,16.5529336)
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-plume.eps b/Master/texmf-dist/tex/latex/bclogo/bc-plume.eps
new file mode 100644
index 00000000000..0aef5dfa5f9
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-plume.eps
@@ -0,0 +1,1956 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: inkscape 0.46
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 0 0 14 16
+%%HiResBoundingBox: 0 0 14 16
+%%EndComments
+%%Page: 1 1
+0 16 translate
+0.8 -0.8 scale
+0 0 0 setrgbcolor
+[] 0 setdash
+1 setlinewidth
+0 setlinejoin
+0 setlinecap
+gsave [1 0 0 1 0 0] concat
+gsave [1.0352039 -0.1842901 0.1842901 1.0352039 -2.0207207 -0.015688414] concat
+gsave
+0.627451 0.627451 0.627451 setrgbcolor
+newpath
+1.2607907 19.257809 moveto
+1.2420634 19.204286 1.2456224 19.131122 1.2686996 19.095222 curveto
+1.3152169 19.022862 1.4351744 18.467538 1.4546428 18.234433 curveto
+1.4614983 18.152329 1.4908202 18.008749 1.5198007 17.915368 curveto
+1.6555483 17.477943 1.8443243 16.814387 1.8380883 16.796563 curveto
+1.8342696 16.785649 1.8833919 16.657491 1.9472485 16.511765 curveto
+2.0468929 16.284368 2.0524652 16.2157 1.9865602 16.027328 curveto
+1.8767381 15.713439 1.727731 14.943141 1.6993305 14.542476 curveto
+1.6323717 13.597853 1.8566734 12.191949 2.1856092 11.494538 curveto
+2.4366575 10.962265 2.5225124 10.928105 2.6553098 11.307664 curveto
+2.7817981 11.669191 2.8227786 11.575444 2.7154637 11.170061 curveto
+2.6087896 10.767105 2.5857324 10.085276 2.6720869 9.8873955 curveto
+2.7050082 9.8119592 2.8359908 9.5811667 2.96316 9.3745215 curveto
+3.0903289 9.1678789 3.2474582 8.9115318 3.3123375 8.8048619 curveto
+3.4446828 8.5872668 3.6700745 8.4937313 3.819097 8.5945621 curveto
+3.8679569 8.6276194 3.9354297 8.7279913 3.9690365 8.8176096 curveto
+4.0205766 8.9550457 4.0255869 8.9358851 4.0010465 8.6952029 curveto
+3.9850441 8.5382632 3.9891849 8.4045735 4.0102489 8.3981124 curveto
+4.0313124 8.391654 4.0632632 8.3138748 4.0812502 8.2252741 curveto
+4.1242257 8.0135824 4.7591767 7.270247 5.1068665 7.0245885 curveto
+5.2576759 6.9180353 5.4374217 6.7830522 5.5063016 6.7246287 curveto
+5.5751816 6.6662034 5.78399 6.5468586 5.9703207 6.4594177 curveto
+6.156651 6.3719767 6.394165 6.2327847 6.4981288 6.1501027 curveto
+6.7161415 5.9767188 6.8887815 5.9672383 6.9932531 6.1229152 curveto
+7.0573873 6.2184866 7.0646055 6.2131283 7.0856294 6.0543411 curveto
+7.098173 5.9596064 7.1324484 5.8427384 7.1617964 5.7946362 curveto
+7.2243219 5.6921543 7.9809096 5.3309235 8.3469959 5.2287642 curveto
+8.4864985 5.1898355 8.6715393 5.1242173 8.7581972 5.0829463 curveto
+8.844856 5.0416756 8.9433651 5.0101813 8.977109 5.0129596 curveto
+9.0108521 5.0157374 9.2193448 4.9528704 9.4404296 4.8732559 curveto
+9.661511 4.7936409 9.9145169 4.7168718 10.002663 4.7026577 curveto
+10.090811 4.6884442 10.322335 4.6340264 10.517164 4.5817302 curveto
+11.117578 4.4205659 11.410115 4.3525834 11.851746 4.2715904 curveto
+12.085552 4.2287106 12.304612 4.1848087 12.338543 4.1740285 curveto
+12.377649 4.1616055 12.434401 4.1969539 12.49355 4.2705743 curveto
+12.586863 4.3867194 lineto
+12.820351 4.2400426 lineto
+13.156725 4.0287353 13.705576 3.9660123 14.834265 4.0098903 curveto
+15.32584 4.0290008 15.967171 4.0524304 16.259437 4.0619541 curveto
+16.79084 4.0792729 lineto
+16.827771 4.227509 lineto
+16.861875 4.3643877 16.848004 4.3788201 16.646741 4.4158781 curveto
+15.176937 4.6865111 14.139836 5.0051274 13.583705 5.3569002 curveto
+13.456074 5.437634 13.336825 5.5024679 13.318712 5.5009767 curveto
+13.244458 5.4948635 12.423437 6.0839983 12.419634 6.1461222 curveto
+12.417368 6.1831227 12.359327 6.2395261 12.290652 6.2714619 curveto
+12.133425 6.344577 11.945087 6.6086068 11.928922 6.7785598 curveto
+11.919999 6.8723805 11.851794 6.9360057 11.681876 7.0090296 curveto
+11.520296 7.0784699 11.460931 7.1315681 11.49136 7.1794378 curveto
+11.547614 7.2679403 11.389571 7.643728 11.252723 7.7468576 curveto
+10.826173 8.068308 10.191811 8.7363745 10.02453 9.0402982 curveto
+9.9997727 9.0852846 9.8850105 9.234712 9.7695043 9.372362 curveto
+9.6539998 9.510012 9.4925335 9.7296441 9.4106896 9.8604326 curveto
+9.1281858 10.311887 9.1516513 10.294563 8.8556942 10.270199 curveto
+8.6040746 10.249485 8.1088849 10.317228 8.1272952 10.369845 curveto
+8.1318199 10.382782 8.3420936 10.4036 8.594568 10.416109 curveto
+9.1815754 10.44519 9.2293825 10.500471 8.9581543 10.83653 curveto
+8.681564 11.179236 8.4322346 11.616967 8.3870521 11.839175 curveto
+8.3517587 12.012756 8.2409753 12.256762 7.8863113 12.942074 curveto
+7.8052227 13.098767 7.7229977 13.160773 7.4824083 13.246667 curveto
+7.2081316 13.344584 7.1483957 13.349261 6.8335568 13.297472 curveto
+6.4911071 13.24114 6.4872616 13.241773 6.5245555 13.34836 curveto
+6.5521529 13.427243 6.4514914 13.594684 6.1505885 13.970426 curveto
+5.9241374 14.253195 5.6802392 14.525886 5.6085904 14.5764 curveto
+5.5369411 14.626911 5.3735056 14.773036 5.2453992 14.90111 curveto
+5.1172914 15.029188 4.9935609 15.13242 4.9704465 15.130516 curveto
+4.9473294 15.128613 4.8646074 15.185468 4.7866168 15.256858 curveto
+4.3976623 15.612904 3.1999655 16.334219 3.0220499 16.319569 curveto
+2.867203 16.306823 2.6392044 17.200055 2.6472537 17.787911 curveto
+2.6525645 18.175802 2.60691 18.311795 2.4409853 18.40232 curveto
+2.1364479 18.568476 1.8024384 18.87942 1.6622066 19.127327 curveto
+1.5629098 19.302863 1.4899074 19.371191 1.4087865 19.364514 curveto
+1.3236954 19.357508 1.2862178 19.330487 1.2607907 19.257809 curveto
+closepath
+2.6746285 14.772042 moveto
+2.7442236 14.595649 2.8597392 14.37779 2.9313297 14.287916 curveto
+3.0029211 14.198042 3.096623 14.030626 3.1395583 13.915878 curveto
+3.233011 13.666113 3.2375889 13.659357 4.8028547 11.460127 curveto
+5.477809 10.511804 5.4917613 10.494354 6.0112166 9.9489633 curveto
+6.481635 9.4550569 6.8789756 9.0191884 7.2495573 8.5905466 curveto
+7.769378 7.9892832 7.8729166 7.8840561 8.1848236 7.640036 curveto
+8.3586719 7.5040275 8.5962916 7.3019754 8.7128719 7.1910295 curveto
+9.2472325 6.6824947 9.4048442 6.568246 9.4913155 6.626752 curveto
+9.5374419 6.6579628 9.5806242 6.6990427 9.5872698 6.7180404 curveto
+9.5939154 6.7370378 9.4386881 6.9030569 9.2423146 7.0869715 curveto
+9.0459437 7.270888 8.7515752 7.578365 8.5881635 7.7702565 curveto
+8.0304453 8.4251717 7.2614374 9.2896766 7.0047266 9.5503239 curveto
+6.8637475 9.6934672 6.6811179 9.8868341 6.5988834 9.9800288 curveto
+6.5166485 10.073229 6.361404 10.24699 6.2538953 10.366168 curveto
+6.1463871 10.485349 6.0478595 10.632955 6.0349473 10.69418 curveto
+5.9993483 10.862966 5.8691779 11.059225 5.2437254 11.887112 curveto
+4.7028489 12.603047 4.5609465 12.803553 4.03107 13.600588 curveto
+3.7129174 14.079148 3.444792 14.625105 3.4793748 14.723947 curveto
+3.5054909 14.798595 3.6905604 14.744006 3.7787136 14.635656 curveto
+3.9180586 14.464383 4.1028676 14.40613 4.4232193 14.432505 curveto
+4.6659245 14.452483 4.7137441 14.437124 4.9355382 14.267925 curveto
+5.0700841 14.165288 5.3355528 13.886615 5.5254711 13.64865 curveto
+5.8707734 13.215988 lineto
+5.6213068 13.027372 lineto
+5.4841 12.923635 5.360657 12.806796 5.34699 12.767732 curveto
+5.3085637 12.657905 5.6144725 12.314647 5.7814514 12.280226 curveto
+5.8635177 12.26331 6.0200439 12.256826 6.1292874 12.265819 curveto
+6.240673 12.274989 6.4230092 12.24239 6.5444316 12.191596 curveto
+6.6635188 12.141778 6.8210756 12.105777 6.8945594 12.111593 curveto
+7.1882682 12.134837 7.3328226 11.980177 7.4427311 11.525099 curveto
+7.5546342 11.061759 7.5921452 10.999952 7.7830793 10.964286 curveto
+8.0166935 10.920647 8.1517177 10.971227 8.2066544 11.122964 curveto
+8.2502332 11.24333 lineto
+8.3241671 11.127278 lineto
+8.4099477 10.992629 8.3999032 10.929169 8.2913964 10.920239 curveto
+8.2326132 10.915397 8.2080184 10.881798 8.1878249 10.778739 curveto
+8.1641538 10.657944 8.1351088 10.629679 7.9143966 10.512672 curveto
+7.642419 10.368485 7.5965579 10.30427 7.6915638 10.200648 curveto
+7.7263874 10.162667 7.7470671 10.075444 7.7375209 10.006818 curveto
+7.7156917 9.8499279 7.9867327 9.6709701 8.3583158 9.5969301 curveto
+8.6006569 9.5486415 8.6515549 9.5068773 9.0093335 9.0627008 curveto
+9.2227999 8.797685 9.5033103 8.5063245 9.6326891 8.4152346 curveto
+9.7620679 8.324142 9.920219 8.1965136 9.984139 8.131621 curveto
+10.071324 8.0431032 10.134483 8.0222749 10.236975 8.0482389 curveto
+10.320408 8.0693738 10.411317 8.0573024 10.470478 8.0172329 curveto
+10.589201 7.9368266 11.024207 7.5156353 11.004314 7.5003516 curveto
+10.99642 7.4942866 10.865536 7.5190532 10.713459 7.5553894 curveto
+10.316781 7.6501756 9.7805271 7.5356442 9.7126481 7.3416389 curveto
+9.6507179 7.1646303 10.047879 6.7992355 10.281886 6.8179303 curveto
+10.355465 6.8238081 10.861018 6.6518693 11.088446 6.5436174 curveto
+11.177939 6.5010188 11.328717 6.3440075 11.423506 6.1947035 curveto
+11.640524 5.8528729 11.971682 5.5760099 12.187536 5.5559424 curveto
+12.427497 5.5336336 12.548208 5.4642347 12.69194 5.2659504 curveto
+12.83035 5.0750083 12.793698 4.9279001 12.573921 4.7922724 curveto
+12.509146 4.7522987 12.443288 4.6691772 12.41711 4.5943558 curveto
+12.392288 4.5234075 12.355834 4.4639768 12.3361 4.4622897 curveto
+12.160964 4.4473158 10.714166 4.749699 10.084418 4.9328962 curveto
+9.9610691 4.96878 9.7928596 5.0613175 9.7106209 5.1385359 curveto
+9.628382 5.2157544 9.3771657 5.3735083 9.1523581 5.4891004 curveto
+8.9130012 5.6121738 8.6739507 5.7843445 8.5755035 5.9045674 curveto
+8.483041 6.0174814 8.2931179 6.1908048 8.1534528 6.2897289 curveto
+7.9215244 6.4540024 7.8923671 6.50296 7.8170448 6.8545793 curveto
+7.768927 7.0792083 7.7535629 7.3317917 7.7801628 7.460976 curveto
+7.8590467 7.8440897 7.7701833 8.0346188 7.543638 7.9681051 curveto
+7.297426 7.8958172 7.1812663 7.7045886 6.9939883 7.063246 curveto
+6.9019342 6.7480119 6.812439 6.4889246 6.7951061 6.4874972 curveto
+6.694127 6.4791845 6.322123 6.7956372 6.1502755 7.0360345 curveto
+5.9760234 7.2797974 5.9157663 7.323328 5.6916677 7.3673492 curveto
+5.457068 7.4134302 5.4224152 7.4413182 5.3095414 7.674877 curveto
+5.2412698 7.8161447 5.1905094 7.9838495 5.1967417 8.0475513 curveto
+5.2029736 8.111254 5.1988851 8.1822081 5.1876563 8.2052269 curveto
+5.0940683 8.3970719 5.0853777 8.6142232 5.1615433 8.8576767 curveto
+5.2087529 9.0085781 5.2325574 9.1909084 5.2155665 9.2714694 curveto
+5.1980446 9.3545493 5.2267728 9.5648027 5.2834615 9.7683596 curveto
+5.3725867 10.088393 5.3723922 10.145159 5.2813677 10.37839 curveto
+5.226168 10.51983 5.1691994 10.68135 5.1547713 10.73732 curveto
+5.1104167 10.909389 4.9552717 10.83169 4.6627816 10.490919 curveto
+4.4198116 10.20784 4.1653921 9.7791822 3.8546472 9.1293443 curveto
+3.7483137 8.9069758 3.6905874 8.8800683 3.6845024 9.0500394 curveto
+3.6821523 9.115688 3.611266 9.2957621 3.526977 9.4502085 curveto
+3.3613801 9.7536371 3.3298587 10.127225 3.4518843 10.340201 curveto
+3.5454565 10.503517 3.7192873 11.366797 3.6992664 11.56875 curveto
+3.6906462 11.655712 3.7004802 11.775129 3.7211201 11.834123 curveto
+3.7605155 11.946721 3.6783181 12.332649 3.5854078 12.471312 curveto
+3.5554813 12.515975 3.524143 12.605825 3.5157667 12.670976 curveto
+3.5073908 12.736126 3.4624054 12.786161 3.4157975 12.782158 curveto
+3.3228925 12.774183 3.0643893 12.533546 2.9544501 12.352697 curveto
+2.9161469 12.289688 2.8348402 12.161512 2.7737693 12.067857 curveto
+2.6627307 11.897582 lineto
+2.6141475 11.990153 lineto
+2.5461312 12.119756 2.5286218 12.358029 2.5703133 12.586691 curveto
+2.6472577 13.008695 2.552482 13.820267 2.3951528 14.08663 curveto
+2.3520288 14.159637 2.2479976 14.252097 2.1639726 14.292092 curveto
+1.9184016 14.408979 1.9261009 14.527042 2.2142528 15.063051 curveto
+2.3707933 15.354243 lineto
+2.4594423 15.223502 lineto
+2.5081992 15.151595 2.6050327 14.948439 2.6746285 14.772042 curveto
+closepath
+6.2609829 13.125513 moveto
+6.2153322 13.085842 6.1349835 13.049844 6.0824283 13.045518 curveto
+6.0029096 13.038972 6.0008016 13.049755 6.0698751 13.109784 curveto
+6.1155252 13.149453 6.195874 13.18545 6.2484293 13.189774 curveto
+6.3279489 13.196323 6.3300549 13.185539 6.2609829 13.125513 curveto
+closepath
+10.700369 7.3038197 moveto
+10.94448 7.2412264 11.047214 7.1576733 10.842262 7.1884171 curveto
+10.680775 7.2126405 10.365073 7.3385391 10.437994 7.3496343 curveto
+10.466886 7.3540292 10.584954 7.3334132 10.700369 7.3038197 curveto
+closepath
+13.701891 4.5530782 moveto
+13.731131 4.5023792 13.724466 4.4896402 13.666179 4.4848413 curveto
+13.626763 4.4815963 13.578334 4.5069932 13.55856 4.5412785 curveto
+13.529318 4.5919762 13.535986 4.6047154 13.594271 4.6095144 curveto
+13.633688 4.6127589 13.682116 4.5873624 13.701891 4.5530782 curveto
+closepath
+fill
+grestore
+gsave
+0.14117648 0.14901961 0.15686275 setrgbcolor
+newpath
+1.329157 19.300577 moveto
+1.2751126 19.253613 1.2674519 19.210696 1.2995826 19.134901 curveto
+1.3234333 19.078642 1.4079745 18.702777 1.4874529 18.299652 curveto
+1.6260188 17.596817 1.7362175 17.209724 1.9841064 16.555067 curveto
+2.0980336 16.254192 lineto
+1.9471262 15.729584 lineto
+1.8641274 15.44105 1.7825468 15.045045 1.7658353 14.849577 curveto
+1.7491231 14.65411 1.7295732 14.425137 1.7223898 14.340749 curveto
+1.6904622 13.965674 1.8037312 12.871769 1.930307 12.33278 curveto
+2.0558365 11.798247 2.3812027 11.078778 2.4857925 11.104459 curveto
+2.5496223 11.120131 2.5941592 11.190188 2.6843246 11.416748 curveto
+2.8587345 11.854983 2.9228824 11.844314 2.7995619 11.397579 curveto
+2.6749832 10.946288 2.6217286 10.400506 2.6717362 10.087584 curveto
+2.7071827 9.8657771 3.0908824 9.1657742 3.3847588 8.7867755 curveto
+3.4995248 8.6387675 3.5901783 8.5743171 3.6738981 8.5812095 curveto
+3.8233208 8.5935102 3.8339094 8.6082086 4.0572469 9.113374 curveto
+4.236997 9.5199505 lineto
+4.1280051 9.1087728 lineto
+3.9650572 8.4940375 4.0351751 8.2235226 4.5014506 7.66802 curveto
+4.7008582 7.4304542 4.9081956 7.2072444 4.962202 7.1719981 curveto
+5.0162071 7.1367527 5.192974 7.0094159 5.3550168 6.8890278 curveto
+5.5170591 6.7686406 5.8089481 6.5889089 6.0036575 6.4896287 curveto
+6.1983671 6.3903485 6.4520355 6.2379934 6.5673655 6.1510633 curveto
+6.8208616 5.9599902 6.9208048 5.9973733 7.040463 6.3280211 curveto
+7.1156027 6.5356472 lineto
+7.1131961 6.2827525 lineto
+7.1092117 5.8642082 7.1742491 5.7772987 7.6660724 5.54393 curveto
+7.9101688 5.428107 8.1451499 5.3362457 8.1882529 5.3397944 curveto
+8.231356 5.3433426 8.2728512 5.3271699 8.2804676 5.3038552 curveto
+8.2880824 5.2805398 8.3494255 5.266001 8.4167852 5.2715468 curveto
+8.5202328 5.2800628 8.5336741 5.2913126 8.5033048 5.3439656 curveto
+8.4835289 5.3782506 8.4384889 5.4039259 8.4032156 5.4010218 curveto
+8.3679405 5.3981179 8.1810338 5.4917458 7.9878657 5.6090849 curveto
+7.7946984 5.7264237 7.5665003 5.8460925 7.4807617 5.8750171 curveto
+7.3500136 5.9191251 7.3199573 5.9696659 7.2943991 6.1883774 curveto
+7.27764 6.3318008 7.273201 6.5310535 7.2845359 6.6311604 curveto
+7.3116632 6.8707628 7.283678 7.1371517 7.231827 7.132883 curveto
+7.1114173 7.1229708 7.018828 6.9715679 6.9232171 6.6282485 curveto
+6.8244121 6.27346 lineto
+6.6437234 6.3743043 lineto
+6.5443434 6.4297714 6.4466895 6.4881152 6.4267127 6.5039591 curveto
+6.406735 6.5198036 6.2479288 6.6030253 6.0738097 6.6888957 curveto
+5.8996903 6.7747669 5.7267363 6.8772323 5.6894678 6.9165972 curveto
+5.6521997 6.9559603 5.5041792 7.0700081 5.3605323 7.1700361 curveto
+4.9936329 7.425524 4.3533408 8.1499794 4.3524792 8.3105933 curveto
+4.3515299 8.4874366 4.6483533 9.5156889 4.9034616 10.21931 curveto
+5.0862887 10.723569 5.1018635 10.791439 5.0307191 10.77384 curveto
+4.8826929 10.737224 4.4812659 10.266196 4.3038918 9.9209893 curveto
+4.2128681 9.7438365 4.0889504 9.5126897 4.028519 9.4073308 curveto
+3.9680884 9.3019709 3.8900129 9.1339378 3.85502 9.0339175 curveto
+3.7746578 8.804231 3.677729 8.7859662 3.5395753 8.9744731 curveto
+3.377717 9.1953254 2.9538417 9.9676548 2.9011745 10.137682 curveto
+2.7798626 10.529315 2.9682715 11.534205 3.2853053 12.186474 curveto
+3.5592078 12.750006 3.5280277 12.893748 3.1987317 12.585598 curveto
+3.044414 12.441189 2.6589091 11.843715 2.58407 11.632968 curveto
+2.5636338 11.575419 2.5280405 11.533313 2.5049723 11.539392 curveto
+2.4248643 11.560511 2.2213461 12.054775 2.1611282 12.374447 curveto
+2.1278195 12.55127 2.0840476 12.743556 2.0638565 12.801749 curveto
+2.0436652 12.859942 2.0052171 13.160405 1.9784155 13.469444 curveto
+1.9516142 13.778484 1.9211803 14.126488 1.9107844 14.242792 curveto
+1.8812526 14.573169 2.1140268 15.85304 2.2050077 15.860531 curveto
+2.2321905 15.862767 2.2487691 15.848419 2.2418517 15.828645 curveto
+2.2349319 15.80887 2.3447229 15.565632 2.4858297 15.288117 curveto
+2.6269372 15.0106 2.7672172 14.697836 2.7975635 14.593083 curveto
+2.8279101 14.488334 2.8913587 14.37628 2.9385609 14.344084 curveto
+2.9857628 14.311886 3.0678157 14.173844 3.1209008 14.03732 curveto
+3.2196729 13.783304 3.3312052 13.606641 3.9146941 12.779997 curveto
+4.0983653 12.519784 4.3781368 12.121656 4.5364092 11.895267 curveto
+5.0735275 11.126982 5.6291423 10.419616 6.0458358 9.9735808 curveto
+6.4568327 9.5336421 6.7125063 9.2540071 7.2545039 8.6516418 curveto
+7.4080135 8.4810342 7.6116649 8.2661399 7.7070639 8.1740965 curveto
+7.8024638 8.082054 7.9009538 7.9756405 7.9259307 7.9376201 curveto
+7.9509111 7.8996014 8.1008019 7.7616174 8.2590246 7.6309907 curveto
+8.4172472 7.5003648 8.6430219 7.3034744 8.7607448 7.1934551 curveto
+9.3325985 6.6590321 9.4111649 6.6018646 9.4895297 6.6631593 curveto
+9.5728441 6.7283254 9.539297 6.7713471 9.0793152 7.1892338 curveto
+8.9437592 7.3123825 8.7077049 7.5627323 8.5547489 7.7455654 curveto
+8.0484099 8.3508066 7.2170736 9.2834298 7.0217795 9.4653057 curveto
+6.6290884 9.8310151 6.0114075 10.58216 5.9988021 10.709321 curveto
+5.9916349 10.781614 5.6181296 11.329261 5.168789 11.926317 curveto
+4.719449 12.523371 4.2621961 13.164959 4.1526715 13.352065 curveto
+4.043146 13.539171 3.9372667 13.702412 3.9173831 13.714819 curveto
+3.8584762 13.751584 3.5601191 14.320463 3.4680718 14.571524 curveto
+3.4212079 14.699348 3.3401622 14.915136 3.2879698 15.051056 curveto
+3.1506063 15.408778 2.9616721 16.025619 2.9761677 16.069041 curveto
+2.9830025 16.089514 3.0444763 16.072025 3.112776 16.030178 curveto
+3.1810763 15.988332 3.3364793 15.903213 3.4581149 15.841025 curveto
+3.5797511 15.778836 3.7877476 15.652008 3.9203295 15.559174 curveto
+4.0529129 15.466344 4.1868729 15.372901 4.21802 15.351523 curveto
+4.5774891 15.104802 4.7569293 14.962929 4.9926847 14.739044 curveto
+5.1459299 14.593516 5.3298792 14.432958 5.4014607 14.382253 curveto
+5.5641008 14.267043 6.2025596 13.489016 6.1822031 13.430836 curveto
+6.1739459 13.407232 5.9962428 13.257405 5.7873081 13.097886 curveto
+5.3889065 12.793706 5.3138696 12.70002 5.4436408 12.668811 curveto
+5.5203948 12.650355 5.9545927 12.787073 6.3455415 12.952803 curveto
+6.4541552 12.998845 6.6815918 13.052102 6.8509587 13.071156 curveto
+7.2796046 13.119374 7.5863744 12.985612 7.7313766 12.687261 curveto
+7.789014 12.568668 7.872739 12.406085 7.9174312 12.325968 curveto
+7.9970156 12.183306 8.1287071 11.847347 8.2090682 11.581981 curveto
+8.2854841 11.329632 8.4857461 10.957765 8.6245178 10.810527 curveto
+8.7634959 10.663069 lineto
+8.5233194 10.64984 lineto
+8.2552648 10.63507 7.7287703 10.424389 7.691141 10.316834 curveto
+7.6519533 10.204834 8.0846405 10.075489 8.5386329 10.063491 curveto
+8.9673598 10.05216 lineto
+9.1511986 9.7818659 lineto
+9.2523077 9.6332045 9.3611322 9.447208 9.3930323 9.3685398 curveto
+9.4249316 9.2898706 9.4985324 9.1963586 9.5565901 9.1607338 curveto
+9.614646 9.1251082 9.7191294 9.0027065 9.7887723 8.888731 curveto
+9.8584169 8.7747536 10.004812 8.5909184 10.114099 8.4802056 curveto
+10.964002 7.6192054 11.097574 7.4714813 11.040105 7.4560806 curveto
+11.004297 7.446484 10.862599 7.4690986 10.725222 7.5063359 curveto
+10.344857 7.6094355 9.964678 7.5494416 9.9745724 7.3878814 curveto
+9.9832478 7.2461647 11.000124 6.8819513 11.483535 6.8474166 curveto
+11.657215 6.8350085 11.681644 6.8118003 11.735636 6.6079044 curveto
+11.76852 6.4837293 11.859838 6.3162258 11.938567 6.2356726 curveto
+12.017295 6.1551209 12.140812 6.0194231 12.213048 5.9341226 curveto
+12.422039 5.6873387 13.505881 5.0341927 14.090782 4.8025573 curveto
+14.45347 4.6589254 15.077742 4.4739141 15.541215 4.3727003 curveto
+15.950733 4.2832703 lineto
+15.123117 4.2386789 lineto
+13.769157 4.1657284 13.195744 4.2470303 12.774181 4.571723 curveto
+12.576912 4.7236612 12.49881 4.7302066 12.472802 4.5969808 curveto
+12.44962 4.4782298 12.892606 4.1863799 13.201318 4.1170177 curveto
+13.553198 4.0379569 14.111667 4.0008255 14.493676 4.0310897 curveto
+14.690538 4.0466868 15.258634 4.0630867 15.756113 4.0675336 curveto
+16.547507 4.0746091 16.672162 4.0844875 16.752915 4.1465283 curveto
+16.905517 4.2637717 16.851418 4.3435667 16.584482 4.3949603 curveto
+15.9689 4.513481 15.392906 4.64408 15.001748 4.7538229 curveto
+14.612513 4.8630291 13.923285 5.1126992 13.786895 5.1939016 curveto
+13.755214 5.2127633 13.615868 5.2919276 13.477241 5.3698226 curveto
+12.923147 5.6811599 12.496324 5.9723894 12.38632 6.1141761 curveto
+12.322589 6.1963204 12.205318 6.3132181 12.125715 6.3739492 curveto
+12.046114 6.4346801 11.95462 6.5761101 11.922395 6.6882372 curveto
+11.878515 6.8409195 11.811548 6.9167189 11.655665 6.9901354 curveto
+11.541189 7.0440521 11.396372 7.0851956 11.33385 7.0815667 curveto
+11.220176 7.0749664 lineto
+11.341856 7.1243532 lineto
+11.491916 7.1852576 11.527719 7.2743109 11.440422 7.3695249 curveto
+11.403948 7.4093043 11.374518 7.4762378 11.375018 7.5182656 curveto
+11.375517 7.560296 11.261085 7.6881556 11.120728 7.8024025 curveto
+10.980367 7.9166486 10.810985 8.0722175 10.744315 8.1481089 curveto
+10.677647 8.2240012 10.539676 8.3715074 10.437711 8.4759024 curveto
+10.227988 8.690621 10.075168 8.8762332 10.009539 8.9959491 curveto
+9.9849947 9.0407225 9.8705337 9.19101 9.7551782 9.3299201 curveto
+9.560441 9.5644283 9.4580745 9.7113518 9.2207072 10.097025 curveto
+9.1354736 10.235519 9.104957 10.246579 8.8245001 10.240633 curveto
+8.4567381 10.232838 8.0532722 10.290896 8.0734957 10.348702 curveto
+8.0820594 10.373175 8.28086 10.400078 8.5483885 10.412967 curveto
+8.9874765 10.434125 9.010739 10.439546 9.056226 10.531296 curveto
+9.0902146 10.599851 9.0478978 10.69008 8.9088061 10.84564 curveto
+8.6729287 11.109448 8.3801155 11.624788 8.3327087 11.859551 curveto
+8.2992351 12.02532 8.0888731 12.493215 7.8661961 12.897188 curveto
+7.7858777 13.042907 7.6841728 13.122993 7.4727254 13.207032 curveto
+7.2077263 13.312354 7.1619648 13.316212 6.825297 13.261636 curveto
+6.6260447 13.229335 6.4056625 13.170004 6.3355575 13.129788 curveto
+6.2654519 13.089573 6.0915385 13.018332 5.9490828 12.971477 curveto
+5.6900738 12.886285 lineto
+5.9036607 13.032577 lineto
+6.0211324 13.113035 6.1751236 13.195089 6.2458585 13.214911 curveto
+6.4745659 13.279008 6.5056636 13.294368 6.526337 13.353456 curveto
+6.5543126 13.433414 5.8741653 14.306235 5.6296942 14.504098 curveto
+5.5203072 14.592631 5.3453947 14.74918 5.2410014 14.851983 curveto
+5.1366074 14.954786 4.9999612 15.071505 4.937343 15.111357 curveto
+4.8747245 15.151208 4.7373742 15.252311 4.6321206 15.336024 curveto
+4.3786813 15.537597 3.8208562 15.898192 3.6206777 15.989851 curveto
+3.5326919 16.030142 3.4022658 16.10496 3.3308439 16.156118 curveto
+3.2594208 16.207276 3.1293076 16.262671 3.0417028 16.279222 curveto
+2.9283109 16.300644 2.8681542 16.354989 2.8329004 16.467858 curveto
+2.7575798 16.709005 2.6181883 17.396687 2.6212177 17.512191 curveto
+2.6226936 17.568451 2.6152502 17.762005 2.6046774 17.942304 curveto
+2.5876869 18.232049 2.566194 18.280496 2.4196111 18.359471 curveto
+2.1625265 18.497979 1.7981789 18.846119 1.6233239 19.120339 curveto
+1.5360764 19.257162 1.4506071 19.367956 1.4333928 19.366538 curveto
+1.4161786 19.365122 1.369273 19.335437 1.329157 19.300577 curveto
+closepath
+4.3978098 9.26112 moveto
+4.3636337 9.1650234 4.3489215 9.1517998 4.3311616 9.2012208 curveto
+4.3014342 9.2839435 4.33348 9.3755349 4.3938901 9.3805073 curveto
+4.4201668 9.3826726 4.4219306 9.3289485 4.3978098 9.26112 curveto
+closepath
+10.692711 7.335742 moveto
+10.820428 7.3011226 10.9941 7.2361293 11.078647 7.1913104 curveto
+11.23237 7.1098232 lineto
+11.036662 7.1182906 lineto
+10.825214 7.1274415 10.311136 7.2844263 10.29103 7.3459876 curveto
+10.270944 7.4074789 10.444367 7.4030567 10.692711 7.335742 curveto
+closepath
+8.6122334 5.2574373 moveto
+8.5937694 5.2046655 8.9391623 5.0506733 8.9894075 5.0892761 curveto
+9.0704362 5.1515305 9.0471672 5.1902682 8.9118055 5.2184705 curveto
+8.8344991 5.2345772 8.7386718 5.2590882 8.6988591 5.2729394 curveto
+8.6590439 5.2867904 8.6200621 5.2798147 8.6122334 5.2574373 curveto
+closepath
+9.3026912 4.9947839 moveto
+9.3477653 4.9514072 9.4308666 4.9203742 9.4873671 4.9258223 curveto
+9.5888372 4.9356062 9.5890906 4.936693 9.5081458 5.0145947 curveto
+9.4630742 5.0579714 9.3799679 5.0890042 9.3234698 5.083556 curveto
+9.2220006 5.0737725 9.2217455 5.0726865 9.3026912 4.9947839 curveto
+closepath
+9.7976052 4.8178736 moveto
+9.8709268 4.7473101 10.142438 4.7240291 10.16427 4.786433 curveto
+10.177345 4.8238017 9.8989586 4.9149302 9.8013208 4.9052417 curveto
+9.7281989 4.8979851 9.7276538 4.885195 9.7976052 4.8178736 curveto
+closepath
+10.237741 4.7311763 moveto
+10.220531 4.6819926 10.683725 4.5486645 10.975459 4.5188269 curveto
+11.098652 4.5062271 11.253738 4.4720498 11.320092 4.4428768 curveto
+11.536878 4.3475654 12.381196 4.1971432 12.441091 4.2431601 curveto
+12.562061 4.3361006 12.492573 4.4317658 12.315138 4.4165589 curveto
+12.049494 4.3937929 11.42807 4.5013019 10.695248 4.6968042 curveto
+10.362722 4.7855169 10.259466 4.7932741 10.237741 4.7311763 curveto
+closepath
+fill
+grestore
+gsave
+0.76862746 0.58431375 0.43137255 setrgbcolor
+newpath
+1.3322934 19.26841 moveto
+1.3058614 19.240783 1.3054769 19.18637 1.3314406 19.147493 curveto
+1.3574045 19.108611 1.4223516 18.836053 1.4757656 18.541801 curveto
+1.5993197 17.861166 1.6769936 17.580987 2.0299938 16.542618 curveto
+2.1379616 16.225023 lineto
+1.9718318 15.667209 lineto
+1.8660602 15.312062 1.8013683 14.998332 1.7937736 14.803699 curveto
+1.7872122 14.635565 1.7727266 14.418897 1.7615825 14.32221 curveto
+1.6965773 13.758223 1.9442956 12.195851 2.1771773 11.701041 curveto
+2.2639601 11.516649 2.3539579 11.313478 2.3771716 11.249549 curveto
+2.4485944 11.052856 2.5255559 11.110482 2.6766787 11.47381 curveto
+2.9224591 12.064713 3.0424987 12.043218 2.8391992 11.444707 curveto
+2.7169764 11.084888 2.6459977 10.37046 2.7036828 10.080688 curveto
+2.741026 9.8930988 3.140786 9.1752633 3.4107808 8.810975 curveto
+3.5081623 8.6795843 3.5954069 8.618279 3.6756156 8.6248825 curveto
+3.7842334 8.6338239 3.8055662 8.6565865 3.9076881 8.8725233 curveto
+4.0708235 9.2174788 4.1178063 9.3670047 4.0516102 9.3305638 curveto
+4.0200018 9.3131654 3.9596889 9.2004613 3.9175814 9.0801115 curveto
+3.7724369 8.6652637 3.6578424 8.7204547 3.2395565 9.406659 curveto
+2.7163165 10.265042 2.7052474 10.553082 3.1459182 11.843285 curveto
+3.3069373 12.314718 3.41068 12.673334 3.3876999 12.679072 curveto
+3.2824586 12.705352 2.7650964 12.01386 2.6504576 11.693692 curveto
+2.6333571 11.645931 2.5874497 11.57484 2.5484442 11.535718 curveto
+2.4883003 11.475391 2.4687256 11.480393 2.4196131 11.56864 curveto
+2.1971208 11.96842 1.9957277 12.806136 1.9372945 13.574886 curveto
+1.9164977 13.848507 1.8875822 14.158295 1.8730401 14.263304 curveto
+1.8348779 14.538871 2.1240063 15.942183 2.2201204 15.947895 curveto
+2.2427292 15.949238 2.2729994 15.894463 2.2873875 15.826174 curveto
+2.3017759 15.757887 2.4246704 15.47949 2.5604867 15.20752 curveto
+2.6963029 14.935548 2.8300041 14.641426 2.8576008 14.553915 curveto
+2.8851978 14.466405 2.9255597 14.396268 2.9472951 14.39806 curveto
+2.990381 14.401605 3.2768726 13.879921 3.2593468 13.829831 curveto
+3.2534262 13.812907 3.3345323 13.677145 3.4395837 13.528136 curveto
+4.0298422 12.690899 4.325149 12.269814 4.5676426 11.919602 curveto
+5.0652471 11.20096 5.641963 10.467339 6.062181 10.018456 curveto
+6.552342 9.4948576 6.947498 9.0604776 7.3140684 8.6423024 curveto
+7.4599882 8.4758383 7.6507954 8.2752015 7.7380831 8.1964436 curveto
+7.8253692 8.1176865 7.9169523 8.0213689 7.9416005 7.9824021 curveto
+7.9823997 7.9179035 8.3027949 7.6376976 8.4969794 7.4966905 curveto
+8.5403561 7.465191 8.669531 7.3491879 8.7840326 7.2389031 curveto
+9.208979 6.8296151 9.4288426 6.6504359 9.4686216 6.6809977 curveto
+9.5166634 6.7179077 9.5355649 6.6958695 9.1152425 7.092986 curveto
+8.9330292 7.2651402 8.6589303 7.5559465 8.5061318 7.7392278 curveto
+7.9872278 8.3616445 7.2005586 9.2436641 7.023072 9.4020421 curveto
+6.6586042 9.7272735 5.9587618 10.580204 5.9444884 10.716564 curveto
+5.936389 10.793939 5.5723422 11.32941 5.1354976 11.906496 curveto
+4.6986506 12.483584 4.2486477 13.107472 4.1354911 13.292918 curveto
+4.0223343 13.478361 3.8419846 13.769781 3.7347141 13.940513 curveto
+3.5373833 14.254592 3.3744979 14.625896 3.3476738 14.822797 curveto
+3.3396093 14.881989 3.2876548 15.021124 3.2322187 15.131988 curveto
+3.1767843 15.242851 3.0855318 15.499788 3.0294372 15.70296 curveto
+2.947416 16.00004 2.9435028 16.076564 3.0094484 16.093812 curveto
+3.0545497 16.105608 3.1174063 16.089452 3.1491325 16.057909 curveto
+3.1808579 16.026367 3.3304922 15.936292 3.4816535 15.857741 curveto
+3.6328148 15.779193 3.7849949 15.685727 3.8198334 15.650038 curveto
+3.8546711 15.614344 3.9820543 15.524722 4.1029059 15.450873 curveto
+4.5178417 15.197323 4.7642985 15.012857 5.0421693 14.747861 curveto
+5.1952542 14.601871 5.3713416 14.449288 5.4334751 14.408793 curveto
+5.5742392 14.317044 6.181601 13.583962 6.2067057 13.475504 curveto
+6.221896 13.409874 6.1761337 13.35741 5.9507684 13.182071 curveto
+5.6294642 12.93209 5.649957 12.912206 6.0050146 13.129442 curveto
+6.1440199 13.214489 6.29516 13.280803 6.34088 13.276801 curveto
+6.5473287 13.25874 6.480712 13.438302 6.1069097 13.907452 curveto
+5.8890833 14.180845 5.6367534 14.46128 5.546179 14.530638 curveto
+5.4556044 14.599999 5.2859322 14.748399 5.1691325 14.860423 curveto
+5.0523326 14.972443 4.9068783 15.093825 4.8459002 15.130163 curveto
+4.7849229 15.166499 4.6628539 15.258489 4.5746352 15.334581 curveto
+4.4864174 15.410678 4.3188416 15.528511 4.202244 15.596438 curveto
+4.0856476 15.664366 3.9261817 15.769574 3.847875 15.830237 curveto
+3.7695671 15.890896 3.6841726 15.938774 3.6581077 15.936627 curveto
+3.632044 15.934481 3.5062874 15.999935 3.378648 16.082081 curveto
+3.2510099 16.164229 3.0840393 16.239779 3.0076033 16.249968 curveto
+2.8979639 16.264588 2.8456275 16.331413 2.7596709 16.566559 curveto
+2.6997442 16.730495 2.6577595 16.884757 2.6663704 16.90937 curveto
+2.6749815 16.933984 2.6591536 17.06272 2.6311958 17.195448 curveto
+2.6032369 17.32818 2.5815919 17.544011 2.5830947 17.675074 curveto
+2.5881867 18.119051 2.5477802 18.269067 2.4067805 18.329666 curveto
+2.1976537 18.419549 1.7517174 18.838952 1.5946325 19.093488 curveto
+1.4475048 19.331894 1.4142481 19.354069 1.3322934 19.26841 curveto
+closepath
+6.7070078 13.206737 moveto
+6.5255884 13.162327 6.301084 13.087618 6.2081115 13.04071 curveto
+6.1151374 12.993801 6.005511 12.95254 5.964495 12.949015 curveto
+5.9234775 12.945493 5.8380158 12.910103 5.774578 12.870377 curveto
+5.7111386 12.830648 5.6147398 12.805246 5.5603567 12.813929 curveto
+5.5015221 12.82332 5.4542385 12.809023 5.4436032 12.778625 curveto
+5.3981844 12.648812 5.5908291 12.691175 6.3484337 12.977597 curveto
+6.9984004 13.223325 7.5778814 13.119806 7.7525084 12.726771 curveto
+7.8003247 12.619156 7.8919314 12.442399 7.9560838 12.333984 curveto
+8.0202311 12.225567 8.096858 12.056665 8.1263653 11.958643 curveto
+8.1821394 11.773367 8.2604655 11.568733 8.424911 11.178672 curveto
+8.4781218 11.05246 8.5839376 10.892383 8.6600605 10.822945 curveto
+8.7361782 10.753507 8.7918711 10.67786 8.7838166 10.654841 curveto
+8.7755014 10.631075 8.6811652 10.61725 8.5655142 10.622854 curveto
+8.3344179 10.634048 7.7787241 10.434544 7.741046 10.326855 curveto
+7.6886645 10.177138 8.2043232 10.063971 8.7968032 10.095159 curveto
+8.9715712 10.104357 9.0016724 10.079932 9.1943507 9.7725801 curveto
+9.6083343 9.1122108 10.295189 8.302083 11.066586 7.5643279 curveto
+11.12395 7.5094634 11.14992 7.4484403 11.124294 7.4287199 curveto
+11.098666 7.4089996 10.932964 7.4243247 10.756066 7.4627755 curveto
+10.407424 7.5385558 10.074997 7.5152513 10.039051 7.4125067 curveto
+10.027099 7.3783521 10.057689 7.3382461 10.107026 7.3233797 curveto
+10.182094 7.3007632 10.197733 7.310116 10.20287 7.3806979 curveto
+10.206246 7.4270875 10.225324 7.4663866 10.245264 7.4680277 curveto
+10.350121 7.4766601 10.918156 7.3255371 11.071606 7.2481847 curveto
+11.255509 7.1554789 11.405935 7.1417284 11.431667 7.2152706 curveto
+11.459587 7.295069 11.295978 7.6418003 11.209887 7.6852849 curveto
+11.116541 7.7324319 10.907141 7.9157525 10.762957 8.0765476 curveto
+10.712976 8.1322888 10.566768 8.2867585 10.438048 8.4198125 curveto
+10.190707 8.675488 10.078269 8.811806 9.9806348 8.9743574 curveto
+9.9478072 9.0290164 9.8255714 9.1869249 9.7090028 9.3252683 curveto
+9.5134983 9.5572879 9.3488652 9.796841 9.1807157 10.093953 curveto
+9.1215178 10.198551 9.0776592 10.210836 8.7940266 10.202266 curveto
+8.3574143 10.189072 7.9299535 10.288071 8.0194877 10.381651 curveto
+8.0548345 10.418595 8.2140889 10.439673 8.5330947 10.449624 curveto
+8.9526608 10.462712 8.9980227 10.471344 9.0230405 10.542853 curveto
+9.038205 10.586197 8.9647299 10.720781 8.8597611 10.841931 curveto
+8.6292864 11.107932 8.3714098 11.571643 8.3045708 11.840261 curveto
+8.2776593 11.948418 8.1954284 12.154138 8.1218361 12.29742 curveto
+8.0482446 12.440698 7.9641239 12.617714 7.9349013 12.690782 curveto
+7.8257787 12.96364 7.6713471 13.119949 7.4430704 13.188585 curveto
+7.0954932 13.293096 7.0630794 13.293895 6.7070078 13.206737 curveto
+closepath
+4.8648 10.629961 moveto
+4.8080711 10.569935 4.7090363 10.465448 4.6447218 10.397769 curveto
+4.5215754 10.268182 4.2577859 9.8065721 4.2756394 9.7519097 curveto
+4.2813931 9.7342937 4.3010121 9.721262 4.3192364 9.7229493 curveto
+4.3656425 9.7272449 4.5504392 9.9605748 4.5844699 10.05784 curveto
+4.6000012 10.102228 4.6369548 10.140543 4.6665911 10.142983 curveto
+4.702388 10.14593 4.6902025 10.088422 4.630283 9.9716488 curveto
+4.5806772 9.8749762 4.5229801 9.6857341 4.5020669 9.5511116 curveto
+4.4811537 9.4164854 4.3906518 9.0773334 4.3009521 8.7974348 curveto
+4.2112533 8.5175351 4.1469937 8.2490765 4.1581545 8.2008583 curveto
+4.1693157 8.1526401 4.3345064 7.9283188 4.5252457 7.7023635 curveto
+4.9132065 7.2427779 5.5279244 6.759551 6.0360681 6.5147125 curveto
+6.2216984 6.4252709 6.4582951 6.2815963 6.561837 6.1954374 curveto
+6.8172717 5.9828841 6.8878314 6.0169178 6.9843263 6.3992143 curveto
+7.0573609 6.688572 7.0622546 6.6966887 7.1538456 6.6803557 curveto
+7.2057174 6.671107 7.2497697 6.6681431 7.2517382 6.6737694 curveto
+7.2537066 6.6793957 7.2540473 6.7764495 7.2524964 6.8894431 curveto
+7.2482192 7.2007906 7.1509028 7.1138555 6.9862733 6.6516201 curveto
+6.837743 6.2345944 6.7967176 6.1924185 6.6641013 6.3204179 curveto
+6.5961851 6.3859691 6.2733195 6.5668226 6.0387606 6.670703 curveto
+5.6431803 6.8458957 4.9668508 7.4154788 4.5356887 7.9365441 curveto
+4.2892688 8.2343469 lineto
+4.486107 8.9825658 lineto
+4.6980244 9.7881141 4.8289933 10.197384 4.9757636 10.512723 curveto
+5.0827537 10.742593 5.0269581 10.801545 4.8648 10.629961 curveto
+closepath
+4.2976049 9.5031741 moveto
+4.2803554 9.4538693 4.2877403 9.4153003 4.3140174 9.4174648 curveto
+4.3402953 9.4196276 4.3759093 9.4617365 4.3931589 9.5110413 curveto
+4.4104089 9.5603451 4.4030233 9.5989149 4.3767466 9.5967514 curveto
+4.3504683 9.5945886 4.314855 9.5524788 4.2976049 9.5031741 curveto
+closepath
+4.1280258 8.9624602 moveto
+4.0528902 8.6401611 4.0800924 8.5432619 4.1931624 8.7304327 curveto
+4.2764452 8.8682967 4.3040739 9.1779303 4.2368366 9.2198911 curveto
+4.2060878 9.2390806 4.1758224 9.1674782 4.1280258 8.9624602 curveto
+closepath
+10.980782 6.9875312 moveto
+11.247792 6.8887922 11.583331 6.8530261 11.607036 6.9207784 curveto
+11.633005 6.9949988 11.558252 7.0185119 11.194285 7.0506076 curveto
+10.736072 7.0910148 10.716543 7.0852453 10.980782 6.9875312 curveto
+closepath
+11.730547 6.8759288 moveto
+11.724892 6.8597645 11.738641 6.755656 11.761104 6.6445771 curveto
+11.808237 6.4114826 12.274626 5.866557 12.620652 5.6402869 curveto
+13.65418 4.9644476 14.874101 4.4727819 15.816444 4.3522818 curveto
+16.139083 4.3110252 16.122105 4.2355933 15.791884 4.2431636 curveto
+15.643042 4.246575 15.119392 4.2346606 14.628215 4.2166871 curveto
+14.137038 4.1987132 13.656009 4.1964872 13.559264 4.2117399 curveto
+13.321863 4.2491682 12.883822 4.4318185 12.731406 4.5569318 curveto
+12.592003 4.6713635 12.53983 4.6798676 12.509471 4.5931015 curveto
+12.474653 4.4935818 13.032411 4.1712266 13.309379 4.1307972 curveto
+13.876313 4.0480409 14.055292 4.0380353 14.424719 4.0684492 curveto
+14.637029 4.0859273 15.228395 4.1033769 15.738865 4.1072258 curveto
+16.671424 4.1142573 16.802252 4.1347192 16.793834 4.2722263 curveto
+16.791887 4.3040332 16.625973 4.359944 16.425135 4.3964721 curveto
+15.080875 4.6409672 14.018184 4.9767913 13.507269 5.3185586 curveto
+13.394226 5.3941784 13.284013 5.454589 13.262356 5.452806 curveto
+13.240696 5.4510229 13.17782 5.4821966 13.122625 5.5220806 curveto
+13.067431 5.561962 12.902688 5.6705582 12.756529 5.7634026 curveto
+12.610369 5.8562466 12.435925 5.9965279 12.368874 6.0751386 curveto
+12.301821 6.1537482 12.182989 6.2715657 12.104801 6.3369543 curveto
+12.026611 6.4023433 11.933972 6.5366507 11.898934 6.6354137 curveto
+11.836395 6.8116878 11.750831 6.9339048 11.730547 6.8759288 curveto
+closepath
+7.1796676 6.3232684 moveto
+7.1435757 6.2266365 7.1805652 5.9313516 7.2421231 5.8246812 curveto
+7.262855 5.7887564 7.4249324 5.6966901 7.6022957 5.620088 curveto
+7.7796581 5.5434866 7.9791864 5.4572977 8.045692 5.4285575 curveto
+8.1666125 5.3763033 lineto
+8.0793543 5.4584575 lineto
+7.9676166 5.5636603 7.5124174 5.8368422 7.3793542 5.8785554 curveto
+7.3232453 5.8961443 7.268949 5.9751343 7.2586936 6.0540904 curveto
+7.2484393 6.1330464 7.2340114 6.2461211 7.2266325 6.3053688 curveto
+7.2151015 6.3979492 7.2084994 6.4004652 7.1796676 6.3232684 curveto
+closepath
+12.174419 4.2985722 moveto
+12.29348 4.229245 12.444864 4.2345866 12.444844 4.3081153 curveto
+12.444834 4.3380416 12.362303 4.3607635 12.261439 4.3586077 curveto
+12.079777 4.354725 12.078958 4.3541598 12.174419 4.2985722 curveto
+closepath
+fill
+grestore
+gsave
+0.13333334 0.14117648 0.14901961 setrgbcolor
+newpath
+1.3322934 19.26841 moveto
+1.3058614 19.240783 1.3054769 19.18637 1.3314406 19.147493 curveto
+1.3574045 19.108611 1.4224141 18.836057 1.4759051 18.541813 curveto
+1.5911739 17.907759 1.6671395 17.636209 2.0529234 16.479208 curveto
+2.1358967 16.230361 2.1341835 16.213235 1.9716928 15.6672 curveto
+1.8661362 15.312479 1.8013591 14.998101 1.7937736 14.803699 curveto
+1.7872122 14.635565 1.7727266 14.418897 1.7615825 14.32221 curveto
+1.6965773 13.758223 1.9442956 12.195851 2.1771773 11.701041 curveto
+2.2639601 11.516649 2.3539579 11.313478 2.3771716 11.249549 curveto
+2.4485944 11.052856 2.5255559 11.110482 2.6766787 11.47381 curveto
+2.9224591 12.064713 3.0424987 12.043218 2.8391992 11.444707 curveto
+2.7169764 11.084888 2.6459977 10.37046 2.7036828 10.080688 curveto
+2.741026 9.8930988 3.140786 9.1752633 3.4107808 8.810975 curveto
+3.5081623 8.6795843 3.5954069 8.618279 3.6756156 8.6248825 curveto
+3.7842334 8.6338239 3.8055662 8.6565865 3.9076881 8.8725233 curveto
+4.0708235 9.2174788 4.1178063 9.3670047 4.0516102 9.3305638 curveto
+4.0200018 9.3131654 3.9596889 9.2004613 3.9175814 9.0801115 curveto
+3.7724369 8.6652637 3.6578424 8.7204547 3.2395565 9.406659 curveto
+2.7163165 10.265042 2.7052474 10.553082 3.1459182 11.843285 curveto
+3.3069373 12.314718 3.41068 12.673334 3.3876999 12.679072 curveto
+3.2824586 12.705352 2.7650964 12.01386 2.6504576 11.693692 curveto
+2.6333571 11.645931 2.5874497 11.57484 2.5484442 11.535718 curveto
+2.4883003 11.475391 2.4687256 11.480393 2.4196131 11.56864 curveto
+2.1971208 11.96842 1.9957277 12.806136 1.9372945 13.574886 curveto
+1.9164977 13.848507 1.8875822 14.158295 1.8730401 14.263304 curveto
+1.8348779 14.538871 2.1240063 15.942183 2.2201204 15.947895 curveto
+2.2427292 15.949238 2.2729994 15.894463 2.2873875 15.826174 curveto
+2.3017759 15.757887 2.4246704 15.47949 2.5604867 15.20752 curveto
+2.6963029 14.935548 2.8300041 14.641426 2.8576008 14.553915 curveto
+2.8851978 14.466405 2.9255597 14.396268 2.9472951 14.39806 curveto
+2.990381 14.401605 3.2768726 13.879921 3.2593468 13.829831 curveto
+3.2534262 13.812907 3.3345323 13.677145 3.4395837 13.528136 curveto
+4.0298422 12.690899 4.325149 12.269814 4.5676426 11.919602 curveto
+5.0652471 11.20096 5.641963 10.467339 6.062181 10.018456 curveto
+6.552342 9.4948576 6.947498 9.0604776 7.3140684 8.6423024 curveto
+7.4599882 8.4758383 7.6507954 8.2752015 7.7380831 8.1964436 curveto
+7.8253692 8.1176865 7.9169523 8.0213689 7.9416005 7.9824021 curveto
+7.9823997 7.9179035 8.3027949 7.6376976 8.4969794 7.4966905 curveto
+8.5403561 7.465191 8.669531 7.3491879 8.7840326 7.2389031 curveto
+9.208979 6.8296151 9.4288426 6.6504359 9.4686216 6.6809977 curveto
+9.5185026 6.7193197 9.5397737 6.6954738 9.0258928 7.1772702 curveto
+8.1185585 8.0279467 7.5780029 8.5870807 6.7114095 9.5712996 curveto
+6.56399 9.7387282 6.2851284 10.038988 6.0917157 10.238542 curveto
+5.8616894 10.475873 5.7682004 10.608554 5.8214243 10.622143 curveto
+6.0248213 10.674069 5.9264177 10.859427 5.1501932 11.886495 curveto
+4.7036712 12.477311 4.2464038 13.111321 4.1340439 13.2954 curveto
+4.0216831 13.479479 3.8419846 13.769781 3.7347141 13.940513 curveto
+3.5373833 14.254592 3.3744979 14.625896 3.3476738 14.822797 curveto
+3.3396093 14.881989 3.2876548 15.021124 3.2322187 15.131988 curveto
+3.1767843 15.242851 3.0855318 15.499788 3.0294372 15.70296 curveto
+2.947416 16.00004 2.9435028 16.076564 3.0094484 16.093812 curveto
+3.0545497 16.105608 3.1174063 16.089452 3.1491325 16.057909 curveto
+3.1808579 16.026367 3.3304922 15.936292 3.4816535 15.857741 curveto
+3.6328148 15.779193 3.7849949 15.685727 3.8198334 15.650038 curveto
+3.8546711 15.614344 3.9820543 15.524722 4.1029059 15.450873 curveto
+4.5178417 15.197323 4.7642985 15.012857 5.0421693 14.747861 curveto
+5.1952542 14.601871 5.3713416 14.449288 5.4334751 14.408793 curveto
+5.5742392 14.317044 6.181601 13.583962 6.2067057 13.475504 curveto
+6.221896 13.409874 6.1761337 13.35741 5.9507684 13.182071 curveto
+5.6294642 12.93209 5.649957 12.912206 6.0050146 13.129442 curveto
+6.1440199 13.214489 6.29516 13.280803 6.34088 13.276801 curveto
+6.5473287 13.25874 6.480712 13.438302 6.1069097 13.907452 curveto
+5.8890833 14.180845 5.6367534 14.46128 5.546179 14.530638 curveto
+5.4556044 14.599999 5.2859322 14.748399 5.1691325 14.860423 curveto
+5.0523326 14.972443 4.9068783 15.093825 4.8459002 15.130163 curveto
+4.7849229 15.166499 4.6628539 15.258489 4.5746352 15.334581 curveto
+4.4864174 15.410678 4.3188416 15.528511 4.202244 15.596438 curveto
+4.0856476 15.664366 3.9261817 15.769574 3.847875 15.830237 curveto
+3.7695671 15.890896 3.6841726 15.938774 3.6581077 15.936627 curveto
+3.632044 15.934481 3.5062874 15.999935 3.378648 16.082081 curveto
+3.2510099 16.164229 3.0840393 16.239779 3.0076033 16.249968 curveto
+2.8979639 16.264588 2.8456275 16.331413 2.7596709 16.566559 curveto
+2.6997442 16.730495 2.6577595 16.884757 2.6663704 16.90937 curveto
+2.6749815 16.933984 2.6591536 17.06272 2.6311958 17.195448 curveto
+2.6032369 17.32818 2.5815919 17.544011 2.5830947 17.675074 curveto
+2.5881867 18.119051 2.5477802 18.269067 2.4067805 18.329666 curveto
+2.1976537 18.419549 1.7517174 18.838952 1.5946325 19.093488 curveto
+1.4475048 19.331894 1.4142481 19.354069 1.3322934 19.26841 curveto
+closepath
+2.2611692 18.208457 moveto
+2.3338125 18.178979 2.3661388 18.099133 2.3677685 17.945165 curveto
+2.3690542 17.823628 2.4128037 17.502427 2.4649877 17.23139 curveto
+2.5171725 16.960353 2.5539821 16.721548 2.5467877 16.700709 curveto
+2.5395935 16.679872 2.5550542 16.612582 2.5811444 16.551179 curveto
+2.6072349 16.489776 2.6583427 16.314658 2.6947162 16.16203 curveto
+2.852846 15.498511 2.8918723 15.383578 3.2123669 14.637535 curveto
+3.2570697 14.533477 3.3237188 14.372457 3.3604747 14.279717 curveto
+3.5427486 13.819812 4.2272489 12.779307 5.015965 11.763222 curveto
+5.4780167 11.167971 5.6936558 10.840893 5.6695232 10.771917 curveto
+5.6664186 10.763046 5.4964503 10.978482 5.2918154 11.250666 curveto
+5.0871808 11.522851 4.8128317 11.887548 4.6821521 12.061106 curveto
+4.0712889 12.872406 3.3610199 13.921882 3.2598149 14.162723 curveto
+3.2180378 14.262139 3.128055 14.43763 3.0598539 14.552705 curveto
+2.9916525 14.667774 2.9416346 14.778454 2.948702 14.798655 curveto
+2.9651678 14.845713 2.6956689 15.429526 2.5491295 15.664248 curveto
+2.4874273 15.763078 2.4104564 15.942835 2.3780833 16.063708 curveto
+2.3457098 16.18458 2.2610752 16.406018 2.190006 16.555788 curveto
+1.9637577 17.032594 1.7366338 17.832806 1.7868311 17.976276 curveto
+1.7994286 18.012284 1.881012 18.088212 1.9681248 18.145005 curveto
+2.1546113 18.266586 2.1306947 18.261405 2.2611692 18.208457 curveto
+closepath
+6.7070078 13.206737 moveto
+6.5255884 13.162327 6.301084 13.087618 6.2081115 13.04071 curveto
+6.1151374 12.993801 6.005511 12.95254 5.964495 12.949015 curveto
+5.9234775 12.945493 5.8380158 12.910103 5.774578 12.870377 curveto
+5.7111386 12.830648 5.6147398 12.805246 5.5603567 12.813929 curveto
+5.5015221 12.82332 5.4542385 12.809023 5.4436032 12.778625 curveto
+5.3981844 12.648812 5.5908291 12.691175 6.3484337 12.977597 curveto
+6.9984004 13.223325 7.5778814 13.119806 7.7525084 12.726771 curveto
+7.8003247 12.619156 7.8919314 12.442399 7.9560838 12.333984 curveto
+8.0202311 12.225567 8.096858 12.056665 8.1263653 11.958643 curveto
+8.1821394 11.773367 8.2604655 11.568733 8.424911 11.178672 curveto
+8.4781218 11.05246 8.5839376 10.892383 8.6600605 10.822945 curveto
+8.7361782 10.753507 8.7918711 10.67786 8.7838166 10.654841 curveto
+8.7755014 10.631075 8.6811652 10.61725 8.5655142 10.622854 curveto
+8.3344179 10.634048 7.7787241 10.434544 7.741046 10.326855 curveto
+7.6886645 10.177138 8.2043232 10.063971 8.7968032 10.095159 curveto
+8.9715712 10.104357 9.0016724 10.079932 9.1943507 9.7725801 curveto
+9.6083343 9.1122108 10.295189 8.302083 11.066586 7.5643279 curveto
+11.12395 7.5094634 11.14992 7.4484403 11.124294 7.4287199 curveto
+11.098666 7.4089996 10.932964 7.4243247 10.756066 7.4627755 curveto
+10.407424 7.5385558 10.074997 7.5152513 10.039051 7.4125067 curveto
+10.027099 7.3783521 10.057689 7.3382461 10.107026 7.3233797 curveto
+10.182094 7.3007632 10.197733 7.310116 10.20287 7.3806979 curveto
+10.206246 7.4270875 10.225324 7.4663866 10.245264 7.4680277 curveto
+10.350121 7.4766601 10.918156 7.3255371 11.071606 7.2481847 curveto
+11.255509 7.1554789 11.405935 7.1417284 11.431667 7.2152706 curveto
+11.459587 7.295069 11.295978 7.6418003 11.209887 7.6852849 curveto
+11.116541 7.7324319 10.907141 7.9157525 10.762957 8.0765476 curveto
+10.712976 8.1322888 10.566768 8.2867585 10.438048 8.4198125 curveto
+10.190707 8.675488 10.078269 8.811806 9.9806348 8.9743574 curveto
+9.9478072 9.0290164 9.8255714 9.1869249 9.7090028 9.3252683 curveto
+9.5134983 9.5572879 9.3488652 9.796841 9.1807157 10.093953 curveto
+9.1215178 10.198551 9.0776592 10.210836 8.7940266 10.202266 curveto
+8.3574143 10.189072 7.9299535 10.288071 8.0194877 10.381651 curveto
+8.0548345 10.418595 8.2140889 10.439673 8.5330947 10.449624 curveto
+8.9526608 10.462712 8.9980227 10.471344 9.0230405 10.542853 curveto
+9.038205 10.586197 8.9647299 10.720781 8.8597611 10.841931 curveto
+8.6292864 11.107932 8.3714098 11.571643 8.3045708 11.840261 curveto
+8.2776593 11.948418 8.1954284 12.154138 8.1218361 12.29742 curveto
+8.0482446 12.440698 7.9641239 12.617714 7.9349013 12.690782 curveto
+7.8257787 12.96364 7.6713471 13.119949 7.4430704 13.188585 curveto
+7.0954932 13.293096 7.0630794 13.293895 6.7070078 13.206737 curveto
+closepath
+4.8648 10.629961 moveto
+4.8080711 10.569935 4.7090363 10.465448 4.6447218 10.397769 curveto
+4.5215754 10.268182 4.2577859 9.8065721 4.2756394 9.7519097 curveto
+4.2813931 9.7342937 4.3010121 9.721262 4.3192364 9.7229493 curveto
+4.3656425 9.7272449 4.5504392 9.9605748 4.5844699 10.05784 curveto
+4.6000012 10.102228 4.6369548 10.140543 4.6665911 10.142983 curveto
+4.702388 10.14593 4.6902025 10.088422 4.630283 9.9716488 curveto
+4.5806772 9.8749762 4.5229801 9.6857341 4.5020669 9.5511116 curveto
+4.4811537 9.4164854 4.3906518 9.0773334 4.3009521 8.7974348 curveto
+4.2112533 8.5175351 4.1469937 8.2490765 4.1581545 8.2008583 curveto
+4.1693157 8.1526401 4.3345064 7.9283188 4.5252457 7.7023635 curveto
+4.9132065 7.2427779 5.5279244 6.759551 6.0360681 6.5147125 curveto
+6.2216984 6.4252709 6.4582951 6.2815963 6.561837 6.1954374 curveto
+6.8172717 5.9828841 6.8878314 6.0169178 6.9843263 6.3992143 curveto
+7.0573609 6.688572 7.0622546 6.6966887 7.1538456 6.6803557 curveto
+7.2057174 6.671107 7.2497697 6.6681431 7.2517382 6.6737694 curveto
+7.2537066 6.6793957 7.2540473 6.7764495 7.2524964 6.8894431 curveto
+7.2482192 7.2007906 7.1509028 7.1138555 6.9862733 6.6516201 curveto
+6.837743 6.2345944 6.7967176 6.1924185 6.6641013 6.3204179 curveto
+6.5961851 6.3859691 6.2733195 6.5668226 6.0387606 6.670703 curveto
+5.6431803 6.8458957 4.9668508 7.4154788 4.5356887 7.9365441 curveto
+4.2892688 8.2343469 lineto
+4.486107 8.9825658 lineto
+4.6980244 9.7881141 4.8289933 10.197384 4.9757636 10.512723 curveto
+5.0827537 10.742593 5.0269581 10.801545 4.8648 10.629961 curveto
+closepath
+4.2976049 9.5031741 moveto
+4.2803554 9.4538693 4.2877403 9.4153003 4.3140174 9.4174648 curveto
+4.3402953 9.4196276 4.3759093 9.4617365 4.3931589 9.5110413 curveto
+4.4104089 9.5603451 4.4030233 9.5989149 4.3767466 9.5967514 curveto
+4.3504683 9.5945886 4.314855 9.5524788 4.2976049 9.5031741 curveto
+closepath
+4.1280258 8.9624602 moveto
+4.0528902 8.6401611 4.0800924 8.5432619 4.1931624 8.7304327 curveto
+4.2764452 8.8682967 4.3040739 9.1779303 4.2368366 9.2198911 curveto
+4.2060878 9.2390806 4.1758224 9.1674782 4.1280258 8.9624602 curveto
+closepath
+10.980782 6.9875312 moveto
+11.247792 6.8887922 11.583331 6.8530261 11.607036 6.9207784 curveto
+11.633005 6.9949988 11.558252 7.0185119 11.194285 7.0506076 curveto
+10.736072 7.0910148 10.716543 7.0852453 10.980782 6.9875312 curveto
+closepath
+11.730547 6.8759288 moveto
+11.724892 6.8597645 11.738641 6.755656 11.761104 6.6445771 curveto
+11.808237 6.4114826 12.274626 5.866557 12.620652 5.6402869 curveto
+13.65418 4.9644476 14.874101 4.4727819 15.816444 4.3522818 curveto
+16.139083 4.3110252 16.122105 4.2355933 15.791884 4.2431636 curveto
+15.643042 4.246575 15.119392 4.2346606 14.628215 4.2166871 curveto
+14.137038 4.1987132 13.656009 4.1964872 13.559264 4.2117399 curveto
+13.321863 4.2491682 12.883822 4.4318185 12.731406 4.5569318 curveto
+12.592003 4.6713635 12.53983 4.6798676 12.509471 4.5931015 curveto
+12.474653 4.4935818 13.032411 4.1712266 13.309379 4.1307972 curveto
+13.876313 4.0480409 14.055292 4.0380353 14.424719 4.0684492 curveto
+14.637029 4.0859273 15.228395 4.1033769 15.738865 4.1072258 curveto
+16.671424 4.1142573 16.802252 4.1347192 16.793834 4.2722263 curveto
+16.791887 4.3040332 16.625973 4.359944 16.425135 4.3964721 curveto
+15.080875 4.6409672 14.018184 4.9767913 13.507269 5.3185586 curveto
+13.394226 5.3941784 13.284013 5.454589 13.262356 5.452806 curveto
+13.240696 5.4510229 13.17782 5.4821966 13.122625 5.5220806 curveto
+13.067431 5.561962 12.902688 5.6705582 12.756529 5.7634026 curveto
+12.610369 5.8562466 12.435925 5.9965279 12.368874 6.0751386 curveto
+12.301821 6.1537482 12.182989 6.2715657 12.104801 6.3369543 curveto
+12.026611 6.4023433 11.933972 6.5366507 11.898934 6.6354137 curveto
+11.836395 6.8116878 11.750831 6.9339048 11.730547 6.8759288 curveto
+closepath
+7.1796676 6.3232684 moveto
+7.1435757 6.2266365 7.1805652 5.9313516 7.2421231 5.8246812 curveto
+7.262855 5.7887564 7.4249324 5.6966901 7.6022957 5.620088 curveto
+7.7796581 5.5434866 7.9791864 5.4572977 8.045692 5.4285575 curveto
+8.1666125 5.3763033 lineto
+8.0793543 5.4584575 lineto
+7.9676166 5.5636603 7.5124174 5.8368422 7.3793542 5.8785554 curveto
+7.3232453 5.8961443 7.268949 5.9751343 7.2586936 6.0540904 curveto
+7.2484393 6.1330464 7.2340114 6.2461211 7.2266325 6.3053688 curveto
+7.2151015 6.3979492 7.2084994 6.4004652 7.1796676 6.3232684 curveto
+closepath
+12.174419 4.2985722 moveto
+12.29348 4.229245 12.444864 4.2345866 12.444844 4.3081153 curveto
+12.444834 4.3380416 12.362303 4.3607635 12.261439 4.3586077 curveto
+12.079777 4.354725 12.078958 4.3541598 12.174419 4.2985722 curveto
+closepath
+fill
+grestore
+gsave
+0.1254902 0.12941177 0.14901961 setrgbcolor
+newpath
+1.3456408 19.282362 moveto
+1.3265506 19.262408 1.3359643 19.170137 1.3665615 19.077312 curveto
+1.397159 18.984489 1.4635985 18.676883 1.5142033 18.393747 curveto
+1.599294 17.917662 1.8258328 17.133097 2.0544103 16.522861 curveto
+2.1436853 16.28452 2.1421029 16.243066 2.0277319 15.824171 curveto
+1.9608596 15.579244 1.8946263 15.348522 1.8805461 15.311446 curveto
+1.8284081 15.174175 1.7882186 14.607356 1.8308718 14.610865 curveto
+1.8554198 14.612886 1.8835069 14.678068 1.8940753 14.757544 curveto
+1.9301381 15.028753 2.0725602 15.741088 2.1153024 15.864028 curveto
+2.1721189 16.027456 2.2446063 16.026411 2.2793541 15.861657 curveto
+2.2948144 15.788358 2.3810915 15.594676 2.4710815 15.431251 curveto
+2.5610727 15.267825 2.6871541 15.001312 2.7512637 14.838994 curveto
+2.8153737 14.676677 2.9200039 14.469814 2.9837787 14.379297 curveto
+3.1399202 14.157679 3.2764433 13.878692 3.2565597 13.821865 curveto
+3.2476466 13.796385 3.2768778 13.742845 3.3215173 13.702885 curveto
+3.3661593 13.662924 3.4743945 13.518598 3.5620424 13.382163 curveto
+3.6496894 13.245724 3.8291558 12.985645 3.9608557 12.804203 curveto
+4.0925565 12.622765 4.3334792 12.280203 4.4962401 12.042958 curveto
+4.947569 11.385095 5.8316105 10.256768 6.1921346 9.8784458 curveto
+6.8256769 9.2136249 7.0575807 8.9637334 7.3382265 8.6434584 curveto
+7.7545948 8.1682957 8.0619253 7.8578701 8.3663561 7.6049721 curveto
+8.5146587 7.4817755 8.7223824 7.2996534 8.8279683 7.2002562 curveto
+8.9335526 7.1008583 9.047604 7.009072 9.0814093 6.9962855 curveto
+9.1152172 6.9835007 9.1981107 6.9082033 9.2656188 6.8289586 curveto
+9.3331269 6.7497166 9.4049876 6.6976537 9.4253039 6.7132649 curveto
+9.4456262 6.7288765 9.2323702 6.9647031 8.9514051 7.2373238 curveto
+8.6704382 7.5099446 8.3226127 7.8474799 8.1784572 7.9874018 curveto
+7.9170363 8.2411483 7.2195267 8.9942145 6.7114095 9.5712996 curveto
+6.56399 9.7387282 6.2851284 10.038988 6.0917157 10.238542 curveto
+5.8616894 10.475873 5.7682004 10.608554 5.8214243 10.622143 curveto
+5.866178 10.633567 5.9106431 10.66535 5.9202366 10.692772 curveto
+5.9493988 10.776123 5.7202378 11.127467 5.1323179 11.900794 curveto
+4.4683652 12.774126 4.0102398 13.439098 3.6990975 13.981111 curveto
+3.4829895 14.357575 3.4342599 14.467491 3.2894709 14.905069 curveto
+3.2547662 15.00995 3.1998435 15.13529 3.1674202 15.183596 curveto
+3.0555864 15.350218 2.8978568 16.074902 2.9625975 16.124643 curveto
+3.0115221 16.162231 3.0970805 16.128342 3.3782312 15.960009 curveto
+3.4837334 15.896841 3.6228844 15.817126 3.6874578 15.782858 curveto
+3.7520293 15.748592 3.8332322 15.690972 3.8679074 15.654816 curveto
+3.9025818 15.618659 4.0304477 15.528706 4.1520524 15.45492 curveto
+4.4840403 15.25348 4.8663714 14.969103 5.0061821 14.819615 curveto
+5.2015316 14.610745 5.2457998 14.571198 5.4423847 14.429918 curveto
+5.6720547 14.264864 6.2530951 13.500836 6.2202811 13.40704 curveto
+6.2069635 13.368972 6.0925232 13.265681 5.9659693 13.177504 curveto
+5.7258069 13.010174 5.8274982 13.015626 6.0905669 13.184191 curveto
+6.1690159 13.234455 6.2840519 13.27977 6.3462027 13.284887 curveto
+6.4083511 13.290005 6.466819 13.315963 6.4761283 13.342575 curveto
+6.5021579 13.416969 5.7324576 14.373178 5.5066157 14.547015 curveto
+5.3965151 14.631763 5.246418 14.769717 5.1730661 14.853576 curveto
+5.0997158 14.937438 4.9630357 15.040569 4.8693349 15.082758 curveto
+4.7756346 15.124945 4.7042462 15.174546 4.7106962 15.192979 curveto
+4.717146 15.211413 4.5827239 15.319572 4.4119825 15.433332 curveto
+4.2412396 15.547091 4.005151 15.707148 3.8873397 15.789015 curveto
+3.7695295 15.870882 3.6496646 15.935932 3.6209738 15.933571 curveto
+3.5922827 15.931209 3.4783989 15.99174 3.3678983 16.068087 curveto
+3.2573971 16.144431 3.0968477 16.220526 3.0111232 16.237184 curveto
+2.8842332 16.261844 2.8359493 16.322134 2.7513957 16.561503 curveto
+2.6942714 16.723219 2.6550258 16.876946 2.6641829 16.903121 curveto
+2.6733406 16.929292 2.6580943 17.030677 2.6303028 17.128421 curveto
+2.6025123 17.226165 2.5766137 17.481057 2.5727495 17.694849 curveto
+2.5641701 18.1696 2.534779 18.255835 2.3478055 18.354826 curveto
+2.0952343 18.488545 1.7330518 18.837108 1.5885956 19.085483 curveto
+1.4510697 19.321941 1.4130141 19.352779 1.3456408 19.282362 curveto
+closepath
+2.2611692 18.208457 moveto
+2.3338125 18.178979 2.3661388 18.099133 2.3677685 17.945165 curveto
+2.3690542 17.823628 2.4128037 17.502427 2.4649877 17.23139 curveto
+2.5171725 16.960353 2.5539821 16.721548 2.5467877 16.700709 curveto
+2.5395935 16.679872 2.5550542 16.612582 2.5811444 16.551179 curveto
+2.6072349 16.489776 2.6583427 16.314658 2.6947162 16.16203 curveto
+2.852846 15.498511 2.8918723 15.383578 3.2123669 14.637535 curveto
+3.2570697 14.533477 3.3237188 14.372457 3.3604747 14.279717 curveto
+3.5427486 13.819812 4.2272489 12.779307 5.015965 11.763222 curveto
+5.4780167 11.167971 5.6936558 10.840893 5.6695232 10.771917 curveto
+5.6664186 10.763046 5.4964503 10.978482 5.2918154 11.250666 curveto
+5.0871808 11.522851 4.8128317 11.887548 4.6821521 12.061106 curveto
+4.0712889 12.872406 3.3610199 13.921882 3.2598149 14.162723 curveto
+3.2180378 14.262139 3.128055 14.43763 3.0598539 14.552705 curveto
+2.9916525 14.667774 2.9416346 14.778454 2.948702 14.798655 curveto
+2.9651678 14.845713 2.6956689 15.429526 2.5491295 15.664248 curveto
+2.4874273 15.763078 2.4104564 15.942835 2.3780833 16.063708 curveto
+2.3457098 16.18458 2.2610752 16.406018 2.190006 16.555788 curveto
+1.9637577 17.032594 1.7366338 17.832806 1.7868311 17.976276 curveto
+1.7994286 18.012284 1.881012 18.088212 1.9681248 18.145005 curveto
+2.1546113 18.266586 2.1306947 18.261405 2.2611692 18.208457 curveto
+closepath
+1.7732244 14.356609 moveto
+1.7338852 14.244171 1.8081996 13.295927 1.9012447 12.723065 curveto
+1.9680145 12.311979 2.083515 11.918175 2.2211313 11.632408 curveto
+2.302535 11.463368 2.3831408 11.282142 2.4002561 11.229683 curveto
+2.455766 11.059535 2.543935 11.122175 2.6428141 11.402011 curveto
+2.6929147 11.543802 2.7973052 11.762977 2.8747918 11.889065 curveto
+3.0156778 12.118316 lineto
+2.9683922 11.896771 lineto
+2.9423861 11.77492 2.8742806 11.504862 2.8170479 11.296644 curveto
+2.687515 10.825387 2.6676167 10.122411 2.776863 9.8769532 curveto
+2.8646567 9.6796958 3.2033285 9.1199358 3.4219349 8.8107696 curveto
+3.5740205 8.5956817 3.7797997 8.5536852 3.839902 8.7254689 curveto
+3.8633551 8.7924993 3.839414 8.8124919 3.7449981 8.8047181 curveto
+3.6551308 8.7973197 3.5776603 8.8530763 3.4762636 8.9981325 curveto
+3.0564763 9.5986693 2.822887 10.088182 2.8070833 10.400476 curveto
+2.80033 10.533944 2.8464812 10.887074 2.9096436 11.185207 curveto
+3.0053724 11.63707 3.0591614 11.800759 3.2329067 12.168953 curveto
+3.3475425 12.411882 3.4346497 12.631108 3.4264808 12.656122 curveto
+3.4032674 12.727191 3.1302424 12.506538 3.0394676 12.343348 curveto
+2.9958609 12.264952 2.9195098 12.138696 2.8698 12.062777 curveto
+2.8200892 11.986859 2.7139587 11.803959 2.6339561 11.656337 curveto
+2.4884959 11.387929 lineto
+2.4180027 11.507962 lineto
+2.1620045 11.94388 1.975367 12.729672 1.9019183 13.680801 curveto
+1.8553066 14.284398 1.8174718 14.483078 1.7732244 14.356609 curveto
+closepath
+6.5690833 13.173908 moveto
+6.4777313 13.148044 6.3379436 13.089568 6.258446 13.043964 curveto
+6.1789476 12.998359 6.0798288 12.958243 6.0381843 12.954813 curveto
+5.940359 12.946761 5.6170409 12.790277 5.6393916 12.761806 curveto
+5.6487849 12.749835 5.8712632 12.818566 6.1337875 12.914542 curveto
+6.7435854 13.137477 7.1173955 13.17698 7.4132183 13.049751 curveto
+7.6347818 12.954454 7.7138217 12.86223 7.8976866 12.484462 curveto
+8.1334816 12.000008 8.1632834 11.928948 8.227056 11.699094 curveto
+8.3101654 11.399538 8.4189679 11.191405 8.6474186 10.894941 curveto
+8.7483402 10.763977 8.8269745 10.645566 8.8221608 10.631808 curveto
+8.817347 10.618053 8.7114695 10.61178 8.5868802 10.617876 curveto
+8.3968444 10.627169 8.3091114 10.606076 8.0422649 10.486952 curveto
+7.7241772 10.344948 lineto
+7.8070122 10.267526 lineto
+7.9142781 10.167273 8.2490592 10.102916 8.6726977 10.101115 curveto
+9.0100148 10.099677 lineto
+9.2124678 9.7871696 lineto
+9.6281537 9.1455114 10.311434 8.3118185 10.853675 7.7846769 curveto
+11.020302 7.6226881 11.14681 7.4620687 11.134802 7.4277456 curveto
+11.106962 7.3481763 11.124709 7.3474618 10.741443 7.4435784 curveto
+10.374211 7.5356775 10.368899 7.5362987 10.385585 7.485203 curveto
+10.392218 7.4648991 10.463363 7.4409204 10.543684 7.4319169 curveto
+10.624006 7.4229134 10.831222 7.355733 11.004162 7.2826272 curveto
+11.223668 7.1898373 11.338704 7.165155 11.385198 7.2008756 curveto
+11.483087 7.2760824 11.31344 7.5887403 11.072499 7.7771779 curveto
+10.652296 8.1058123 9.7728334 9.1416902 9.3466383 9.8099842 curveto
+9.2642422 9.9391891 9.1726827 10.080335 9.1431753 10.123645 curveto
+9.1136655 10.166954 9.0208558 10.200082 8.9369306 10.197267 curveto
+8.5377825 10.183865 8.4411398 10.188986 8.224031 10.235036 curveto
+7.956107 10.29186 7.9425044 10.30119 8.0158153 10.377814 curveto
+8.0541747 10.417907 8.2038741 10.439277 8.5335302 10.451722 curveto
+8.9266103 10.466559 9.000907 10.479592 9.0210794 10.53725 curveto
+9.0341685 10.574663 8.9294807 10.747688 8.7884364 10.92175 curveto
+8.5160836 11.257859 8.3444707 11.578064 8.2872836 11.856816 curveto
+8.2680766 11.95045 8.1757224 12.17205 8.0820562 12.349262 curveto
+7.98839 12.526471 7.9172193 12.687119 7.9239002 12.706253 curveto
+7.9305837 12.725388 7.8723393 12.825936 7.7944724 12.929687 curveto
+7.5664925 13.233459 7.1045559 13.325523 6.5690833 13.173908 curveto
+closepath
+5.4910972 12.781752 moveto
+5.4819629 12.755644 5.4959899 12.736054 5.5222668 12.738217 curveto
+5.5485439 12.740382 5.5731553 12.751044 5.576959 12.761916 curveto
+5.5807632 12.772787 5.5667363 12.792377 5.5457901 12.805451 curveto
+5.5248435 12.818523 5.5002316 12.807859 5.4910972 12.781752 curveto
+closepath
+4.744705 10.486338 moveto
+4.4932433 10.208956 4.1932967 9.6604787 4.3882649 9.8345553 curveto
+4.4456022 9.8857515 4.5044164 9.9616528 4.5189615 10.003227 curveto
+4.5474834 10.084747 4.6974384 10.203403 4.7259822 10.167038 curveto
+4.7534502 10.132044 4.9449297 10.424987 5.002912 10.59071 curveto
+5.0318119 10.673314 5.0360119 10.739298 5.0122424 10.737341 curveto
+4.9884737 10.735384 4.8680825 10.622431 4.744705 10.486338 curveto
+closepath
+4.5950334 9.8804855 moveto
+4.5727818 9.8572258 4.5387968 9.7319982 4.5195109 9.6021977 curveto
+4.5002246 9.472398 4.4183013 9.1452742 4.3374576 8.8752576 curveto
+4.2566138 8.6052418 4.1840337 8.3356274 4.1761667 8.2761183 curveto
+4.1607631 8.1595915 4.7416135 7.3935014 4.9592916 7.2432448 curveto
+5.0315911 7.1933391 5.2199232 7.0537681 5.3778079 6.9330857 curveto
+5.5356909 6.8124051 5.754463 6.6713438 5.863967 6.6196168 curveto
+6.2011059 6.4603588 6.3878725 6.3519984 6.5955779 6.1951422 curveto
+6.7053145 6.1122709 6.8222029 6.0593852 6.8553296 6.0776205 curveto
+6.9528603 6.1313078 6.9679689 6.2405439 6.8768272 6.2330398 curveto
+6.8306666 6.2292397 6.6335043 6.3207475 6.4386905 6.4363902 curveto
+6.2438749 6.5520331 6.0617033 6.644774 6.0338637 6.642483 curveto
+5.9678389 6.6370466 5.8403601 6.7228397 5.5009922 7.0011018 curveto
+5.3483089 7.1262946 5.2110451 7.2277055 5.1959603 7.2264637 curveto
+5.1493939 7.2226302 4.5759026 7.810109 4.4219766 8.019325 curveto
+4.2563817 8.2444013 4.258533 8.2970765 4.4608912 8.9724798 curveto
+4.7132732 9.8148449 4.746331 10.038618 4.5950334 9.8804855 curveto
+closepath
+3.9244972 9.0998761 moveto
+3.8912826 9.0049419 3.8919528 8.9531627 3.9261536 8.971989 curveto
+3.9577614 8.9893891 4.0043767 9.0629426 4.0297438 9.135443 curveto
+4.05511 9.2079453 4.0543647 9.2654938 4.0280875 9.2633302 curveto
+4.0018096 9.2611684 3.9551939 9.187614 3.9244972 9.0998761 curveto
+closepath
+4.1410583 9.0060064 moveto
+4.1305286 8.9303185 4.1051528 8.8204912 4.0846679 8.7619432 curveto
+4.064183 8.7033951 4.0689228 8.65726 4.0951999 8.6594244 curveto
+4.1471854 8.663705 4.268456 8.9723433 4.2616736 9.0831128 curveto
+4.2539941 9.2085564 4.160965 9.1490841 4.1410583 9.0060064 curveto
+closepath
+10.037253 7.4073717 moveto
+10.044868 7.3840574 10.082078 7.3675325 10.119945 7.3706489 curveto
+10.157809 7.373766 10.195847 7.3964858 10.204472 7.4211386 curveto
+10.213097 7.4457905 10.175886 7.4623164 10.121781 7.4578624 curveto
+10.067675 7.4534076 10.029638 7.4306888 10.037253 7.4073717 curveto
+closepath
+7.057778 6.8903739 moveto
+7.0168794 6.7260872 7.1548053 6.6619597 7.2099659 6.8196154 curveto
+7.2583845 6.9580064 7.2396383 7.0464644 7.1632266 7.0401739 curveto
+7.1135338 7.0360835 7.0833931 6.9932672 7.057778 6.8903739 curveto
+closepath
+11.075829 6.9939556 moveto
+11.058276 6.94379 11.52017 6.8785176 11.578046 6.9229846 curveto
+11.617567 6.9533484 11.598808 6.9828664 11.52535 7.0058927 curveto
+11.411414 7.0416079 11.08951 7.0330598 11.075829 6.9939556 curveto
+closepath
+6.931848 6.5531688 moveto
+6.9257826 6.5347124 6.9310741 6.4910744 6.9436096 6.4561928 curveto
+6.9620394 6.404908 6.9732923 6.4120822 7.002416 6.4936823 curveto
+7.0222261 6.549182 7.0169331 6.5928214 6.9906558 6.5906581 curveto
+6.9643783 6.5884945 6.9379164 6.5716253 6.931848 6.5531688 curveto
+closepath
+11.762531 6.8347244 moveto
+11.728075 6.736237 11.868353 6.3573039 11.971008 6.2715731 curveto
+12.042801 6.2116176 12.174753 6.0742981 12.264239 5.9664189 curveto
+12.353725 5.85854 12.48192 5.7437595 12.54912 5.7113521 curveto
+12.61632 5.6789447 12.720353 5.6135894 12.780305 5.5661168 curveto
+13.017017 5.3786826 13.966343 4.8989424 14.396911 4.7491691 curveto
+14.844417 4.5935027 15.424042 4.4388356 15.911932 4.3448996 curveto
+16.257044 4.2784549 16.260818 4.2072318 15.918937 4.2127511 curveto
+15.770569 4.2151462 15.257989 4.2030886 14.779866 4.1859562 curveto
+13.912852 4.1548866 13.792979 4.1553248 13.528954 4.1905293 curveto
+13.327358 4.2174098 12.869969 4.4098504 12.733317 4.5252827 curveto
+12.668884 4.5797107 12.586349 4.6136274 12.549907 4.6006506 curveto
+12.445301 4.5634033 13.030949 4.1783368 13.242371 4.1453518 curveto
+13.648732 4.0819551 14.213777 4.0525701 14.53382 4.0781916 curveto
+14.717873 4.0929254 15.26455 4.1075147 15.748658 4.1106128 curveto
+16.232768 4.1137098 16.660644 4.128732 16.699494 4.1439942 curveto
+16.849425 4.202894 16.813949 4.306133 16.631966 4.340493 curveto
+15.877801 4.482887 15.301419 4.615465 14.859448 4.7482029 curveto
+14.425598 4.8785032 13.899535 5.0717759 13.770883 5.1481337 curveto
+13.739186 5.1669486 13.617487 5.2368725 13.500442 5.3035207 curveto
+12.907655 5.6410746 12.437671 5.9604742 12.340354 6.0919145 curveto
+12.280629 6.1725804 12.20647 6.2364977 12.175557 6.2339526 curveto
+12.100943 6.2278094 11.877957 6.5558667 11.842514 6.7239268 curveto
+11.817766 6.8412731 11.782104 6.8906694 11.762531 6.8347244 curveto
+closepath
+7.2815402 5.8305989 moveto
+7.2673711 5.7901026 7.6300396 5.5981629 7.8524891 5.5284307 curveto
+8.017114 5.4768242 7.9805034 5.5241415 7.744701 5.6677469 curveto
+7.4798624 5.8290327 7.302778 5.8912976 7.2815402 5.8305989 curveto
+closepath
+12.286221 4.33195 moveto
+12.226364 4.2990008 12.225496 4.285111 12.282165 4.2671086 curveto
+12.368173 4.2397839 12.435156 4.2811854 12.392617 4.3353766 curveto
+12.375997 4.356554 12.328117 4.3550123 12.286221 4.33195 curveto
+closepath
+fill
+grestore
+gsave
+0.14509805 0.14117648 0.15294118 setrgbcolor
+newpath
+1.3514047 19.251557 moveto
+1.3472092 19.239568 1.3831156 19.073636 1.4311953 18.882816 curveto
+1.4792738 18.691997 1.5155049 18.526992 1.511708 18.51614 curveto
+1.4727291 18.404735 1.8385597 17.059611 2.0345114 16.59384 curveto
+2.0799579 16.485817 2.1288202 16.31797 2.1430939 16.220847 curveto
+2.1573675 16.123727 2.1992276 16.034673 2.2361155 16.022956 curveto
+2.2730023 16.011237 2.3102679 15.947812 2.3189252 15.882011 curveto
+2.3275834 15.816213 2.4058909 15.621324 2.4929405 15.448926 curveto
+2.5799905 15.276527 2.7177785 14.971439 2.799135 14.770951 curveto
+2.8804916 14.570463 2.9665816 14.401247 2.9904437 14.394922 curveto
+3.0143068 14.388594 3.0925452 14.25113 3.1643058 14.089443 curveto
+3.2953216 13.794251 3.4271295 13.584651 3.9675675 12.812101 curveto
+4.8860903 11.499087 5.6683749 10.476264 6.1643812 9.9398086 curveto
+6.411231 9.6728261 6.6453541 9.4178576 6.6846549 9.3732058 curveto
+6.7239547 9.3285594 6.8986917 9.1372615 7.0729598 8.9481012 curveto
+7.247229 8.758941 7.4641262 8.5157905 7.554957 8.4077681 curveto
+7.645786 8.2997449 7.7679002 8.1874787 7.8263189 8.1582883 curveto
+7.8847376 8.129098 7.9481355 8.0683065 7.9672052 8.0231969 curveto
+8.003079 7.9383292 8.8128259 7.2195104 8.8674845 7.2240094 curveto
+8.9149134 7.2279129 8.611358 7.5698424 8.2459938 7.9240649 curveto
+7.9243205 8.2359301 7.2476644 8.9622574 6.7114095 9.5712996 curveto
+6.56399 9.7387282 6.2851284 10.038988 6.0917157 10.238542 curveto
+5.8616894 10.475873 5.7682004 10.608554 5.8214243 10.622143 curveto
+5.866178 10.633567 5.9096428 10.662488 5.9180125 10.686413 curveto
+5.9410314 10.752207 5.6886542 11.154967 5.3352574 11.616411 curveto
+4.1817112 13.12265 3.6057843 13.993748 3.4043449 14.536941 curveto
+3.3425369 14.703611 3.2522314 14.922942 3.2036693 15.024344 curveto
+3.021186 15.405372 2.8687806 16.057689 2.9396798 16.154257 curveto
+2.9693094 16.194616 2.957915 16.229616 2.9114624 16.240927 curveto
+2.771104 16.275099 2.554469 17.174611 2.5558021 17.717705 curveto
+2.5561247 17.849414 2.5451359 18.013839 2.5313803 18.083102 curveto
+2.5065382 18.208184 2.3928356 18.35303 2.3218998 18.349964 curveto
+2.1841428 18.344009 1.4499587 19.135379 1.4891965 19.247527 curveto
+1.4964371 19.268222 1.4701114 19.2825 1.4306961 19.279253 curveto
+1.3912802 19.276011 1.3555984 19.263546 1.3514047 19.251557 curveto
+closepath
+2.2611692 18.208457 moveto
+2.3338125 18.178979 2.3661388 18.099133 2.3677685 17.945165 curveto
+2.3690542 17.823628 2.4128037 17.502427 2.4649877 17.23139 curveto
+2.5171725 16.960353 2.5539821 16.721548 2.5467877 16.700709 curveto
+2.5395935 16.679872 2.5550542 16.612582 2.5811444 16.551179 curveto
+2.6072349 16.489776 2.6583427 16.314658 2.6947162 16.16203 curveto
+2.852846 15.498511 2.8918723 15.383578 3.2123669 14.637535 curveto
+3.2570697 14.533477 3.3237188 14.372457 3.3604747 14.279717 curveto
+3.5427486 13.819812 4.2272489 12.779307 5.015965 11.763222 curveto
+5.4780167 11.167971 5.6936558 10.840893 5.6695232 10.771917 curveto
+5.6664186 10.763046 5.4964503 10.978482 5.2918154 11.250666 curveto
+5.0871808 11.522851 4.8128317 11.887548 4.6821521 12.061106 curveto
+4.0712889 12.872406 3.3610199 13.921882 3.2598149 14.162723 curveto
+3.2180378 14.262139 3.128055 14.43763 3.0598539 14.552705 curveto
+2.9916525 14.667774 2.9416346 14.778454 2.948702 14.798655 curveto
+2.9651678 14.845713 2.6956689 15.429526 2.5491295 15.664248 curveto
+2.4874273 15.763078 2.4104564 15.942835 2.3780833 16.063708 curveto
+2.3457098 16.18458 2.2610752 16.406018 2.190006 16.555788 curveto
+1.9637577 17.032594 1.7366338 17.832806 1.7868311 17.976276 curveto
+1.7994286 18.012284 1.881012 18.088212 1.9681248 18.145005 curveto
+2.1546113 18.266586 2.1306947 18.261405 2.2611692 18.208457 curveto
+closepath
+2.0164716 15.847579 moveto
+1.9997294 15.799727 2.0031707 15.749885 2.0241167 15.736811 curveto
+2.0457177 15.723333 2.0795721 15.76269 2.1023333 15.827741 curveto
+2.1244045 15.890827 2.1209641 15.940673 2.0946869 15.93851 curveto
+2.0684086 15.936348 2.0332119 15.895427 2.0164716 15.847579 curveto
+closepath
+3.6151339 15.851281 moveto
+3.6218302 15.83078 3.6680461 15.806743 3.717838 15.797866 curveto
+3.7921673 15.784612 3.8022694 15.792293 3.7742976 15.840789 curveto
+3.7377798 15.904104 3.5948032 15.91353 3.6151339 15.851281 curveto
+closepath
+1.9526228 15.532467 moveto
+1.9348636 15.481707 1.9450642 15.453792 1.9752923 15.470434 curveto
+2.0055199 15.487069 2.0284991 15.529299 2.0263587 15.564266 curveto
+2.020877 15.653799 1.9904877 15.640693 1.9526228 15.532467 curveto
+closepath
+3.9169355 15.664771 moveto
+3.9251198 15.639718 4.0326379 15.564235 4.1558662 15.497033 curveto
+4.2790939 15.429827 4.4303242 15.322875 4.4919311 15.25936 curveto
+4.6010435 15.146866 4.7158576 15.108927 4.6878702 15.194615 curveto
+4.6721488 15.242747 4.068642 15.657399 3.9675778 15.689506 curveto
+3.9269996 15.702396 3.9077232 15.692982 3.9169355 15.664771 curveto
+closepath
+1.8825839 15.181023 moveto
+1.8610222 15.119395 1.8477425 15.030148 1.8530764 14.982705 curveto
+1.8619151 14.904075 1.8662421 14.906355 1.9019784 15.008498 curveto
+1.9235415 15.070128 1.9368197 15.159368 1.9314864 15.206816 curveto
+1.922648 15.285446 1.9183212 15.283164 1.8825839 15.181023 curveto
+closepath
+4.9358389 14.908127 moveto
+5.084247 14.751611 5.5420214 14.354476 5.6388669 14.298224 curveto
+5.6653801 14.282827 5.6940866 14.29028 5.7026628 14.314788 curveto
+5.7112365 14.339296 5.6505414 14.408913 5.5677844 14.469495 curveto
+5.4850258 14.530074 5.3005581 14.69246 5.1578528 14.830346 curveto
+4.874994 15.103663 4.6884702 15.16901 4.9358389 14.908127 curveto
+closepath
+1.7801715 14.111225 moveto
+1.7672331 14.074246 1.7737864 14.033295 1.7947329 14.020222 curveto
+1.8156795 14.00715 1.843404 14.026709 1.8563418 14.063688 curveto
+1.869279 14.100666 1.8627257 14.141616 1.8417796 14.154688 curveto
+1.8208321 14.167761 1.7931087 14.148203 1.7801715 14.111225 curveto
+closepath
+5.7545709 14.204745 moveto
+5.7920952 14.073212 6.1566944 13.640775 6.2012249 13.674987 curveto
+6.2361113 13.701789 5.8001787 14.284676 5.7484319 14.280418 curveto
+5.7401296 14.279734 5.742894 14.245681 5.7545709 14.204745 curveto
+closepath
+1.8048051 13.77907 moveto
+1.7904288 13.740565 1.7965343 13.672504 1.8183717 13.627829 curveto
+1.8692192 13.523801 1.8980728 13.603345 1.8600191 13.742647 curveto
+1.8413831 13.810869 1.8215607 13.823945 1.8048051 13.77907 curveto
+closepath
+1.8491762 13.437038 moveto
+1.8448011 13.376821 1.8536004 13.309965 1.8687311 13.288467 curveto
+1.9129617 13.225616 1.9264002 13.322109 1.8898903 13.440391 curveto
+1.8571287 13.546521 lineto
+1.8491762 13.437038 lineto
+closepath
+6.2506385 13.559971 moveto
+6.2549708 13.512444 6.2414463 13.428078 6.2205818 13.372491 curveto
+6.1918051 13.295822 6.2095823 13.273639 6.294217 13.280608 curveto
+6.5012989 13.297656 6.5145996 13.371194 6.3421761 13.545741 curveto
+6.255227 13.633761 6.2437476 13.635548 6.2506385 13.559971 curveto
+closepath
+1.9021675 12.853295 moveto
+1.9093665 12.731552 1.9908348 12.40658 2.0103899 12.421607 curveto
+2.0512709 12.453014 2.0201936 12.675872 1.9593822 12.787388 curveto
+1.9264914 12.847704 1.9007448 12.877362 1.9021675 12.853295 curveto
+closepath
+6.7000687 13.186902 moveto
+6.5761873 13.161068 6.4228391 13.110693 6.3592948 13.074954 curveto
+6.2546401 13.016095 6.2581849 13.013732 6.3969237 13.04988 curveto
+6.4811645 13.07183 6.6863365 13.111672 6.8528611 13.138412 curveto
+7.1231512 13.181822 7.1828364 13.174563 7.4091985 13.070753 curveto
+7.5486613 13.006796 7.7070483 12.887078 7.7611704 12.804708 curveto
+7.893905 12.602702 7.9086158 12.676703 7.7807728 12.903317 curveto
+7.7028451 13.041453 7.6118593 13.10565 7.3985377 13.17301 curveto
+7.1086303 13.264552 7.0756047 13.265208 6.7000687 13.186902 curveto
+closepath
+5.9152074 12.899802 moveto
+5.7538159 12.8343 5.7502622 12.807522 5.9081206 12.846391 curveto
+5.9779352 12.863579 6.0412915 12.895461 6.0489105 12.91724 curveto
+6.0565303 12.939019 6.056943 12.955115 6.0498259 12.953013 curveto
+6.0427104 12.950912 5.9821311 12.926967 5.9152074 12.899802 curveto
+closepath
+3.209664 12.527394 moveto
+3.079499 12.404301 2.9776608 12.180484 3.0547046 12.186829 curveto
+3.0804134 12.188944 3.0694124 12.104786 3.0302559 11.99981 curveto
+2.9123556 11.683715 2.7070243 10.812118 2.731973 10.733645 curveto
+2.7487441 10.680895 2.7779524 10.753708 2.8362148 10.993504 curveto
+2.8807328 11.176738 3.025062 11.62447 3.1569457 11.988472 curveto
+3.2888291 12.352474 3.3819464 12.648459 3.3638747 12.64622 curveto
+3.3458021 12.643981 3.2764072 12.590507 3.209664 12.527394 curveto
+closepath
+2.0440622 12.210094 moveto
+2.020287 12.146126 2.1483504 11.782772 2.2077323 11.745714 curveto
+2.2338446 11.729417 2.2354684 11.790873 2.2113411 11.882286 curveto
+2.1544134 12.097964 2.0664519 12.270337 2.0440622 12.210094 curveto
+closepath
+7.925841 12.475438 moveto
+7.9370262 12.426505 7.9731171 12.360915 8.0060408 12.329684 curveto
+8.0605116 12.278009 8.0640725 12.28091 8.0455662 12.361862 curveto
+8.0343818 12.410794 7.9982909 12.476386 7.9653672 12.507619 curveto
+7.9108965 12.559293 7.9073356 12.556395 7.925841 12.475438 curveto
+closepath
+2.8572228 11.996446 moveto
+2.8356605 11.934815 2.8376833 11.910495 2.8617179 11.942401 curveto
+2.8857536 11.97431 2.903396 12.024733 2.9009228 12.054457 curveto
+2.8984506 12.084183 2.8787853 12.058075 2.8572228 11.996446 curveto
+closepath
+2.268977 11.657525 moveto
+2.2579126 11.628522 2.2782069 11.551839 2.3140774 11.487113 curveto
+2.3499467 11.422388 2.3978373 11.314996 2.4205021 11.248462 curveto
+2.4778149 11.080211 2.5877859 11.168435 2.6034416 11.395226 curveto
+2.6098103 11.48748 2.6004503 11.527482 2.5826402 11.484118 curveto
+2.5521814 11.409957 2.393692 11.354889 2.4184514 11.427071 curveto
+2.4382701 11.484847 2.2901962 11.713144 2.268977 11.657525 curveto
+closepath
+8.101814 12.153717 moveto
+8.0991766 12.146179 8.1289172 12.075169 8.1678996 11.995917 curveto
+8.2413331 11.846636 8.2480926 11.856416 8.2095576 12.056184 curveto
+8.1911601 12.151552 8.1227294 12.213497 8.101814 12.153717 curveto
+closepath
+8.2996265 11.538024 moveto
+8.3108564 11.489508 8.3388012 11.438109 8.3617245 11.423802 curveto
+8.391587 11.405164 8.3976159 11.422798 8.382987 11.486002 curveto
+8.3717579 11.534516 8.3438122 11.585915 8.3208873 11.600221 curveto
+8.291024 11.618858 8.2849984 11.601225 8.2996265 11.538024 curveto
+closepath
+8.4500795 11.292421 moveto
+8.4242213 11.218511 8.5516261 10.983656 8.6895407 10.851005 curveto
+8.7776695 10.76624 8.8333035 10.672874 8.8131751 10.643526 curveto
+8.7892214 10.608601 8.6784763 10.587136 8.4926034 10.581396 curveto
+8.0825187 10.56873 8.0518497 10.481827 8.4584945 10.484752 curveto
+8.6434386 10.48608 8.8333245 10.484472 8.8804666 10.481177 curveto
+9.0605745 10.468585 9.0265957 10.586852 8.7472328 10.944914 curveto
+8.5882309 11.148709 8.4545132 11.305087 8.4500795 11.292421 curveto
+closepath
+4.8462007 10.582195 moveto
+4.7910763 10.523791 4.6910465 10.418297 4.6239104 10.347774 curveto
+4.4914699 10.208648 4.3507069 9.8762034 4.446584 9.9289847 curveto
+4.4781922 9.9463813 4.517162 9.9980848 4.5331841 10.043877 curveto
+4.5492058 10.089672 4.6264362 10.168331 4.7048066 10.218678 curveto
+4.798373 10.278788 4.8805361 10.376478 4.9441024 10.503192 curveto
+5.0512579 10.716804 5.0069705 10.752541 4.8462007 10.582195 curveto
+closepath
+2.7215271 10.222276 moveto
+2.7135322 10.14979 2.7301776 10.033627 2.758516 9.9641328 curveto
+2.8241864 9.8030947 3.2144951 9.179287 3.2592974 9.1637649 curveto
+3.3361408 9.13714 3.3015674 9.225 3.0998452 9.5689787 curveto
+2.9830079 9.7682076 2.8533606 10.026355 2.8117385 10.14264 curveto
+2.7473864 10.322424 2.7338871 10.334342 2.7215271 10.222276 curveto
+closepath
+7.9207754 10.409531 moveto
+7.8538499 10.382366 7.7923151 10.340773 7.7840333 10.317096 curveto
+7.7658683 10.265178 8.1916774 10.128472 8.3348473 10.140259 curveto
+8.4860078 10.152703 8.4244579 10.193222 8.2089962 10.223105 curveto
+7.9656997 10.256845 7.9018034 10.312642 8.0043731 10.401778 curveto
+8.0905738 10.476687 8.0870511 10.477015 7.9207754 10.409531 curveto
+closepath
+4.6010608 9.8111077 moveto
+4.5843006 9.7618434 4.5658292 9.6623778 4.5600133 9.5900724 curveto
+4.5505145 9.471988 4.553519 9.4700196 4.5895343 9.5707379 curveto
+4.6115859 9.6324109 4.630058 9.7318729 4.6305826 9.7917704 curveto
+4.6313289 9.8771107 4.6249405 9.8812958 4.6010608 9.8111077 curveto
+closepath
+8.7340855 10.125508 moveto
+8.8005875 10.103108 8.8566088 10.10865 8.8999106 10.14192 curveto
+8.9447955 10.176405 8.9132994 10.187017 8.7994788 10.175749 curveto
+8.6436661 10.160331 8.6397159 10.157297 8.7340855 10.125508 curveto
+closepath
+9.0975472 10.012946 moveto
+9.1423817 9.9296576 9.1979448 9.8630694 9.2210207 9.8649663 curveto
+9.2785964 9.869706 9.1413388 10.131957 9.0718799 10.149927 curveto
+9.0411611 10.157874 9.0527103 10.096232 9.0975472 10.012946 curveto
+closepath
+4.469582 9.2805565 moveto
+4.4426553 9.2438799 4.4304908 9.1792156 4.4425506 9.136855 curveto
+4.4611822 9.0714095 4.4723524 9.081742 4.5168963 9.2056285 curveto
+4.5721919 9.3594187 4.5515179 9.3921583 4.469582 9.2805565 curveto
+closepath
+9.3554717 9.6367875 moveto
+9.3955598 9.5803269 9.4423517 9.5448812 9.4594505 9.5580181 curveto
+9.5015799 9.590385 9.3923067 9.7484758 9.3312809 9.743451 curveto
+9.3044942 9.7412454 9.3153827 9.6932463 9.3554717 9.6367875 curveto
+closepath
+3.9332643 9.1249318 moveto
+3.9039909 9.0412648 3.9125494 9.0303618 3.9717778 9.0758655 curveto
+4.0310062 9.1213702 4.03937 9.1452754 4.009414 9.1834395 curveto
+3.9794595 9.2216008 3.9625369 9.2086006 3.9332643 9.1249318 curveto
+closepath
+3.2986266 9.0351121 moveto
+3.2722172 8.9596297 3.6194543 8.6145906 3.7013485 8.6349389 curveto
+3.8528741 8.6725868 3.8699061 8.7710051 3.7276704 8.7870373 curveto
+3.6526676 8.7954893 3.5403108 8.8644414 3.4779891 8.940264 curveto
+3.3616541 9.0818006 3.3222517 9.1026361 3.2986266 9.0351121 curveto
+closepath
+4.1470929 8.9383335 moveto
+4.110543 8.8349843 4.0977764 8.7397301 4.1187236 8.7266571 curveto
+4.1680612 8.6958665 4.2667961 8.9780669 4.2363384 9.0628223 curveto
+4.2196201 9.1093448 4.1958412 9.0761755 4.1470929 8.9383335 curveto
+closepath
+9.4637278 9.4152269 moveto
+9.4450252 9.3617702 9.5918569 9.1990011 9.6541591 9.204131 curveto
+9.6821927 9.2064385 9.7358659 9.1471926 9.7734346 9.0724742 curveto
+9.8735003 8.8734537 10.433841 8.2337627 11.07089 7.591285 curveto
+11.166698 7.4946612 11.184199 7.4380179 11.139077 7.3706244 curveto
+11.09286 7.3015966 11.106718 7.2662013 11.197138 7.222333 curveto
+11.268243 7.1878365 11.333312 7.1828999 11.359271 7.2100324 curveto
+11.423378 7.2770362 11.302537 7.5848371 11.181982 7.6616125 curveto
+11.015923 7.767369 10.267758 8.520319 10.097589 8.7529385 curveto
+9.6999925 9.2964628 9.496545 9.5090293 9.4637278 9.4152269 curveto
+closepath
+4.3107565 8.7450365 moveto
+4.2973102 8.7066015 4.3078082 8.6769266 4.3340847 8.6790911 curveto
+4.3603625 8.6812537 4.3885021 8.7020037 4.3966186 8.7252003 curveto
+4.4047345 8.7483978 4.3942367 8.7780728 4.37329 8.7911449 curveto
+4.3523429 8.8042187 4.3242036 8.7834687 4.3107565 8.7450365 curveto
+closepath
+4.1968676 8.417492 moveto
+4.1821758 8.3743842 4.1804118 8.3105737 4.1929466 8.2756941 curveto
+4.2102403 8.2275695 4.2282052 8.2474191 4.267436 8.3580048 curveto
+4.29587 8.4381567 4.2976333 8.5019672 4.2713566 8.4998036 curveto
+4.2450795 8.4976391 4.2115595 8.4605989 4.1968676 8.417492 curveto
+closepath
+4.3462466 8.0463317 moveto
+4.3196064 7.9766483 4.396174 7.8309851 4.4412417 7.8656115 curveto
+4.4624198 7.8818809 4.4538035 7.9399076 4.4220942 7.9945583 curveto
+4.3903847 8.0492097 4.3562539 8.072507 4.3462466 8.0463317 curveto
+closepath
+4.5773572 7.660802 moveto
+4.5891953 7.6096594 4.662315 7.5270179 4.7398475 7.4771516 curveto
+4.817379 7.4272853 4.8984612 7.3558892 4.9200288 7.3184969 curveto
+4.9415966 7.281103 4.9807426 7.2522771 5.0070197 7.2544416 curveto
+5.0811165 7.2605406 5.0121796 7.3511848 4.7728962 7.5622891 curveto
+4.6256938 7.6921553 4.5627615 7.7238607 4.5773572 7.660802 curveto
+closepath
+5.2092993 7.113034 moveto
+5.3667147 6.9413697 5.6512836 6.7305486 5.6877559 6.7585704 curveto
+5.7205964 6.7837999 5.4211573 7.0402008 5.2180784 7.1607408 curveto
+5.1028134 7.2291578 lineto
+5.2092993 7.113034 lineto
+closepath
+7.1082387 6.9924366 moveto
+7.0487911 6.930306 7.0459468 6.7693337 7.10438 6.7741444 curveto
+7.1623644 6.778917 7.2362561 6.9899172 7.1900443 7.0187576 curveto
+7.1705458 7.0309258 7.1337329 7.0190825 7.1082387 6.9924366 curveto
+closepath
+8.9959482 7.0835756 moveto
+9.0535694 7.0294453 9.1222162 6.9869265 9.1484934 6.9890893 curveto
+9.1747713 6.9912519 9.1491244 7.0373116 9.0915016 7.0914428 curveto
+9.0338787 7.1455739 8.9652344 7.1880918 8.9389564 7.18593 curveto
+8.9126801 7.1837665 8.9383253 7.1377076 8.9959482 7.0835756 curveto
+closepath
+6.119822 6.5188042 moveto
+6.1886408 6.4766743 6.260708 6.4439404 6.2799732 6.446057 curveto
+6.3473625 6.4534675 6.1367696 6.6054946 6.0660734 6.6004729 curveto
+6.0268162 6.5976847 6.0510041 6.5609325 6.119822 6.5188042 curveto
+closepath
+11.281454 6.9865421 moveto
+11.262752 6.9669942 11.291346 6.9428593 11.344998 6.932909 curveto
+11.485314 6.9068905 11.569068 6.9181824 11.555009 6.9612228 curveto
+11.538627 7.011384 11.32421 7.0312303 11.281454 6.9865421 curveto
+closepath
+6.5651802 6.236616 moveto
+6.6937924 6.098214 6.8488909 6.0528488 6.8808792 6.1442751 curveto
+6.8930421 6.1790425 6.7186876 6.2735848 6.471363 6.3663342 curveto
+6.4488024 6.3747938 6.4910205 6.3164211 6.5651802 6.236616 curveto
+closepath
+11.868814 6.4753949 moveto
+11.862106 6.4562172 11.893791 6.3975797 11.939226 6.3450889 curveto
+11.984664 6.2925991 12.027553 6.2659827 12.034535 6.2859425 curveto
+12.04152 6.3059021 12.009834 6.3645384 11.964122 6.4162467 curveto
+11.918416 6.4679564 11.875525 6.4945726 11.868814 6.4753949 curveto
+closepath
+12.228379 6.0371172 moveto
+12.376212 5.8331946 12.74822 5.5863425 13.638527 5.101387 curveto
+14.118945 4.8397 15.117322 4.5023436 15.671785 4.4143386 curveto
+16.155645 4.3375407 16.259727 4.3043888 16.23539 4.2348255 curveto
+16.189466 4.1035705 16.651085 4.0618324 16.744308 4.1888094 curveto
+16.802317 4.2678213 16.746378 4.3466431 16.638591 4.3377694 curveto
+16.594269 4.3341208 16.396065 4.3674036 16.19814 4.4117326 curveto
+16.000214 4.4560614 15.682736 4.5252151 15.492637 4.5654102 curveto
+14.940375 4.6821768 14.489503 4.8154997 14.210098 4.9446534 curveto
+14.067312 5.0106597 13.903153 5.0752184 13.84531 5.0881205 curveto
+13.787462 5.101021 13.660806 5.1710833 13.563852 5.2438142 curveto
+13.466898 5.3165457 13.369534 5.3745675 13.347494 5.372754 curveto
+13.325452 5.3709393 13.232253 5.4184865 13.140381 5.4784132 curveto
+12.490824 5.9021219 12.351415 6.0070267 12.318072 6.0971905 curveto
+12.297352 6.1532151 12.24443 6.1960921 12.200464 6.1924727 curveto
+12.141328 6.1876035 12.148591 6.1471799 12.228379 6.0371172 curveto
+closepath
+7.4974297 5.7182304 moveto
+7.5050462 5.6949158 7.5327753 5.6776095 7.5590516 5.679773 curveto
+7.5853295 5.6819366 7.6005995 5.7027819 7.5929831 5.7260972 curveto
+7.5853693 5.7494119 7.5576384 5.7667177 7.5313622 5.764555 curveto
+7.5050842 5.7623915 7.4898142 5.7415452 7.4974297 5.7182304 curveto
+closepath
+12.549551 4.5750286 moveto
+12.54211 4.5537654 12.581734 4.5178179 12.637602 4.4951454 curveto
+12.693472 4.4724732 12.741749 4.4612561 12.744884 4.4702185 curveto
+12.748019 4.4791798 12.708394 4.5151278 12.656831 4.5501012 curveto
+12.605264 4.5850743 12.556989 4.5962917 12.549551 4.5750286 curveto
+closepath
+12.953552 4.2782901 moveto
+13.061884 4.1880158 13.235805 4.1492776 13.257275 4.2106406 curveto
+13.26735 4.239435 13.070964 4.3303558 12.937816 4.3585412 curveto
+12.844599 4.3782737 12.846754 4.3672865 12.953552 4.2782901 curveto
+closepath
+13.847781 4.1080141 moveto
+13.892922 4.0911538 13.962104 4.0800141 14.001522 4.0832592 curveto
+14.046693 4.0869776 14.042843 4.1004909 13.99111 4.1198133 curveto
+13.945969 4.1366741 13.876784 4.1478133 13.837369 4.1445683 curveto
+13.792195 4.1408493 13.796046 4.1273366 13.847781 4.1080141 curveto
+closepath
+14.166536 4.0907248 moveto
+14.174195 4.0672776 14.383211 4.0650316 14.634263 4.0857002 curveto
+14.924684 4.1096091 15.083158 4.1383331 15.0743 4.1654567 curveto
+15.066639 4.188904 14.857623 4.1911498 14.606573 4.1704816 curveto
+14.316148 4.1465726 14.157676 4.1178494 14.166536 4.0907248 curveto
+closepath
+15.1484 4.1466535 moveto
+15.158499 4.1337879 15.354376 4.1316514 15.583678 4.1419047 curveto
+15.85346 4.1539692 15.95452 4.1692601 15.870032 4.1852328 curveto
+15.719586 4.2136749 15.120915 4.1816692 15.1484 4.1466535 curveto
+closepath
+fill
+grestore
+gsave
+0.13333334 0.16078432 0.14117648 setrgbcolor
+newpath
+1.3514047 19.251557 moveto
+1.3472092 19.239568 1.3831156 19.073636 1.4311953 18.882816 curveto
+1.4792738 18.691997 1.5149507 18.525409 1.510476 18.512621 curveto
+1.4948331 18.467908 1.5690975 18.092926 1.6068068 18.02622 curveto
+1.6412258 17.965336 1.6628026 17.972088 1.8330924 18.097032 curveto
+2.2534153 18.40543 2.3914046 18.339647 2.4211718 17.816669 curveto
+2.4505167 17.301112 2.5648018 17.256632 2.5536021 17.765124 curveto
+2.5453122 18.14146 2.5219097 18.218082 2.3924337 18.292811 curveto
+2.0436174 18.494129 1.4464456 19.125337 1.4891965 19.247527 curveto
+1.4964371 19.268222 1.4701114 19.2825 1.4306961 19.279253 curveto
+1.3912802 19.276011 1.3555984 19.263546 1.3514047 19.251557 curveto
+closepath
+2.4924922 17.340749 moveto
+2.474666 17.289796 2.5535487 16.98209 2.5903193 16.959141 curveto
+2.6517048 16.920833 2.6527071 16.977893 2.5941962 17.179863 curveto
+2.5437782 17.353896 2.5137268 17.401437 2.4924922 17.340749 curveto
+closepath
+2.6029915 16.728223 moveto
+2.5949026 16.705104 2.6187914 16.579419 2.6560769 16.448932 curveto
+2.6933634 16.318439 2.7590483 16.073501 2.8020438 15.904626 curveto
+2.9250976 15.421293 3.3558728 14.344634 3.4239599 14.35024 curveto
+3.4386879 14.35145 3.4295771 14.414366 3.4037105 14.490048 curveto
+3.3778461 14.565729 3.3420461 14.685213 3.3241567 14.755565 curveto
+3.3062677 14.825919 3.2470222 14.964156 3.192501 15.062755 curveto
+3.0281563 15.359971 2.8670824 16.055375 2.9396798 16.154257 curveto
+2.969539 16.194926 2.9575782 16.229603 2.9097198 16.241113 curveto
+2.8659064 16.251649 2.7970515 16.365799 2.7567091 16.494776 curveto
+2.6836835 16.728247 2.6309963 16.808263 2.6029915 16.728223 curveto
+closepath
+2.0936827 16.466126 moveto
+2.0861146 16.444496 2.1023806 16.405302 2.12983 16.379033 curveto
+2.1572795 16.352767 2.1730671 16.274751 2.1649139 16.205667 curveto
+2.1514967 16.092 2.3141912 15.902783 2.346339 15.994669 curveto
+2.3616318 16.038378 2.161414 16.509906 2.1287038 16.507213 curveto
+2.1170123 16.506249 2.1012526 16.487761 2.0936827 16.466126 curveto
+closepath
+2.0164716 15.847579 moveto
+1.9997294 15.799727 2.0031707 15.749885 2.0241167 15.736811 curveto
+2.0457177 15.723333 2.0795721 15.76269 2.1023333 15.827741 curveto
+2.1244045 15.890827 2.1209641 15.940673 2.0946869 15.93851 curveto
+2.0684086 15.936348 2.0332119 15.895427 2.0164716 15.847579 curveto
+closepath
+2.3354334 15.830875 moveto
+2.3272479 15.807483 2.3975351 15.635373 2.4916268 15.44842 curveto
+2.5857185 15.261466 2.7252404 14.956482 2.8016734 14.770681 curveto
+2.8781075 14.584878 2.9742383 14.414639 3.0152999 14.392373 curveto
+3.0678584 14.363872 3.0638914 14.413069 3.0018972 14.558601 curveto
+2.9534648 14.672295 2.9037839 14.79626 2.8914955 14.83408 curveto
+2.7669315 15.217458 2.369854 15.929258 2.3354334 15.830875 curveto
+closepath
+3.6151339 15.851281 moveto
+3.6218302 15.83078 3.6680461 15.806743 3.717838 15.797866 curveto
+3.7921673 15.784612 3.8022694 15.792293 3.7742976 15.840789 curveto
+3.7377798 15.904104 3.5948032 15.91353 3.6151339 15.851281 curveto
+closepath
+1.9526228 15.532467 moveto
+1.9348636 15.481707 1.9450642 15.453792 1.9752923 15.470434 curveto
+2.0055199 15.487069 2.0284991 15.529299 2.0263587 15.564266 curveto
+2.020877 15.653799 1.9904877 15.640693 1.9526228 15.532467 curveto
+closepath
+3.9169355 15.664771 moveto
+3.9251198 15.639718 4.0326379 15.564235 4.1558662 15.497033 curveto
+4.2790939 15.429827 4.4303242 15.322875 4.4919311 15.25936 curveto
+4.6010435 15.146866 4.7158576 15.108927 4.6878702 15.194615 curveto
+4.6721488 15.242747 4.068642 15.657399 3.9675778 15.689506 curveto
+3.9269996 15.702396 3.9077232 15.692982 3.9169355 15.664771 curveto
+closepath
+1.8825839 15.181023 moveto
+1.8610222 15.119395 1.8477425 15.030148 1.8530764 14.982705 curveto
+1.8619151 14.904075 1.8662421 14.906355 1.9019784 15.008498 curveto
+1.9235415 15.070128 1.9368197 15.159368 1.9314864 15.206816 curveto
+1.922648 15.285446 1.9183212 15.283164 1.8825839 15.181023 curveto
+closepath
+4.9358389 14.908127 moveto
+5.084247 14.751611 5.5420214 14.354476 5.6388669 14.298224 curveto
+5.6653801 14.282827 5.6940866 14.29028 5.7026628 14.314788 curveto
+5.7112365 14.339296 5.6505414 14.408913 5.5677844 14.469495 curveto
+5.4850258 14.530074 5.3005581 14.69246 5.1578528 14.830346 curveto
+4.874994 15.103663 4.6884702 15.16901 4.9358389 14.908127 curveto
+closepath
+1.7801715 14.111225 moveto
+1.7672331 14.074246 1.7737864 14.033295 1.7947329 14.020222 curveto
+1.8156795 14.00715 1.843404 14.026709 1.8563418 14.063688 curveto
+1.869279 14.100666 1.8627257 14.141616 1.8417796 14.154688 curveto
+1.8208321 14.167761 1.7931087 14.148203 1.7801715 14.111225 curveto
+closepath
+3.4400414 14.25676 moveto
+3.4829552 14.021074 4.5806256 12.38578 5.3583392 11.398909 curveto
+5.5185678 11.195589 5.6756442 10.958223 5.7073972 10.871429 curveto
+5.7659002 10.711518 5.855377 10.64001 5.8863173 10.728444 curveto
+5.9154963 10.811844 5.6990559 11.133667 5.0164427 12.021845 curveto
+4.6530228 12.494711 4.2749047 13.012071 4.1761819 13.171536 curveto
+4.0042899 13.449192 3.7285278 13.876997 3.52336 14.184298 curveto
+3.4703288 14.26373 3.4328359 14.296339 3.4400414 14.25676 curveto
+closepath
+3.1976042 14.051221 moveto
+3.1938 14.040351 3.2078269 14.020761 3.2287733 14.007689 curveto
+3.2497197 13.994615 3.2743318 14.00528 3.2834663 14.031386 curveto
+3.2925998 14.057494 3.2785741 14.077085 3.252297 14.07492 curveto
+3.2260192 14.072757 3.2014073 14.062092 3.1976042 14.051221 curveto
+closepath
+5.7545709 14.204745 moveto
+5.7920952 14.073212 6.1566944 13.640775 6.2012249 13.674987 curveto
+6.2361113 13.701789 5.8001787 14.284676 5.7484319 14.280418 curveto
+5.7401296 14.279734 5.742894 14.245681 5.7545709 14.204745 curveto
+closepath
+1.8048051 13.77907 moveto
+1.7904288 13.740565 1.7965343 13.672504 1.8183717 13.627829 curveto
+1.8692192 13.523801 1.8980728 13.603345 1.8600191 13.742647 curveto
+1.8413831 13.810869 1.8215607 13.823945 1.8048051 13.77907 curveto
+closepath
+3.2888373 13.781498 moveto
+3.2804161 13.757429 3.3032853 13.728283 3.3396537 13.716729 curveto
+3.3803243 13.703806 3.4056717 13.715624 3.405494 13.747418 curveto
+3.4051292 13.812461 3.3094505 13.84041 3.2888373 13.781498 curveto
+closepath
+1.8491762 13.437038 moveto
+1.8448011 13.376821 1.8536004 13.309965 1.8687311 13.288467 curveto
+1.9129617 13.225616 1.9264002 13.322109 1.8898903 13.440391 curveto
+1.8571287 13.546521 lineto
+1.8491762 13.437038 lineto
+closepath
+3.4572339 13.599695 moveto
+3.4435849 13.560685 3.673097 13.272996 3.7008526 13.294322 curveto
+3.7187831 13.308097 3.6809799 13.386223 3.616843 13.467932 curveto
+3.5102223 13.603765 3.4702132 13.636794 3.4572339 13.599695 curveto
+closepath
+6.2506385 13.559971 moveto
+6.2549708 13.512444 6.2414463 13.428078 6.2205818 13.372491 curveto
+6.1918051 13.295822 6.2095823 13.273639 6.294217 13.280608 curveto
+6.5012989 13.297656 6.5145996 13.371194 6.3421761 13.545741 curveto
+6.255227 13.633761 6.2437476 13.635548 6.2506385 13.559971 curveto
+closepath
+3.7233669 13.199553 moveto
+3.740345 13.165038 3.9079832 12.93398 4.0958951 12.686085 curveto
+4.2838072 12.438196 4.3695854 12.347313 4.2865138 12.484126 curveto
+4.1465039 12.714712 3.6542244 13.340109 3.7233669 13.199553 curveto
+closepath
+1.9021675 12.853295 moveto
+1.9093665 12.731552 1.9908348 12.40658 2.0103899 12.421607 curveto
+2.0512709 12.453014 2.0201936 12.675872 1.9593822 12.787388 curveto
+1.9264914 12.847704 1.9007448 12.877362 1.9021675 12.853295 curveto
+closepath
+6.7000687 13.186902 moveto
+6.5761873 13.161068 6.4228391 13.110693 6.3592948 13.074954 curveto
+6.2546401 13.016095 6.2581849 13.013732 6.3969237 13.04988 curveto
+6.4811645 13.07183 6.6863365 13.111672 6.8528611 13.138412 curveto
+7.1231512 13.181822 7.1828364 13.174563 7.4091985 13.070753 curveto
+7.5486613 13.006796 7.7070483 12.887078 7.7611704 12.804708 curveto
+7.893905 12.602702 7.9086158 12.676703 7.7807728 12.903317 curveto
+7.7028451 13.041453 7.6118593 13.10565 7.3985377 13.17301 curveto
+7.1086303 13.264552 7.0756047 13.265208 6.7000687 13.186902 curveto
+closepath
+5.9152074 12.899802 moveto
+5.7538159 12.8343 5.7502622 12.807522 5.9081206 12.846391 curveto
+5.9779352 12.863579 6.0412915 12.895461 6.0489105 12.91724 curveto
+6.0565303 12.939019 6.056943 12.955115 6.0498259 12.953013 curveto
+6.0427104 12.950912 5.9821311 12.926967 5.9152074 12.899802 curveto
+closepath
+3.209664 12.527394 moveto
+3.079499 12.404301 2.9776608 12.180484 3.0547046 12.186829 curveto
+3.0804134 12.188944 3.0694124 12.104786 3.0302559 11.99981 curveto
+2.9123556 11.683715 2.7070243 10.812118 2.731973 10.733645 curveto
+2.7487441 10.680895 2.7779524 10.753708 2.8362148 10.993504 curveto
+2.8807328 11.176738 3.025062 11.62447 3.1569457 11.988472 curveto
+3.2888291 12.352474 3.3819464 12.648459 3.3638747 12.64622 curveto
+3.3458021 12.643981 3.2764072 12.590507 3.209664 12.527394 curveto
+closepath
+2.0440622 12.210094 moveto
+2.020287 12.146126 2.1483504 11.782772 2.2077323 11.745714 curveto
+2.2338446 11.729417 2.2354684 11.790873 2.2113411 11.882286 curveto
+2.1544134 12.097964 2.0664519 12.270337 2.0440622 12.210094 curveto
+closepath
+7.925841 12.475438 moveto
+7.9370262 12.426505 7.9731171 12.360915 8.0060408 12.329684 curveto
+8.0605116 12.278009 8.0640725 12.28091 8.0455662 12.361862 curveto
+8.0343818 12.410794 7.9982909 12.476386 7.9653672 12.507619 curveto
+7.9108965 12.559293 7.9073356 12.556395 7.925841 12.475438 curveto
+closepath
+2.8572228 11.996446 moveto
+2.8356605 11.934815 2.8376833 11.910495 2.8617179 11.942401 curveto
+2.8857536 11.97431 2.903396 12.024733 2.9009228 12.054457 curveto
+2.8984506 12.084183 2.8787853 12.058075 2.8572228 11.996446 curveto
+closepath
+4.4810162 12.092691 moveto
+4.5310285 12.022129 4.585239 11.974605 4.6014832 11.987089 curveto
+4.6445247 12.020158 4.5685075 12.13462 4.4727078 12.180993 curveto
+4.4100704 12.211311 4.4120804 12.18995 4.4810162 12.092691 curveto
+closepath
+4.7956219 11.658045 moveto
+4.8886454 11.511523 4.9772022 11.386589 4.9924154 11.38041 curveto
+5.0076284 11.374234 5.1611175 11.175507 5.3335016 10.938795 curveto
+5.5058859 10.702082 5.7319451 10.423162 5.8358557 10.318975 curveto
+5.9397656 10.214787 6.1502354 9.9808298 6.3035654 9.79907 curveto
+6.5856806 9.4646461 6.7072952 9.3615404 6.7329954 9.4349944 curveto
+6.7477086 9.4770485 6.6159518 9.6266576 6.1191802 10.131975 curveto
+5.9558696 10.298096 5.7563216 10.524258 5.67574 10.634559 curveto
+5.5951582 10.74486 5.4150683 10.986255 5.2755397 11.170994 curveto
+5.1360116 11.355734 4.9571413 11.602829 4.8780504 11.720101 curveto
+4.6694126 12.029453 4.5952653 11.973632 4.7956219 11.658045 curveto
+closepath
+2.268977 11.657525 moveto
+2.2579126 11.628522 2.2782069 11.551839 2.3140774 11.487113 curveto
+2.3499467 11.422388 2.3978373 11.314996 2.4205021 11.248462 curveto
+2.4778149 11.080211 2.5877859 11.168435 2.6034416 11.395226 curveto
+2.6098103 11.48748 2.6004503 11.527482 2.5826402 11.484118 curveto
+2.5521814 11.409957 2.393692 11.354889 2.4184514 11.427071 curveto
+2.4382701 11.484847 2.2901962 11.713144 2.268977 11.657525 curveto
+closepath
+8.101814 12.153717 moveto
+8.0991766 12.146179 8.1289172 12.075169 8.1678996 11.995917 curveto
+8.2413331 11.846636 8.2480926 11.856416 8.2095576 12.056184 curveto
+8.1911601 12.151552 8.1227294 12.213497 8.101814 12.153717 curveto
+closepath
+8.2996265 11.538024 moveto
+8.3108564 11.489508 8.3388012 11.438109 8.3617245 11.423802 curveto
+8.391587 11.405164 8.3976159 11.422798 8.382987 11.486002 curveto
+8.3717579 11.534516 8.3438122 11.585915 8.3208873 11.600221 curveto
+8.291024 11.618858 8.2849984 11.601225 8.2996265 11.538024 curveto
+closepath
+8.4500795 11.292421 moveto
+8.4242213 11.218511 8.5516261 10.983656 8.6895407 10.851005 curveto
+8.7776695 10.76624 8.8333035 10.672874 8.8131751 10.643526 curveto
+8.7892214 10.608601 8.6784763 10.587136 8.4926034 10.581396 curveto
+8.0825187 10.56873 8.0518497 10.481827 8.4584945 10.484752 curveto
+8.6434386 10.48608 8.8333245 10.484472 8.8804666 10.481177 curveto
+9.0605745 10.468585 9.0265957 10.586852 8.7472328 10.944914 curveto
+8.5882309 11.148709 8.4545132 11.305087 8.4500795 11.292421 curveto
+closepath
+4.8462007 10.582195 moveto
+4.7910763 10.523791 4.6910465 10.418297 4.6239104 10.347774 curveto
+4.4914699 10.208648 4.3507069 9.8762034 4.446584 9.9289847 curveto
+4.4781922 9.9463813 4.517162 9.9980848 4.5331841 10.043877 curveto
+4.5492058 10.089672 4.6264362 10.168331 4.7048066 10.218678 curveto
+4.798373 10.278788 4.8805361 10.376478 4.9441024 10.503192 curveto
+5.0512579 10.716804 5.0069705 10.752541 4.8462007 10.582195 curveto
+closepath
+2.7215271 10.222276 moveto
+2.7135322 10.14979 2.7301776 10.033627 2.758516 9.9641328 curveto
+2.8241864 9.8030947 3.2144951 9.179287 3.2592974 9.1637649 curveto
+3.3361408 9.13714 3.3015674 9.225 3.0998452 9.5689787 curveto
+2.9830079 9.7682076 2.8533606 10.026355 2.8117385 10.14264 curveto
+2.7473864 10.322424 2.7338871 10.334342 2.7215271 10.222276 curveto
+closepath
+7.9207754 10.409531 moveto
+7.8538499 10.382366 7.7923151 10.340773 7.7840333 10.317096 curveto
+7.7658683 10.265178 8.1916774 10.128472 8.3348473 10.140259 curveto
+8.4860078 10.152703 8.4244579 10.193222 8.2089962 10.223105 curveto
+7.9656997 10.256845 7.9018034 10.312642 8.0043731 10.401778 curveto
+8.0905738 10.476687 8.0870511 10.477015 7.9207754 10.409531 curveto
+closepath
+4.6010608 9.8111077 moveto
+4.5843006 9.7618434 4.5658292 9.6623778 4.5600133 9.5900724 curveto
+4.5505145 9.471988 4.553519 9.4700196 4.5895343 9.5707379 curveto
+4.6115859 9.6324109 4.630058 9.7318729 4.6305826 9.7917704 curveto
+4.6313289 9.8771107 4.6249405 9.8812958 4.6010608 9.8111077 curveto
+closepath
+8.7340855 10.125508 moveto
+8.8005875 10.103108 8.8566088 10.10865 8.8999106 10.14192 curveto
+8.9447955 10.176405 8.9132994 10.187017 8.7994788 10.175749 curveto
+8.6436661 10.160331 8.6397159 10.157297 8.7340855 10.125508 curveto
+closepath
+9.0975472 10.012946 moveto
+9.1423817 9.9296576 9.1979448 9.8630694 9.2210207 9.8649663 curveto
+9.2785964 9.869706 9.1413388 10.131957 9.0718799 10.149927 curveto
+9.0411611 10.157874 9.0527103 10.096232 9.0975472 10.012946 curveto
+closepath
+4.469582 9.2805565 moveto
+4.4426553 9.2438799 4.4304908 9.1792156 4.4425506 9.136855 curveto
+4.4611822 9.0714095 4.4723524 9.081742 4.5168963 9.2056285 curveto
+4.5721919 9.3594187 4.5515179 9.3921583 4.469582 9.2805565 curveto
+closepath
+9.3554717 9.6367875 moveto
+9.3955598 9.5803269 9.4423517 9.5448812 9.4594505 9.5580181 curveto
+9.5015799 9.590385 9.3923067 9.7484758 9.3312809 9.743451 curveto
+9.3044942 9.7412454 9.3153827 9.6932463 9.3554717 9.6367875 curveto
+closepath
+3.9332643 9.1249318 moveto
+3.9039909 9.0412648 3.9125494 9.0303618 3.9717778 9.0758655 curveto
+4.0310062 9.1213702 4.03937 9.1452754 4.009414 9.1834395 curveto
+3.9794595 9.2216008 3.9625369 9.2086006 3.9332643 9.1249318 curveto
+closepath
+3.2986266 9.0351121 moveto
+3.2722172 8.9596297 3.6194543 8.6145906 3.7013485 8.6349389 curveto
+3.8528741 8.6725868 3.8699061 8.7710051 3.7276704 8.7870373 curveto
+3.6526676 8.7954893 3.5403108 8.8644414 3.4779891 8.940264 curveto
+3.3616541 9.0818006 3.3222517 9.1026361 3.2986266 9.0351121 curveto
+closepath
+4.1470929 8.9383335 moveto
+4.110543 8.8349843 4.0977764 8.7397301 4.1187236 8.7266571 curveto
+4.1680612 8.6958665 4.2667961 8.9780669 4.2363384 9.0628223 curveto
+4.2196201 9.1093448 4.1958412 9.0761755 4.1470929 8.9383335 curveto
+closepath
+6.8965475 9.1424835 moveto
+6.9707042 9.0480078 7.0538916 8.9882515 7.081409 9.0096921 curveto
+7.1353467 9.0517167 6.8972267 9.325411 6.8127763 9.3184578 curveto
+6.7846932 9.3161473 6.8223909 9.2369583 6.8965475 9.1424835 curveto
+closepath
+9.4637278 9.4152269 moveto
+9.4450252 9.3617702 9.5918569 9.1990011 9.6541591 9.204131 curveto
+9.6821927 9.2064385 9.7358659 9.1471926 9.7734346 9.0724742 curveto
+9.8735003 8.8734537 10.433841 8.2337627 11.07089 7.591285 curveto
+11.166698 7.4946612 11.184199 7.4380179 11.139077 7.3706244 curveto
+11.09286 7.3015966 11.106718 7.2662013 11.197138 7.222333 curveto
+11.268243 7.1878365 11.333312 7.1828999 11.359271 7.2100324 curveto
+11.423378 7.2770362 11.302537 7.5848371 11.181982 7.6616125 curveto
+11.015923 7.767369 10.267758 8.520319 10.097589 8.7529385 curveto
+9.6999925 9.2964628 9.496545 9.5090293 9.4637278 9.4152269 curveto
+closepath
+4.3107565 8.7450365 moveto
+4.2973102 8.7066015 4.3078082 8.6769266 4.3340847 8.6790911 curveto
+4.3603625 8.6812537 4.3885021 8.7020037 4.3966186 8.7252003 curveto
+4.4047345 8.7483978 4.3942367 8.7780728 4.37329 8.7911449 curveto
+4.3523429 8.8042187 4.3242036 8.7834687 4.3107565 8.7450365 curveto
+closepath
+7.1625859 8.9387603 moveto
+7.1500685 8.9029856 7.4891037 8.4865189 7.6812173 8.3016829 curveto
+7.7614493 8.2244904 7.8739043 8.1064208 7.9311176 8.0393044 curveto
+8.0922387 7.8502998 8.4450874 7.5660703 8.4827129 7.5949797 curveto
+8.5012875 7.6092476 8.4615081 7.6611917 8.3943181 7.7104079 curveto
+8.3271265 7.7596251 8.2489661 7.8287843 8.2206298 7.8640984 curveto
+8.192291 7.8994124 8.0471707 8.0455935 7.8981405 8.1889478 curveto
+7.7491095 8.3323014 7.5513729 8.5412953 7.4587254 8.6533775 curveto
+7.2551988 8.899597 7.175692 8.9762176 7.1625859 8.9387603 curveto
+closepath
+4.1968676 8.417492 moveto
+4.1821758 8.3743842 4.1804118 8.3105737 4.1929466 8.2756941 curveto
+4.2102403 8.2275695 4.2282052 8.2474191 4.267436 8.3580048 curveto
+4.29587 8.4381567 4.2976333 8.5019672 4.2713566 8.4998036 curveto
+4.2450795 8.4976391 4.2115595 8.4605989 4.1968676 8.417492 curveto
+closepath
+4.3462466 8.0463317 moveto
+4.3196064 7.9766483 4.396174 7.8309851 4.4412417 7.8656115 curveto
+4.4624198 7.8818809 4.4538035 7.9399076 4.4220942 7.9945583 curveto
+4.3903847 8.0492097 4.3562539 8.072507 4.3462466 8.0463317 curveto
+closepath
+4.5773572 7.660802 moveto
+4.5891953 7.6096594 4.662315 7.5270179 4.7398475 7.4771516 curveto
+4.817379 7.4272853 4.8984612 7.3558892 4.9200288 7.3184969 curveto
+4.9415966 7.281103 4.9807426 7.2522771 5.0070197 7.2544416 curveto
+5.0811165 7.2605406 5.0121796 7.3511848 4.7728962 7.5622891 curveto
+4.6256938 7.6921553 4.5627615 7.7238607 4.5773572 7.660802 curveto
+closepath
+5.2092993 7.113034 moveto
+5.3667147 6.9413697 5.6512836 6.7305486 5.6877559 6.7585704 curveto
+5.7205964 6.7837999 5.4211573 7.0402008 5.2180784 7.1607408 curveto
+5.1028134 7.2291578 lineto
+5.2092993 7.113034 lineto
+closepath
+8.7406884 7.3195274 moveto
+8.7877636 7.2556953 8.8410727 7.2148323 8.8591517 7.2287233 curveto
+8.8772316 7.2426141 8.8387155 7.2948407 8.7735631 7.3447819 curveto
+8.6550982 7.4355852 lineto
+8.7406884 7.3195274 lineto
+closepath
+7.1082387 6.9924366 moveto
+7.0487911 6.930306 7.0459468 6.7693337 7.10438 6.7741444 curveto
+7.1623644 6.778917 7.2362561 6.9899172 7.1900443 7.0187576 curveto
+7.1705458 7.0309258 7.1337329 7.0190825 7.1082387 6.9924366 curveto
+closepath
+6.119822 6.5188042 moveto
+6.1886408 6.4766743 6.260708 6.4439404 6.2799732 6.446057 curveto
+6.3473625 6.4534675 6.1367696 6.6054946 6.0660734 6.6004729 curveto
+6.0268162 6.5976847 6.0510041 6.5609325 6.119822 6.5188042 curveto
+closepath
+11.281454 6.9865421 moveto
+11.262752 6.9669942 11.291346 6.9428593 11.344998 6.932909 curveto
+11.485314 6.9068905 11.569068 6.9181824 11.555009 6.9612228 curveto
+11.538627 7.011384 11.32421 7.0312303 11.281454 6.9865421 curveto
+closepath
+6.5651802 6.236616 moveto
+6.6937924 6.098214 6.8488909 6.0528488 6.8808792 6.1442751 curveto
+6.8930421 6.1790425 6.7186876 6.2735848 6.471363 6.3663342 curveto
+6.4488024 6.3747938 6.4910205 6.3164211 6.5651802 6.236616 curveto
+closepath
+11.868814 6.4753949 moveto
+11.862106 6.4562172 11.893791 6.3975797 11.939226 6.3450889 curveto
+11.984664 6.2925991 12.027553 6.2659827 12.034535 6.2859425 curveto
+12.04152 6.3059021 12.009834 6.3645384 11.964122 6.4162467 curveto
+11.918416 6.4679564 11.875525 6.4945726 11.868814 6.4753949 curveto
+closepath
+12.228379 6.0371172 moveto
+12.376212 5.8331946 12.74822 5.5863425 13.638527 5.101387 curveto
+14.118945 4.8397 15.117322 4.5023436 15.671785 4.4143386 curveto
+16.155645 4.3375407 16.259727 4.3043888 16.23539 4.2348255 curveto
+16.189466 4.1035705 16.651085 4.0618324 16.744308 4.1888094 curveto
+16.802317 4.2678213 16.746378 4.3466431 16.638591 4.3377694 curveto
+16.594269 4.3341208 16.396065 4.3674036 16.19814 4.4117326 curveto
+16.000214 4.4560614 15.682736 4.5252151 15.492637 4.5654102 curveto
+14.940375 4.6821768 14.489503 4.8154997 14.210098 4.9446534 curveto
+14.067312 5.0106597 13.903153 5.0752184 13.84531 5.0881205 curveto
+13.787462 5.101021 13.660806 5.1710833 13.563852 5.2438142 curveto
+13.466898 5.3165457 13.369534 5.3745675 13.347494 5.372754 curveto
+13.325452 5.3709393 13.232253 5.4184865 13.140381 5.4784132 curveto
+12.490824 5.9021219 12.351415 6.0070267 12.318072 6.0971905 curveto
+12.297352 6.1532151 12.24443 6.1960921 12.200464 6.1924727 curveto
+12.141328 6.1876035 12.148591 6.1471799 12.228379 6.0371172 curveto
+closepath
+7.4974297 5.7182304 moveto
+7.5050462 5.6949158 7.5327753 5.6776095 7.5590516 5.679773 curveto
+7.5853295 5.6819366 7.6005995 5.7027819 7.5929831 5.7260972 curveto
+7.5853693 5.7494119 7.5576384 5.7667177 7.5313622 5.764555 curveto
+7.5050842 5.7623915 7.4898142 5.7415452 7.4974297 5.7182304 curveto
+closepath
+12.549551 4.5750286 moveto
+12.54211 4.5537654 12.581734 4.5178179 12.637602 4.4951454 curveto
+12.693472 4.4724732 12.741749 4.4612561 12.744884 4.4702185 curveto
+12.748019 4.4791798 12.708394 4.5151278 12.656831 4.5501012 curveto
+12.605264 4.5850743 12.556989 4.5962917 12.549551 4.5750286 curveto
+closepath
+12.953552 4.2782901 moveto
+13.061884 4.1880158 13.235805 4.1492776 13.257275 4.2106406 curveto
+13.26735 4.239435 13.070964 4.3303558 12.937816 4.3585412 curveto
+12.844599 4.3782737 12.846754 4.3672865 12.953552 4.2782901 curveto
+closepath
+13.847781 4.1080141 moveto
+13.892922 4.0911538 13.962104 4.0800141 14.001522 4.0832592 curveto
+14.046693 4.0869776 14.042843 4.1004909 13.99111 4.1198133 curveto
+13.945969 4.1366741 13.876784 4.1478133 13.837369 4.1445683 curveto
+13.792195 4.1408493 13.796046 4.1273366 13.847781 4.1080141 curveto
+closepath
+14.166536 4.0907248 moveto
+14.174195 4.0672776 14.383211 4.0650316 14.634263 4.0857002 curveto
+14.924684 4.1096091 15.083158 4.1383331 15.0743 4.1654567 curveto
+15.066639 4.188904 14.857623 4.1911498 14.606573 4.1704816 curveto
+14.316148 4.1465726 14.157676 4.1178494 14.166536 4.0907248 curveto
+closepath
+15.1484 4.1466535 moveto
+15.158499 4.1337879 15.354376 4.1316514 15.583678 4.1419047 curveto
+15.85346 4.1539692 15.95452 4.1692601 15.870032 4.1852328 curveto
+15.719586 4.2136749 15.120915 4.1816692 15.1484 4.1466535 curveto
+closepath
+fill
+grestore
+grestore
+grestore
+showpage
+%%EOF
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-plume.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-plume.pdf
new file mode 100644
index 00000000000..369840ee56d
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-plume.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.eps b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.eps
index 388ea4a96f9..112a66addf2 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.eps
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.eps
@@ -2,8 +2,8 @@
%%Creator: inkscape 0.46
%%Pages: 1
%%Orientation: Portrait
-%%BoundingBox: 2 2 36 37
-%%HiResBoundingBox: 2.1761258 2.8285057 35.91435 36.371492
+%%BoundingBox: 0 0 39 39
+%%HiResBoundingBox: 0 0 39 39
%%EndComments
%%Page: 1 1
0 39 translate
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.pdf
new file mode 100644
index 00000000000..997e9027df0
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-bonnehumeur.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.eps b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.eps
index 19d55a488ad..026a2477deb 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.eps
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.eps
@@ -3,7 +3,7 @@
%%Pages: 1
%%Orientation: Portrait
%%BoundingBox: 0 0 14 14
-%%HiResBoundingBox: 0.69985355 0.7713639 13.057207 13.057206
+%%HiResBoundingBox: 0 0 14 14
%%EndComments
%%Page: 1 1
0 14 translate
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.pdf
new file mode 100644
index 00000000000..a57444adbd8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-smiley-mauvaisehumeur.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.tex b/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.tex
deleted file mode 100644
index 386ac982da1..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_bonnehumeur.tex
+++ /dev/null
@@ -1,91 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,17)
-{
-\newrgbcolor{curcolor}{1 1 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(16.15142524,8.64285628)
-\curveto(16.15142524,4.49812709)(12.76756381,1.13428891)(8.59816311,1.13428891)
-\curveto(4.42876241,1.13428891)(1.04490097,4.49812709)(1.04490097,8.64285628)
-\curveto(1.04490097,12.78758547)(4.42876241,16.15142366)(8.59816311,16.15142366)
-\curveto(12.76756381,16.15142366)(16.15142524,12.78758547)(16.15142524,8.64285628)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.34016806,linecolor=curcolor]
-{
-\newpath
-\moveto(16.15142524,8.64285628)
-\curveto(16.15142524,4.49812709)(12.76756381,1.13428891)(8.59816311,1.13428891)
-\curveto(4.42876241,1.13428891)(1.04490097,4.49812709)(1.04490097,8.64285628)
-\curveto(1.04490097,12.78758547)(4.42876241,16.15142366)(8.59816311,16.15142366)
-\curveto(12.76756381,16.15142366)(16.15142524,12.78758547)(16.15142524,8.64285628)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(11.62971615,11.301594)
-\curveto(11.62971615,10.68481858)(11.22925905,10.18424722)(10.7358387,10.18424722)
-\curveto(10.24241835,10.18424722)(9.84196125,10.68481858)(9.84196125,11.301594)
-\curveto(9.84196125,11.91836942)(10.24241835,12.41894077)(10.7358387,12.41894077)
-\curveto(11.22925905,12.41894077)(11.62971615,11.91836942)(11.62971615,11.301594)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.10800655,11.2045752)
-\curveto(7.10800655,10.58779978)(6.70754945,10.08722842)(6.2141291,10.08722842)
-\curveto(5.72070875,10.08722842)(5.32025165,10.58779978)(5.32025165,11.2045752)
-\curveto(5.32025165,11.82135062)(5.72070875,12.32192197)(6.2141291,12.32192197)
-\curveto(6.70754945,12.32192197)(7.10800655,11.82135062)(7.10800655,11.2045752)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(4.8882815,6.212727)
-\curveto(4.8882815,6.212727)(7.4916033,4.024721)(8.7645477,4.051998)
-\curveto(9.9089847,4.07652)(12.402781,6.170203)(12.402781,6.170203)
-\curveto(12.402781,6.170203)(9.8759707,4.572403)(8.7750803,4.568708)
-\curveto(7.6049475,4.564781)(4.8882815,6.212727)(4.8882815,6.212727)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.33086112,linecolor=curcolor]
-{
-\newpath
-\moveto(4.8882815,6.212727)
-\curveto(4.8882815,6.212727)(7.4916033,4.024721)(8.7645477,4.051998)
-\curveto(9.9089847,4.07652)(12.402781,6.170203)(12.402781,6.170203)
-\curveto(12.402781,6.170203)(9.8759707,4.572403)(8.7750803,4.568708)
-\curveto(7.6049475,4.564781)(4.8882815,6.212727)(4.8882815,6.212727)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.tex b/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.tex
deleted file mode 100644
index beb83428825..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-smiley_mauvaisehumeur.tex
+++ /dev/null
@@ -1,91 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,17)
-{
-\newrgbcolor{curcolor}{1 1 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(16.15142524,8.64285628)
-\curveto(16.15142524,4.49812709)(12.76756381,1.13428891)(8.59816311,1.13428891)
-\curveto(4.42876241,1.13428891)(1.04490097,4.49812709)(1.04490097,8.64285628)
-\curveto(1.04490097,12.78758547)(4.42876241,16.15142366)(8.59816311,16.15142366)
-\curveto(12.76756381,16.15142366)(16.15142524,12.78758547)(16.15142524,8.64285628)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.34016806,linecolor=curcolor]
-{
-\newpath
-\moveto(16.15142524,8.64285628)
-\curveto(16.15142524,4.49812709)(12.76756381,1.13428891)(8.59816311,1.13428891)
-\curveto(4.42876241,1.13428891)(1.04490097,4.49812709)(1.04490097,8.64285628)
-\curveto(1.04490097,12.78758547)(4.42876241,16.15142366)(8.59816311,16.15142366)
-\curveto(12.76756381,16.15142366)(16.15142524,12.78758547)(16.15142524,8.64285628)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(11.62971615,11.301594)
-\curveto(11.62971615,10.68481858)(11.22925905,10.18424722)(10.7358387,10.18424722)
-\curveto(10.24241835,10.18424722)(9.84196125,10.68481858)(9.84196125,11.301594)
-\curveto(9.84196125,11.91836942)(10.24241835,12.41894077)(10.7358387,12.41894077)
-\curveto(11.22925905,12.41894077)(11.62971615,11.91836942)(11.62971615,11.301594)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.10800655,11.2045752)
-\curveto(7.10800655,10.58779978)(6.70754945,10.08722842)(6.2141291,10.08722842)
-\curveto(5.72070875,10.08722842)(5.32025165,10.58779978)(5.32025165,11.2045752)
-\curveto(5.32025165,11.82135062)(5.72070875,12.32192197)(6.2141291,12.32192197)
-\curveto(6.70754945,12.32192197)(7.10800655,11.82135062)(7.10800655,11.2045752)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0.16862746 0 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(4.8838126,4.539119)
-\curveto(4.8838126,4.539119)(7.4902308,6.608049)(8.7646893,6.582256)
-\curveto(9.9104875,6.559069)(12.40725,4.579329)(12.40725,4.579329)
-\curveto(12.40725,4.579329)(9.8774342,6.090173)(8.7752344,6.093667)
-\curveto(7.6037098,6.09738)(4.8838126,4.539119)(4.8838126,4.539119)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=0.32192335,linecolor=curcolor]
-{
-\newpath
-\moveto(4.8838126,4.539119)
-\curveto(4.8838126,4.539119)(7.4902308,6.608049)(8.7646893,6.582256)
-\curveto(9.9104875,6.559069)(12.40725,4.579329)(12.40725,4.579329)
-\curveto(12.40725,4.579329)(9.8774342,6.090173)(8.7752344,6.093667)
-\curveto(7.6037098,6.09738)(4.8838126,4.539119)(4.8838126,4.539119)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-takecare.eps b/Master/texmf-dist/tex/latex/bclogo/bc-takecare.eps
new file mode 100644
index 00000000000..3e782a42678
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-takecare.eps
@@ -0,0 +1,173 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: TeXgraph
+%%BoundingBox: 0 0 17 21
+%%Page: 1 1
+/encoding_vector [
+/.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 /tilde /.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 /.notdef
+/space /exclamdown /cent /sterling
+/currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft
+/logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior
+/acute /mu /paragraph /bullet
+/cedilla /dotlessi /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
+/MF {
+/newfontname exch def
+ /fontname exch def
+ /fontdict fontname findfont def
+ /newfont fontdict maxlength dict def
+fontdict {
+ exch
+ dup /FID eq {
+ pop pop
+ } {
+ exch newfont 3 1 roll put
+ } ifelse
+ } forall
+ newfont /FontName newfontname put
+ encoding_vector length 256 eq {
+ newfont /Encoding encoding_vector put
+ } if
+ newfontname newfont definefont pop
+} def
+/Times-Roman /myfont MF
+/myfont findfont 10 scalefont setfont
+/gsave
+37 dict begin
+/bd{bind def} bind def /ld{load def}bd /gs/gsave ld /gr/grestore ld
+/fact{0.333}bd
+/h{-10 fact mul}def
+/m/moveto ld /rm/rmoveto ld /l/lineto ld /rl/rlineto ld
+/s/stroke ld /rgb/setrgbcolor ld /black{0 0 0 rgb} bd /white{1 1 1 rgb }bd
+/red{1 0 0 rgb} bd /green{0 1 0 rgb} bd /blue{0 0 1 rgb} bd /yellow{1 1 0 rgb}bd
+/cyan{0 1 1 rgb}bd /magenta{1 0 1 rgb}bd /gray{0.31 0.31 0.31 rgb}bd /thinlines{0.2 setlinewidth}bd
+/thicklines{0.8 setlinewidth}bd /Thicklines{1.4 setlinewidth}bd /SolidLine{[] 0 setdash}bd
+/DotLine{[0 2] 0 setdash}bd /DashLine{[2.5 2] 0 setdash}bd
+/CenterH{dup stringwidth pop 2 div 0 exch sub}bd
+/Right{dup stringwidth pop 0 exch sub}bd
+/Left{0}bd
+/CenterV{h rm show s}bd
+/Top{h 2 mul rm show s}bd
+/Bottom{0 rm show s}bd
+/dot{0.75 0 360 arc closepath gs s gr fill}bd /Bdot{1.5 0 360 arc closepath gs s gr fill}bd
+/cross{m 3 neg 0 rm 6 0 rl 3 neg 3 neg rm 0 6 rl s}bd
+/CM {matrix currentmatrix}bd
+/gfill{shfill}bd
+/sTs { << /ShadingType 4 /ColorSpace triCS /DataSource triDS >> gfill} def
+/triCS /DeviceRGB def
+%etat (Utilisateur)
+1 setlinejoin
+%Mbezier4 (Utilisateur)
+0 0 0 rgb
+thicklines
+8.3104 10.1623 m
+8.1493 7.1592 7.0105 4.1271 5.6411 1.6067 curveto
+s
+%Mbezier6 (Utilisateur)
+0 0.502 0 rgb
+thinlines
+3.5822 1.3721 m
+3.8325 2.5064 2.9815 3.8075 1.3796 3.5406 curveto
+s
+%Mbezier7 (Utilisateur)
+4.5333 1.4388 m
+4.9337 2.6732 4.4332 4.2745 2.7312 4.8083 curveto
+s
+%Mbezier8 (Utilisateur)
+6.886 1.4722 m
+7.6369 2.7065 9.0886 3.5072 11.0909 3.5739 curveto
+s
+%Mbezier9 (Utilisateur)
+7.9873 1.4054 m
+9.3889 2.84 11.9919 2.9734 12.5926 2.5064 curveto
+s
+%Mbezier12 (Utilisateur)
+0 0 0 rgb
+thicklines
+8.2852 10.0842 m
+11.4541 9.9386 14.3581 9.9092 15.1148 10.2661 curveto
+16.4261 10.8846 11.8912 18.8526 9.5965 20.1988 curveto
+7.3017 16.3058 3.4771 12.9949 0.1443 11.1393 curveto
+2.7669 10.5208 5.2695 10.2227 8.2852 10.0842 curveto
+closepath
+gs 1 1 0 rgb fill gr s
+%Mbezier10 (Utilisateur)
+thinlines
+9.1696 13.6178 m
+8.7061 13.6178 9.1016 16.1406 9.1577 16.7425 curveto
+9.1881 17.0696 9.9159 17.0319 9.8915 16.7134 curveto
+9.8425 16.0737 9.5583 13.6178 9.1696 13.6178 curveto
+closepath
+gs 0 0 0 rgb fill gr s
+%Mcercle1 (Utilisateur)
+0 360 0.6182 0.4116 8.7769 11.9397
+ /mtrx CM def translate scale 0 0 1 5 3 roll arc mtrx setmatrix closepath
+gs 0 0 0 rgb fill gr s
+%Mbezier13 (Utilisateur)
+0.1 setlinewidth
+0.3284 0.8717 m
+3.2788 2.0359 8.8518 1.9995 11.4743 0.8717 curveto
+0.502 0 0 rgb fill s 0 0 0 rgb
+%Controles (Utilisateur)
+%Selection (Utilisateur)
+
+end
+%EOF
+%%Trailer
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pdf b/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pdf
new file mode 100644
index 00000000000..b8097501f49
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pdf
Binary files differ
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pgf b/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pgf
deleted file mode 100644
index 65478951001..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pgf
+++ /dev/null
@@ -1,44 +0,0 @@
-% TeXgraph version 1.94 beta-7.3
-\begin{pgfpicture}{-0.2885cm}{-0.4663cm}{0.3015cm}{0.2837cm}%
-\pgfsetxvec{\pgfxy(0.1594,0)}
-\pgfsetyvec{\pgfxy(0,0.1061)}
-\pgfsetroundjoin%
-\pgfsetstrokecolor{black}
-\pgfsetlinewidth{0.8pt}
-\pgfmoveto{\pgfxy(0.0292,-1.0153)}
-\pgfcurveto{\pgfxy(-0.0065,-2.0135)}{\pgfxy(-0.2585,-3.0214)}{\pgfxy(-0.5615,-3.8592)}
-\pgfstroke
-\pgfsetstrokecolor{rgb,1:red,0;green,0.502;blue,0}
-\pgfsetlinewidth{0.2pt}
-\pgfmoveto{\pgfxy(-1.0171,-3.9372)}
-\pgfcurveto{\pgfxy(-0.9617,-3.5601)}{\pgfxy(-1.1501,-3.1276)}{\pgfxy(-1.5046,-3.2164)}
-\pgfstroke
-\pgfmoveto{\pgfxy(-0.8067,-3.915)}
-\pgfcurveto{\pgfxy(-0.718,-3.5047)}{\pgfxy(-0.8288,-2.9724)}{\pgfxy(-1.2055,-2.795)}
-\pgfstroke
-\pgfmoveto{\pgfxy(-0.286,-3.9039)}
-\pgfcurveto{\pgfxy(-0.1199,-3.4936)}{\pgfxy(0.2014,-3.2275)}{\pgfxy(0.6445,-3.2053)}
-\pgfstroke
-\pgfmoveto{\pgfxy(-0.0423,-3.9261)}
-\pgfcurveto{\pgfxy(0.2679,-3.4492)}{\pgfxy(0.8439,-3.4049)}{\pgfxy(0.9768,-3.5601)}
-\pgfstroke
-\pgfsetstrokecolor{black}
-\pgfsetlinewidth{0.8pt}
-\pgfmoveto{\pgfxy(0.0236,-1.0413)}
-\pgfcurveto{\pgfxy(0.7249,-1.0897)}{\pgfxy(1.3675,-1.0994)}{\pgfxy(1.535,-0.9808)}
-\pgfcurveto{\pgfxy(1.8251,-0.7752)}{\pgfxy(0.8216,1.8733)}{\pgfxy(0.3138,2.3208)}
-\pgfcurveto{\pgfxy(-0.194,1.0268)}{\pgfxy(-1.0404,-0.0738)}{\pgfxy(-1.7779,-0.6906)}
-\pgfcurveto{\pgfxy(-1.1976,-0.8962)}{\pgfxy(-0.6437,-0.9952)}{\pgfxy(0.0236,-1.0413)}
-\pgfsetfillcolor{rgb,1:red,1;green,1;blue,0}\pgffillstroke
-\pgfsetlinewidth{0.2pt}
-\pgfmoveto{\pgfxy(0.2193,0.1333)}
-\pgfcurveto{\pgfxy(0.1168,0.1333)}{\pgfxy(0.2043,0.9719)}{\pgfxy(0.2167,1.1719)}
-\pgfcurveto{\pgfxy(0.2234,1.2807)}{\pgfxy(0.3845,1.2681)}{\pgfxy(0.3791,1.1622)}
-\pgfcurveto{\pgfxy(0.3682,0.9496)}{\pgfxy(0.3054,0.1333)}{\pgfxy(0.2193,0.1333)}
-\pgfsetfillcolor{black}\pgffillstroke
-\pgfellipse[fillstroke]{\pgfxy(0.1324,-0.4245)}{\pgfxy(0.1368,0)}{\pgfxy(0,0.1368)}
-\pgfsetlinewidth{0.1pt}
-\pgfmoveto{\pgfxy(-1.7372,-4.1035)}
-\pgfcurveto{\pgfxy(-1.0843,-3.7165)}{\pgfxy(0.149,-3.7286)}{\pgfxy(0.7294,-4.1035)}
-\pgfsetfillcolor{rgb,1:red,0.502;green,0;blue,0}\pgffill
-\end{pgfpicture}%
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pst b/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pst
deleted file mode 100644
index 79693455312..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-takecare.pst
+++ /dev/null
@@ -1,28 +0,0 @@
-% TeXgraph version 1.94 beta-7.3
-\psset{xunit=0.1594cm, yunit=0.1061cm}
-\begin{pspicture}(-1.8099,-4.3932)(1.8912,2.6735)%
-\pstVerb{1 setlinejoin}%
-\psset{linecolor={black},linewidth=0.8pt}
-\psbezier(0.0292,-1.0153)(-0.0065,-2.0135)(-0.2585,-3.0214)(-0.5615,-3.8592)
-\psset{linecolor=[rgb]{0,0.502,0},linewidth=0.2pt}
-\psbezier(-1.0171,-3.9372)(-0.9617,-3.5601)(-1.1501,-3.1276)(-1.5046,-3.2164)
-\psbezier(-0.8067,-3.915)(-0.718,-3.5047)(-0.8288,-2.9724)(-1.2055,-2.795)
-\psbezier(-0.286,-3.9039)(-0.1199,-3.4936)(0.2014,-3.2275)(0.6445,-3.2053)
-\psbezier(-0.0423,-3.9261)(0.2679,-3.4492)(0.8439,-3.4049)(0.9768,-3.5601)
-\psset{linecolor={black},linewidth=0.8pt,fillstyle=solid,fillcolor=[rgb]{1,1,0}}
-\pscustom{%
-\psbezier(0.0236,-1.0413)(0.7249,-1.0897)(1.3675,-1.0994)(1.535,-0.9808)
-\psbezier(1.8251,-0.7752)(0.8216,1.8733)(0.3138,2.3208)
-\psbezier(-0.194,1.0268)(-1.0404,-0.0738)(-1.7779,-0.6906)
-\psbezier(-1.1976,-0.8962)(-0.6437,-0.9952)(0.0236,-1.0413)
-}
-\psset{linewidth=0.2pt,fillcolor={black}}
-\pscustom{%
-\psbezier(0.2193,0.1333)(0.1168,0.1333)(0.2043,0.9719)(0.2167,1.1719)
-\psbezier(0.2234,1.2807)(0.3845,1.2681)(0.3791,1.1622)
-\psbezier(0.3682,0.9496)(0.3054,0.1333)(0.2193,0.1333)
-}
-\psellipse(0.1324,-0.4245)(0.1368,0.1368)
-\psset{linewidth=0.1pt,linestyle=none,fillcolor=[rgb]{0.502,0,0}}
-\psbezier(-1.7372,-4.1035)(-1.0843,-3.7165)(0.149,-3.7286)(0.7294,-4.1035)
-\end{pspicture}%
diff --git a/Master/texmf-dist/tex/latex/bclogo/bc-trefle.tex b/Master/texmf-dist/tex/latex/bclogo/bc-trefle.tex
deleted file mode 100644
index ae0b14a4042..00000000000
--- a/Master/texmf-dist/tex/latex/bclogo/bc-trefle.tex
+++ /dev/null
@@ -1,145 +0,0 @@
-%LaTeX with PSTricks extensions
-%%Creator: inkscape 0.46
-%%Please note this file requires PSTricks extensions
-\psset{xunit=1pt,yunit=1pt,runit=1pt}
-\begin{pspicture}(17,20)
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=1,linecolor=curcolor]
-{
-\newpath
-\moveto(8.5267858,11.5178569)
-\curveto(7.3363096,13.0952382)(4.4466051,15.2522763)(5.0446429,17.2767857)
-\curveto(6.2305932,19.18484276)(7.3217885,17.2389816)(8.3482143,17.5446429)
-\curveto(9.9702381,17.6041667)(10.000836,18.7866847)(11.517857,17.6339286)
-\curveto(12.693566,16.4434904)(9.3601191,13.1994049)(8.5267858,11.5178569)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=1,linecolor=curcolor]
-{
-\newpath
-\moveto(9.1010673,10.8878421)
-\curveto(10.549317,12.2324366)(12.401564,15.3263642)(14.476362,14.9371351)
-\curveto(16.49505,13.9512035)(14.670138,12.6679343)(15.078514,11.6778798)
-\curveto(15.302546,10.0703001)(16.482052,10.1600179)(15.489409,8.533716)
-\curveto(14.424598,7.24313)(10.858587,10.2296865)(9.1010673,10.8878421)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=1,linecolor=curcolor]
-{
-\newpath
-\moveto(8.5819379,10.5112401)
-\curveto(9.759806,8.924422)(12.632229,6.744424)(12.018076,4.724745)
-\curveto(10.816959,2.826199)(9.7413053,4.780694)(8.7124761,4.483222)
-\curveto(7.0900293,4.436626)(7.0500098,3.254389)(5.5422223,4.419198)
-\curveto(4.3760372,5.618967)(7.7352302,8.836386)(8.5819379,10.5112401)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0 0}
-\pscustom[linewidth=1,linecolor=curcolor]
-{
-\newpath
-\moveto(8.0256846,10.9145758)
-\curveto(6.435531,9.741214)(4.2473912,6.874988)(2.2294627,7.494869)
-\curveto(0.33433278,8.701369)(2.2918722,9.771473)(1.9973206,10.8011422)
-\curveto(1.9553284,12.423714)(0.77321013,12.4670889)(1.9422924,13.971564)
-\curveto(3.1453662,15.13434)(6.3532401,11.7660318)(8.0256846,10.9145758)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0.50196081 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(2.3970198,8.032084)
-\curveto(2.3233591,8.077182)(2.1877564,8.1977)(2.0956805,8.299903)
-\curveto(1.8510626,8.571425)(1.8637104,8.71736)(2.1950555,9.446505)
-\curveto(2.539989,10.2055527)(2.5745934,10.3702366)(2.5115546,10.9527438)
-\curveto(2.4566394,11.4602014)(2.3620046,11.8012679)(2.1292149,12.3307273)
-\curveto(1.9327082,12.7776648)(1.9278546,12.9717406)(2.105426,13.2821031)
-\curveto(2.3140135,13.6466773)(2.3685805,13.6803393)(2.7069457,13.6531786)
-\curveto(3.2672912,13.6082)(3.8911336,13.2388768)(5.7898769,11.8280451)
-\curveto(6.4037162,11.371942)(6.9512015,10.9708197)(7.0065113,10.9366634)
-\curveto(7.0618202,10.9025072)(7.1019992,10.8630616)(7.095797,10.8490067)
-\curveto(7.074339,10.8003848)(5.6096854,9.483292)(5.1980416,9.142448)
-\curveto(4.4751635,8.5439)(3.8643693,8.171499)(3.3598992,8.021739)
-\curveto(3.0248787,7.922282)(2.5683555,7.927187)(2.3970198,8.032084)
-\lineto(2.3970198,8.032084)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0.50196081 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(7.7741599,13.1566081)
-\curveto(6.5398202,14.4922348)(6.0998095,15.0480447)(5.7969166,15.6542098)
-\curveto(5.5917653,16.0647674)(5.4996983,16.3918384)(5.4996983,16.7100746)
-\curveto(5.4996983,17.0258866)(5.5629399,17.1589411)(5.8300948,17.4051956)
-\curveto(6.10908,17.6623554)(6.2683769,17.6595339)(6.8613055,17.3869326)
-\curveto(7.6873903,17.0071366)(7.9748283,16.9555898)(8.6901412,17.0589656)
-\curveto(9.0695872,17.1138023)(9.4258666,17.2242706)(9.8970198,17.4331714)
-\curveto(10.35394,17.6357616)(10.534545,17.6384406)(10.852076,17.447338)
-\curveto(11.215985,17.2283232)(11.267798,17.137425)(11.21459,16.8113621)
-\curveto(11.126568,16.2719523)(10.580485,15.3345956)(9.5308207,13.9211487)
-\curveto(9.289051,13.5955875)(8.9529992,13.1333487)(8.7840412,12.8939514)
-\curveto(8.6150836,12.654554)(8.4638653,12.4586835)(8.4480015,12.4586835)
-\curveto(8.4321376,12.4586835)(8.1289091,12.7727496)(7.7741604,13.1566081)
-\lineto(7.7741599,13.1566081)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0.50196081 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(14.084359,8.866418)
-\curveto(13.663261,9.007188)(13.046145,9.29862)(12.463984,9.631639)
-\curveto(11.819937,10.0000598)(10.033955,11.0369241)(10.017751,11.051817)
-\curveto(9.9989006,11.0691429)(10.999352,12.203813)(11.601429,12.8479598)
-\curveto(12.602414,13.9188889)(13.396147,14.425679)(14.077551,14.428938)
-\curveto(14.294694,14.4299768)(14.366899,14.4080509)(14.541131,14.2881764)
-\curveto(14.786859,14.1191116)(14.918944,13.9195594)(14.919176,13.7170402)
-\curveto(14.919265,13.6356991)(14.828939,13.2972009)(14.718448,12.9648223)
-\curveto(14.557337,12.4801643)(14.517555,12.298854)(14.517555,12.0491969)
-\curveto(14.517555,11.4603451)(14.725591,10.8344728)(15.212422,9.958684)
-\curveto(15.335939,9.736497)(15.368265,9.634757)(15.350408,9.524475)
-\curveto(15.315497,9.308893)(15.094864,8.844122)(15.004466,8.795742)
-\curveto(14.864002,8.720571)(14.418216,8.754814)(14.084359,8.866419)
-\lineto(14.084359,8.866418)
-\closepath
-}
-}
-{
-\newrgbcolor{curcolor}{0 0.50196081 0}
-\pscustom[linestyle=none,fillstyle=solid,fillcolor=curcolor]
-{
-\newpath
-\moveto(6.3268608,4.535334)
-\curveto(5.8218367,4.805783)(5.7704845,4.886663)(5.8541166,5.279894)
-\curveto(5.9760546,5.85323)(6.4370162,6.607367)(7.7329577,8.353686)
-\curveto(8.1620309,8.931875)(8.5432555,9.450552)(8.5801229,9.506301)
-\curveto(8.6461055,9.606078)(8.6584323,9.595219)(9.3679858,8.812192)
-\curveto(10.615399,7.435609)(10.954851,6.998454)(11.28103,6.348522)
-\curveto(11.552683,5.807234)(11.642422,5.259387)(11.510753,4.946089)
-\curveto(11.477546,4.867079)(11.35746,4.717054)(11.243893,4.612701)
-\curveto(10.97425,4.364937)(10.798861,4.359752)(10.298805,4.584765)
-\curveto(9.2979457,5.035127)(9.1527564,5.069871)(8.5622497,5.000331)
-\curveto(8.074518,4.942894)(7.6604358,4.826695)(7.2068117,4.619972)
-\curveto(6.7308207,4.403056)(6.5977707,4.390258)(6.3268608,4.535335)
-\lineto(6.3268608,4.535334)
-\closepath
-}
-}
-\end{pspicture}
diff --git a/Master/texmf-dist/tex/latex/bclogo/bclogo.sty b/Master/texmf-dist/tex/latex/bclogo/bclogo.sty
index 174e321333b..b729209980a 100644
--- a/Master/texmf-dist/tex/latex/bclogo/bclogo.sty
+++ b/Master/texmf-dist/tex/latex/bclogo/bclogo.sty
@@ -1,7 +1,7 @@
\NeedsTeXFormat{LaTeX2e}
\def\PackageName{bclogo}
-\def\fileversion{v2.22}
-\def\filedate{2009/15/01}
+\def\fileversion{v2.24}
+\def\filedate{2009/09/09}
\ProvidesPackage{bclogo}
[\filedate\space\fileversion]
\RequirePackage{xkeyval,ifthen}
@@ -9,26 +9,29 @@
%% Les options globales du package sont au nombre de 2: tikz ou pstricks
\newif\iftikz%
+\newif\ifblur
\define@key{bclogo.sty}{tikz}[]{\tikztrue}%
\define@key{bclogo.sty}{pstricks}[]{\tikzfalse}%
+\define@key{bclogo.sty}{blur}[]{\blurtrue}%
\newlength{\logowidth}\setlength{\logowidth}{17pt}%
\ProcessOptionsX%
+
\iftikz%
\RequirePackage{tikz}%
\usetikzlibrary{shadows}% pour l'ombre
\usetikzlibrary{decorations.pathmorphing} % pour la barre ondulee
\else%
+\ifblur\RequirePackage{pst-blur}\fi%
\RequirePackage{graphicx}%
\RequirePackage{pstricks}%
\RequirePackage{pst-grad}%
\RequirePackage{pst-coil}% pour la barre ondulee
\fi%
+
% les symboles
% ==============================================================================
-% si l'option tikz est chargee
-\iftikz%
% la fleur
\newcommand\bcfleur{\includegraphics[width=\logowidth]{bc-fleur}}
% une note (Thomas Labarussias)
@@ -36,15 +39,18 @@
% panneau chantier (Jean-Michel Sarlat)
\newcommand\bcpanchant{\includegraphics[width=\logowidth]{bc-aux-301}}
% ours
+%\newcommand\bcours{\begingroup\input{bc-ours.tex}\endgroup}
\newcommand\bcours{\includegraphics[width=\logowidth]{bc-ours}}
% etoile
+%\newcommand\bcetoile{\begingroup\input{bc-etoile.tex}\endgroup}
\newcommand\bcetoile{\includegraphics[width=\logowidth]{bc-etoile}}
% attention
+%\newcommand\bcattention{\begingroup\input{bc-attention.tex}\endgroup}
\newcommand\bcattention{\includegraphics[width=\logowidth]{bc-attention}}
% attention P.Fradin
-\newcommand\bctakecare{\begingroup\input{bc-takecare.pgf}\endgroup}
+\newcommand\bctakecare{\includegraphics[width=\logowidth]{bc-takecare}}
% lampe P.Fradin
-\newcommand\bclampe{\begingroup\input{bc-lampe.pgf}\endgroup}
+\newcommand\bclampe{\includegraphics[width=\logowidth]{bc-lampe}}
% coeur
\newcommand\bccoeur{\includegraphics[width=\logowidth]{bc-coeur}}
% ornement (tire du site http://openclipart.org )
@@ -52,63 +58,49 @@
% danger (Francois)
\newcommand\bcdanger{\includegraphics[width=\logowidth]{bc-danger}}
% smiley bonne humeur (Francois)
-\newcommand\bcsmbh{\includegraphics[width=\logowidth]{bc-smiley_bonnehumeur}}
+\newcommand\bcsmbh{\includegraphics[width=\logowidth]{bc-smiley-bonnehumeur}}
% smiley bonne humeur (Francois)
-\newcommand\bcsmmh{\includegraphics[width=\logowidth]{bc-smiley_mauvaisehumeur}}
+\newcommand\bcsmmh{\includegraphics[width=\logowidth]{bc-smiley-mauvaisehumeur}}
% le trefle
\newcommand\bctrefle{\includegraphics[width=\logowidth]{bc-trefle}}
% le livre
-\newcommand\bcbook{\begingroup\input{bc-book.pgf}\endgroup}
+\newcommand\bcbook{\includegraphics[width=\logowidth]{bc-book}}
% point d'interrogation
\newcommand\bcquestion{\includegraphics[width=\logowidth]{bc-inter}}
% crayon anne-sophie philippe
\newcommand\bccrayon{\includegraphics[width=\logowidth]{bc-crayon}}
+% info (thomas labarrussias)
+\newcommand\bcinfo{\includegraphics[width=\logowidth]{bc-info}}
+% plume
+\newcommand\bcplume{\includegraphics[width=\logowidth]{bc-plume}}
% le pic LaTeX
-\newcommand\bcspadesuit{\centering \huge $\spadesuit$}
-
-
-% si l'option pstricks (par defaut)
-\else
-% la fleur
-\newcommand\bcfleur{\begingroup\input{bc-fleur.tex}\endgroup}
-% une note (Thomas Labarussias)
-\newcommand\bcnote{\begingroup\input{bc-note.tex}\endgroup}
-% panneau chantier (Jean-Michel Sarlat)
-\newcommand\bcpanchant{\includegraphics[width=\logowidth]{bc-aux-301.eps}}
-% ours
-\newcommand\bcours{\begingroup\input{bc-ours.tex}\endgroup}
-% etoile
-\newcommand\bcetoile{\begingroup\input{bc-etoile.tex}\endgroup}
-% attention
-\newcommand\bcattention{\begingroup\input{bc-attention.tex}\endgroup}
-% attention P.Fradin
-\newcommand\bctakecare{\begingroup\input{bc-takecare.pst}\endgroup}
-% lampe P.Fradin
-\newcommand\bclampe{\begingroup\input{bc-lampe.pst}\endgroup}
-% coeur
-\newcommand\bccoeur{\begingroup\input{bc-coeur.tex}\endgroup}
-% ornement (tire du site http://openclipart.org )
-\newcommand\bcorne{\begingroup\input{bc-orne.tex}\endgroup}
-% danger (Francois)
-\newcommand\bcdanger{\begingroup\input{bc-danger.tex}\endgroup}
-% smiley bonne humeur (Francois)
-\newcommand\bcsmbh{\begingroup\input{bc-smiley_bonnehumeur.tex}\endgroup}
-% smiley bonne humeur (Francois)
-\newcommand\bcsmmh{\begingroup\input{bc-smiley_mauvaisehumeur.tex}\endgroup}
-% le trefle
-\newcommand\bctrefle{\begingroup\input{bc-trefle.tex}\endgroup}
-% le livre
-\newcommand\bcbook{\begingroup\input{bc-book.pst}\endgroup}
-% point d'interrogation
-\newcommand\bcquestion{\begingroup\input{bc-inter.tex}\endgroup}
-% crayon anne-sophie philippe
-\newcommand\bccrayon{\begingroup\input{bc-crayon.tex}\endgroup}
-% le pic LaTeX
-\newcommand\bcspadesuit{\centering \huge $\spadesuit$}
-
-\fi
-
-
+\newcommand\bcspadesuit{{\centering \huge $\spadesuit$}}
+% logos Alphonse Capriani
+\newcommand\bcbombe{\includegraphics[width=\logowidth]{bcbombe}}
+\newcommand\bccube{\includegraphics[width=\logowidth]{bccube}}
+\newcommand\bcdallemagne{\includegraphics[width=\logowidth]{bcdallemagne}}
+\newcommand\bcdbelgique{\includegraphics[width=\logowidth]{bcdbelgique}}
+\newcommand\bcdfrance{\includegraphics[width=\logowidth]{bcdfrance}}
+\newcommand\bcditalie{\includegraphics[width=\logowidth]{bcditalie}}
+\newcommand\bcdodecaedre{\includegraphics[width=\logowidth]{bcdodecaedre}}
+\newcommand\bcdpaysbas{\includegraphics[width=\logowidth]{bcdpaysbas}}
+\newcommand\bceclaircie{\includegraphics[width=\logowidth]{bceclaircie}}
+\newcommand\bcicosaedre{\includegraphics[width=\logowidth]{bcicosaedre}}
+\newcommand\bcinterdit{\includegraphics[width=\logowidth]{bcinterdit}}
+\newcommand\bcneige{\includegraphics[width=\logowidth]{bcneige}}
+\newcommand\bcoctaedre{\includegraphics[width=\logowidth]{bcoctaedre}}
+\newcommand\bcpluie{\includegraphics[width=\logowidth]{bcpluie}}
+\newcommand\bcpoisson{\includegraphics[width=\logowidth]{bcpoisson}}
+\newcommand\bcsoleil{\includegraphics[width=\logowidth]{bcsoleil}}
+\newcommand\bcstop{\includegraphics[width=\logowidth]{bcstop}}
+\newcommand\bctetraedre{\includegraphics[width=\logowidth]{bctetraedre}}
+\newcommand\bccalendrier{\includegraphics[width=\logowidth]{bccalendrier}}
+\newcommand\bchorloge{\includegraphics[width=\logowidth]{bchorloge}}
+\newcommand\bcying{\includegraphics[width=\logowidth]{bcying}}
+\newcommand\bcrosevents{\includegraphics[width=\logowidth]{bcrosevents}}
+% fin alphonse
+% Vincent Pantaloni route glissante
+\newcommand\bcdz{\includegraphics[width=\logowidth]{bc-dz}}
% =========================== La fonction listable =============================
\newcommand{\titrebclogo}{Liste des \texttt{bclogo}}
@@ -119,8 +111,10 @@
% ======================================= les keys =============================
-\newlength{\val@epBarre} % on definit une longueur : l'epaisseur de la barre
+\newlength{\val@epBarre} % on definit une longueur : l'epaisseur de la barre en point
+\newlength{\val@framesep} % on definit une longueur : l'epaisseur de la marge en point
\newlength{\val@tailleOndu} % on definit une longueur : taille d'une ondulation
+\newlength{\val@borderWidth} % on definit une longueur : epaisseur du bord
\define@key{bclogo}{logo}[\bcfleur]{\def\val@logo{#1}}
\define@key{bclogo}{couleur}[white]{\def\val@couleur{#1}}
\define@key{bclogo}{arrondi}[0]{\def\val@arrondi{#1}}
@@ -128,23 +122,26 @@
\define@key{bclogo}{arrondi}[0]{\def\val@arrondi{#1}}
\define@key{bclogo}{couleurOmbre}[black]{\def\val@couleurOmbre{#1}}
\define@key{bclogo}{couleurBarre}[black]{\def\val@couleurBarre{#1}}
+\define@key{bclogo}{couleurBord}[black]{\def\val@couleurBord{#1}} % modification Philippe Fortemps
\define@key{bclogo}{imageBarre}[]{\def\val@imageBarre{#1}}
\define@key{bclogo}{motifBarre}[*]{\def\val@motifBarre{#1}}
+\define@key{bclogo}{marge}[4]{\setlength{\val@framesep}{#1 pt}\iftikz\else\setlength{\psframesep}{#1 pt}\fi}
+\define@key{bclogo}{sousTitre}[]{\def\val@sousTitre{#1}}
\define@key{bclogo}{epBarre}[1.5]{\setlength{\val@epBarre}{#1 pt}}
+\define@key{bclogo}{epBord}[0.8]{\setlength{\val@borderWidth}{#1 pt}}%
\define@key{bclogo}{tailleOndu}[2.5]{\setlength{\val@tailleOndu}{#1 pt}}
\define@boolkey{bclogo}{cadreTitre}[true]{}
\define@boolkey{bclogo}{noborder}[true]{}
\define@boolkey{bclogo}{ombre}[true]{}
\define@boolkey{bclogo}{avecBarre}[true]{}
-\define@choicekey{bclogo}{barre}{none,line,snake,motif,zigzag,imageExt,imageClip}[line]{%
+\define@boolkey{bclogo}{blur}[true]{}
+\define@choicekey{bclogo}{barre}{none,line,snake,motif,zigzag,imageExt,imageClip, wave}[line]{%
\ifthenelse{\equal{#1}{none}}{\KV@bclogo@avecBarrefalse}%
{\def\bc@barre{\@nameuse{bc@barre#1}}}%
}%
-
-
% selection par defaut
-\presetkeys{bclogo}{logo,barre,couleur,arrondi,couleurOmbre,couleurBarre,epOmbre,epBarre,tailleOndu,ombre=false,cadreTitre=false, avecBarre = true,noborder=false}{}%
+\presetkeys{bclogo}{logo,barre,couleur,arrondi,couleurOmbre,couleurBarre,epOmbre,epBarre,epBord,tailleOndu,ombre=false,cadreTitre=false, avecBarre=true,noborder=false,marge,sousTitre, couleurBord,blur=false}{}%
% les differente commande de barre vertical a gauche
@@ -155,6 +152,10 @@
\vbox to \invboxh{\cleaders\vbox{\vss \val@motifBarre \vss}\vfill}%
\end{minipage}}
+\newcommand{\bc@barrewave}{%
+\begin{minipage}{\logowidth}\color{\val@couleurBarre}\centering%
+\vbox to \invboxh{\cleaders\vbox{\vss $\leftwave\right.$ \vss}\vfill}%
+\end{minipage}}
\newcommand{\bc@barresnake}{%
\begin{minipage}{\logowidth}\centering
@@ -205,14 +206,11 @@ clip=true]{\val@imageBarre}%
\newlength{\invboxh}\newlength{\invboxd}
%%% precaution JCC
\newcommand*\bclogotitre{}
-\newlength{\pgfframesep}
-\setlength{\pgfframesep}{\iftikz3pt\else\psframesep\fi}
-
+\newcommand\styleSousTitre[1]{\normalsize \textit{#1}}
%======================= L'environnement =======================================
\newenvironment*{bclogo}[2][]{%
\setkeys{bclogo}{#1}%on recupere les options
- \par\noindent% attention au retrait d'alinea
% on definit les commandes qui seront utilisees dans la seconde
% parti de l'environnement
% la commande pour le titre
@@ -234,36 +232,30 @@ clip=true]{\val@imageBarre}%
\fi%
}
\else %sinon cadreTitre = false
- \newcommand{\structitre}{\large \textbf{#2}}%
+ \newcommand{\structitre}{\large\textbf{#2} \styleSousTitre{\val@sousTitre}}%
\fi%
\begin{lrbox}{\invbox}%
-\begin{minipage}{\dimexpr\linewidth-2\pgfframesep-4pt-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt\fi\relax}%
+\begin{minipage}{\dimexpr\linewidth-2\val@framesep-\ifKV@bclogo@noborder 0pt\else2\val@borderWidth\fi-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt\fi\relax}%
}%
{%
\end{minipage}%
\end{lrbox}%
-% calcul de la hauteur totale de la boite intéreure
+% calcul de la hauteur totale de la boite interieure
\settoheight{\invboxh}{\usebox{\invbox}}%
\settodepth{\invboxd}{\usebox{\invbox}}%
\addtolength{\invboxh}{\invboxd}%
% on commence la boite interieur ou est le texte et la barre vertical
\begin{lrbox}{\envbox}%
- \begin{tabular}{@{}c@{}p{\dimexpr\linewidth-2
-\pgfframesep-4pt-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt
-\fi}@{}}
+ \begin{tabular}{@{}c@{}p{\dimexpr\linewidth-2\val@framesep-\ifKV@bclogo@noborder 0pt\else2\val@borderWidth\fi-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt\fi}@{}}%
\begin{minipage}{\logowidth}{\refstepcounter{bclogocompteur}\bccaption{\bclogotitre}\val@logo}\end{minipage}&%
\ifKV@bclogo@cadreTitre%
- \begin{minipage}{\dimexpr\linewidth-2
- \pgfframesep-4pt-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt
- \fi}{\structitre}\end{minipage}%
- \else\structitre\fi\\%
+ \begin{minipage}{\dimexpr\linewidth-2\val@framesep-\logowidth-\ifKV@bclogo@ombre\val@epOmbre cm\else0pt\fi}{\structitre}\end{minipage}%
+ \else\structitre\fi\tabularnewline%
\ifKV@bclogo@avecBarre% si il y a une barre verticale
\bc@barre&\usebox{\invbox}%
- \else% sinon
- \multicolumn{2}{c}{\usebox{\invbox}}%
- \fi%
+ \else\multicolumn{2}{c}{\usebox{\invbox}}\fi%
\end{tabular}%
\end{lrbox}%
@@ -272,22 +264,39 @@ clip=true]{\val@imageBarre}%
\par\noindent
\begin{tikzpicture}%
\ifKV@bclogo@ombre%cadre ombre
- \node[fill=\val@couleur,thick, shape=rectangle, inner sep=\pgfframesep, rounded corners=\arr cm,%
- general shadow={fill=\val@couleurOmbre},shadow xshift=\val@epOmbre cm, shadow yshift=-\val@epOmbre cm, draw=\ifKV@bclogo@noborder none\else black\fi]{\usebox{\envbox}};
+ \ifKV@bclogo@blur%blur
+ \node[%
+preaction={line width=6,line join=round,opacity=0.1,draw=\val@couleurOmbre,transform canvas={xshift=\val@epOmbre cm, yshift=-\val@epOmbre cm}},%
+preaction={line width=5,line join=round,opacity=0.15,draw=\val@couleurOmbre,transform canvas={xshift=\val@epOmbre cm, yshift=-\val@epOmbre cm}},%
+preaction={line width=4,line join=round,opacity=0.2,draw=\val@couleurOmbre,transform canvas={xshift=\val@epOmbre cm, yshift=-\val@epOmbre cm}},%
+preaction={line width=3,line join=round,opacity=0.3,draw=\val@couleurOmbre,transform canvas={xshift=\val@epOmbre cm, yshift=-\val@epOmbre cm}},%
+preaction={line width=2,line join=round,opacity=0.4,draw=\val@couleurOmbre,transform canvas={xshift=\val@epOmbre cm, yshift=-\val@epOmbre cm}},%
+preaction={line width=1,line join=round,opacity=0.5,draw=\val@couleurOmbre,transform canvas={xshift=\val@epOmbre cm, yshift=-\val@epOmbre cm}},%
+general shadow={fill=\val@couleurOmbre,opacity=1,shadow xshift=\val@epOmbre cm, shadow yshift=-\val@epOmbre cm},%
+fill=\val@couleur,shape=rectangle,line width=\val@borderWidth, inner sep=\val@framesep, rounded corners=\arr cm,%
+draw=\ifKV@bclogo@noborder none\else \val@couleurBord\fi]{\usebox{\envbox}};
+ \else %ombre sans blur
+ \node[fill=\val@couleur,shape=rectangle,line width=\val@borderWidth, inner sep=\val@framesep, rounded corners=\arr cm,%
+ general shadow={fill=\val@couleurOmbre, shadow xshift=\val@epOmbre cm, shadow yshift=-\val@epOmbre cm}, draw=\ifKV@bclogo@noborder none\else \val@couleurBord\fi]{\usebox{\envbox}};
+ \fi% fin ifblur
\else%cadre sans ombre
- \node[fill=\val@couleur,thick, shape=rectangle, inner sep=\pgfframesep,rounded corners=\arr cm, draw=\ifKV@bclogo@noborder none\else black\fi]{\usebox{\envbox}};
+ \node[fill=\val@couleur,thick, shape=rectangle,line width=\val@borderWidth, inner sep=\val@framesep,rounded corners=\arr cm, draw=\ifKV@bclogo@noborder none\else \val@couleurBord\fi]{\usebox{\envbox}};
\fi
- \end{tikzpicture}
- \par%
+ \end{tikzpicture}%
+ %\par%
\else% pstricks
\noindent
\ifKV@bclogo@ombre%cadre ombre
- \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2,fillstyle=solid, shadow=true, shadowsize=\val@epOmbre cm,%
- shadowcolor=\val@couleurOmbre, fillcolor=\val@couleur,linestyle=\ifKV@bclogo@noborder none\else solid\fi]{\usebox{\envbox}}
+ \ifKV@bclogo@blur%blur
+ \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2,fillstyle=solid, shadow=true, blur=true, shadowsize=\val@epOmbre cm,%
+ shadowcolor=\val@couleurOmbre, fillcolor=\val@couleur,linewidth=\val@borderWidth, linestyle=\ifKV@bclogo@noborder none\else solid\fi,linecolor=\val@couleurBord]{\usebox{\envbox}}
+ \else
+ \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2,fillstyle=solid, shadow=true, shadowsize=\val@epOmbre cm,%
+ shadowcolor=\val@couleurOmbre, fillcolor=\val@couleur,linewidth=\val@borderWidth,linestyle=\ifKV@bclogo@noborder none\else solid\fi,linecolor=\val@couleurBord]{\usebox{\envbox}}
+ \fi
\else%cadre sans ombre
- \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2 ,fillstyle=solid, fillcolor=\val@couleur,linestyle=\ifKV@bclogo@noborder none\else solid\fi]{\usebox{\envbox}}
+ \psframebox[cornersize=absolute,linearc=\dimexpr\arr cm * 2 ,fillstyle=solid, fillcolor=\val@couleur,linewidth=\val@borderWidth, linestyle=\ifKV@bclogo@noborder none\else solid\fi,linecolor=\val@couleurBord]{\usebox{\envbox}}
\fi%
- \par\vspace*{0.2cm}
\fi%fin
\ifKV@bclogo@ombre\vspace*{\val@epOmbre cm}\fi
}%